00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(__INCLUDE_NetServerTCP2Destinationh_INCLUDE__)
00022 #define __INCLUDE_NetServerTCP2Destinationh_INCLUDE__
00023
00024 #include <net/NetInterface.h>
00025 #include <list>
00026 #include <map>
00027
00028 class NetServerTCP2;
00029 class NetServerTCP2Destination : public NetMessageHandlerI
00030 {
00031 public:
00032 NetServerTCP2Destination(NetMessageHandler *incomingMessageHandler,
00033 TCPsocket socket, unsigned int destinationId);
00034 virtual ~NetServerTCP2Destination();
00035
00036 void printStats(unsigned int destinationId);
00037 void stop() { stopped_ = true; }
00038 bool finished() { return finished_; }
00039
00040 unsigned int getIpAddress();
00041 static unsigned int getIpAddressFromSocket(TCPsocket socket);
00042
00043 void addMessage(NetMessage *message)
00044 {
00045 outgoingMessageHandler_.addMessage(message);
00046 }
00047
00048
00049 virtual void processMessage(NetMessage &message);
00050
00051 protected:
00052 enum HeaderType
00053 {
00054 TypeNone = 0,
00055 TypeMessage = 1,
00056 TypeLast = 4
00057 };
00058
00059 bool packetLogging_;
00060 unsigned int destinationId_;
00061 SDL_Thread *sendRecvThread_;
00062 TCPsocket socket_;
00063 SDLNet_SocketSet socketSet_;
00064 NetBuffer currentMessagePart_;
00065 NetMessage *currentMessage_;
00066 int currentMessageLen_;
00067 char currentMessageType_;
00068 int currentMessageSentLen_;
00069 unsigned int messagesSent_, messagesRecieved_;
00070 unsigned int bytesIn_, bytesOut_;
00071 bool stopped_, finished_;
00072 NetMessageHandler outgoingMessageHandler_;
00073 NetMessageHandler *incomingMessageHandler_;
00074 std::list<NetMessage *> outgoingMessages_;
00075
00076 enum SocketResult
00077 {
00078 SocketActivity,
00079 SocketEmpty,
00080 SocketClosed
00081 };
00082 SocketResult checkIncoming();
00083 SocketResult checkOutgoing();
00084
00085 static int sendRecvThreadFunc(void *c);
00086 void actualSendRecvFunc();
00087 bool sendHeader(char headerType, int len);
00088 };
00089
00090 #endif // __INCLUDE_NetServerTCP2Destinationh_INCLUDE__