Go to the documentation of this file.00001
00002
00003
00004 #ifndef GOSU_SOCKETS_HPP
00005 #define GOSU_SOCKETS_HPP
00006
00007 #include <Gosu/TR1.hpp>
00008 #include <cstddef>
00009 #include <string>
00010
00011 namespace Gosu
00012 {
00014 typedef std::tr1::uint32_t SocketAddress;
00015
00017 typedef std::tr1::uint16_t SocketPort;
00018
00021 const SocketPort anyPort = 0;
00022
00027 SocketAddress stringToAddress(const std::string& s);
00029 std::string addressToString(SocketAddress address);
00030
00035 class MessageSocket
00036 {
00037 struct Impl;
00038 const std::auto_ptr<Impl> pimpl;
00039
00040 public:
00044 explicit MessageSocket(SocketPort port);
00045 ~MessageSocket();
00046
00048 SocketAddress address() const;
00050 SocketPort port() const;
00053 std::size_t maxMessageSize() const;
00054
00057 void update();
00058
00061 void send(SocketAddress address, SocketPort port,
00062 const void* buffer, std::size_t size);
00063
00064
00065
00067 std::tr1::function<void (SocketAddress, SocketPort, const void*,
00068 std::size_t)> onReceive;
00069 };
00070
00073 enum CommMode
00074 {
00075 cmRaw,
00076
00077 cmManaged
00078 };
00079
00080 class Socket;
00081
00084 class CommSocket
00085 {
00086 struct Impl;
00087 const std::auto_ptr<Impl> pimpl;
00088
00089 public:
00090 CommSocket(CommMode mode, SocketAddress targetAddress,
00091 SocketPort targetPort);
00092 CommSocket(CommMode mode, Socket& socket);
00093 ~CommSocket();
00094
00095 SocketAddress address() const;
00096 SocketPort port() const;
00097 SocketAddress remoteAddress() const;
00098 SocketPort remotePort() const;
00099 CommMode mode() const;
00100
00101 bool connected() const;
00102 void disconnect();
00103 bool keepAlive() const;
00104 void setKeepAlive(bool value);
00105
00106 void update();
00107 void send(const void* buffer, std::size_t size);
00108 void sendPendingData();
00109 std::size_t pendingBytes() const;
00110
00111 std::tr1::function<void (const void*, std::size_t)> onReceive;
00112 std::tr1::function<void ()> onDisconnection;
00113 };
00114
00117 class ListenerSocket
00118 {
00119 struct Impl;
00120 const std::auto_ptr<Impl> pimpl;
00121
00122 public:
00123 ListenerSocket(SocketPort port);
00124 ~ListenerSocket();
00125
00126 SocketAddress address() const;
00127 SocketPort port() const;
00128
00129 void update();
00130
00133 std::tr1::function<void (Socket&)> onConnection;
00134 };
00135 }
00136
00137 #endif