Sockets.hpp
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         /*void broadcast(SocketPort port, const void* buffer,
00064             std::size_t size);*/
00065 
00067         std::tr1::function<void (SocketAddress, SocketPort, const void*,
00068             std::size_t)> onReceive;
00069     };
00070     
00073     enum CommMode
00074     {
00075         cmRaw,
00076         //cmLines,
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