00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef ACEDIA_NETWORK_H
00031 #define ACEDIA_NETWORK_H
00032
00033 #include "acedia.hpp"
00034 #include "either.hpp"
00035
00036 namespace acedia
00037 {
00042 enum PublishingError
00043 {
00047 NO_PUBLISHING_ERROR,
00048
00053 SERVER_SOCKET_ERROR,
00054
00060 BINDING_ERROR
00061 };
00062 const char *asString(PublishingError pe);
00063
00067 class PublishingResult
00068 {
00069
00070 PublishingError m_error;
00071
00072 public:
00073
00074 ~PublishingResult();
00075
00076 inline PublishingResult(PublishingError err) throw() : m_error(err) { }
00077
00081 inline bool successful() const throw()
00082 {
00083 return m_error == NO_PUBLISHING_ERROR;
00084 }
00085
00089 inline PublishingError error() const throw() { return m_error; }
00090
00091 const char *errorAsString() const throw();
00092 };
00093
00097 PublishingResult publish(ActorRef actor, boost::uint16_t port);
00098
00105 void closeConnections(ActorRef actor);
00106
00110 void closeConnection(ActorRef actor, boost::uint16_t port);
00111
00116 enum ConnectionError
00117 {
00121 NO_CONNECTION_ERROR,
00125 CONNECTION_SOCKET_ERROR,
00126
00130 NO_SUCH_HOST_ERROR,
00131
00135 COULD_NOT_CONNECT_TO_HOST_ERROR,
00136
00141 INCOMPATIBLE_ACEDIA_VERSIONS_ERROR,
00142
00147 INCOMPATIBLE_HOST_ERROR
00148 };
00149
00150 const char *asString(ConnectionError ce);
00151
00152 }
00153
00154 ACEDIA_ANNOUNCE((acedia)(ConnectionError))
00155
00156 namespace acedia
00157 {
00164 std::pair<ActorRef, ConnectionError> remoteActor(const char *host,
00165 boost::uint16_t port);
00166 }
00167
00168 #endif // ACEDIA_NETWORK_H