Remove dynamic exceptions
[anna.git] / include / anna / comm / DatagramSocket.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_comm_DatagramSocket_hpp
10 #define anna_comm_DatagramSocket_hpp
11
12 #include <anna/comm/ClientSocket.hpp>
13
14 namespace anna {
15
16 namespace comm {
17
18 /**
19    Esta clase implementa un Socket no orientado a conexion.
20 */
21 class DatagramSocket : public ClientSocket {
22 public:
23   /**
24    * Indica el uso que tendrá este DatagramSocket, si para recibir o para enviar.
25    */
26   enum Mode { ReadOnly, WriteOnly };
27
28   /**
29      Crear un Socket no orientado a conexion de un sólo sentido.
30
31      Los datagram socket definidos como \em Mode \em ReadOnly tienen que ser asociados al
32      comunicador mediante la invocación al método anna::comm::Communicator::attach.
33
34      Los datagram socket definidos como \em Mode \em WriteOnly tienen que invocar a al
35      método #connect antes de poder ser usados.
36
37      \param mode Uso que se dará a este DatagramSocket.
38      \param address Dirección en la que enviar o recibir mensajes.
39      \param transportFactory Factoria de protocolos de transporte a usar por este sockets.
40      \warning La factoria de protocolos debe estar disponible mientras el Socket esta activo.
41   */
42   DatagramSocket(const Mode mode, const INetAddress& address, TransportFactory* transportFactory = NULL);
43
44   /**
45      Devuelve el modo en que fue instanciado este Socket.
46      \return el modo en que fue instanciado este Socket.
47   */
48   Mode getMode() const { return a_mode; }
49
50   /**
51      Devuelve \em true si el socket fue instancia como sólo-lectura.
52      \return \em true si el socket fue instancia como sólo-lectura.
53   */
54   const bool isReadOnly() const { return a_mode == ReadOnly; }
55
56   /**
57      Devuelve \em true si el socket fue instancia como sólo-lectura.
58      \return \em true si el socket fue instancia como sólo-lectura.
59   */
60   const bool isWriteOnly() const { return a_mode == WriteOnly; }
61
62   /**
63      Prepara el socket para enviar a la direccion indicada en el constructor.
64   */
65   void connect() noexcept(false);
66
67 private:
68   const Mode a_mode;
69
70   void do_write(const DataBlock&) noexcept(false);
71   int do_read(const char* data, const int maxSize) noexcept(false);
72 };
73
74 }
75 }
76
77
78 #endif
79
80
81