[Gcblue-commits] gcb_wx/include/network tcConnectionData.h,1.7,1.8 tcControlMessageHandler.h,1.6,1.7
Status: Alpha
Brought to you by:
ddcforge
|
From: Dewitt C. <ddc...@us...> - 2005-04-16 20:44:04
|
Update of /cvsroot/gcblue/gcb_wx/include/network In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11092/include/network Modified Files: tcConnectionData.h tcControlMessageHandler.h tcMessage.h tcMultiplayerInterface.h tcNetworkInterface.h Log Message: housekeeping, networking upgrades, fixed wrapping problems with world map Index: tcControlMessageHandler.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/network/tcControlMessageHandler.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcControlMessageHandler.h 8 Apr 2005 01:54:11 -0000 1.6 --- tcControlMessageHandler.h 16 Apr 2005 20:43:55 -0000 1.7 *************** *** 55,58 **** --- 55,59 ---- }; + static void CreateControlMessage(int messageCode, unsigned& messageSize, unsigned char *data, int param = 0); Index: tcMultiplayerInterface.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/network/tcMultiplayerInterface.h,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** tcMultiplayerInterface.h 8 Apr 2005 01:54:11 -0000 1.19 --- tcMultiplayerInterface.h 16 Apr 2005 20:43:55 -0000 1.20 *************** *** 1,6 **** ! /** @file tcMultiplayerInterface.h*/ ! /* ! ** ! ** Copyright (C) 2003 Dewitt Colclough (de...@tw...) ** All rights reserved. --- 1,6 ---- ! /** ! ** @file tcMultiplayerInterface.h ! */ ! /* Copyright (C) 2003-2005 Dewitt Colclough (de...@tw...) ** All rights reserved. *************** *** 27,32 **** #endif ! #include <queue> #include <map> #include <string> #include <vector> --- 27,33 ---- #endif ! #include <list> #include <map> + #include <queue> #include <string> #include <vector> *************** *** 56,67 **** public: std::string name; ///< handle for player int alliance; ///< player's alliance ! unsigned timestamp; ///< time of last update float ping_s; ///< value of last ping ! std::map<long, double> lastUpdate; ///< map of (obj id, update time) pairs void EraseEntry(long id); ! bool GetLastUpdate(long id, double& updateTime); ! void SetUpdate(long id, double updateTime); }; --- 57,72 ---- public: std::string name; ///< handle for player + bool isAuthenticated; ///< true if password has been verified int alliance; ///< player's alliance ! unsigned int timestamp; ///< time of last network update (30 Hz tics) ! unsigned int startTime; ///< time connection started (30 Hz tics) ! unsigned int entityUpdateTime; ///< time of last entity update (30 Hz tics) ! unsigned int sensorUpdateTime; ///< time of last sensor update (30 Hz tics) float ping_s; ///< value of last ping ! std::map<long, unsigned int> lastUpdate; ///< map of (obj id, update time (30Hz tics)) void EraseEntry(long id); ! bool GetLastUpdate(long id, unsigned int& updateTime); ! void SetUpdate(long id, unsigned int updateTime); }; *************** *** 82,86 **** MSG_CHATTEXT = 1, MSG_CONTROL = 2, ! MSG_USERNAME = 3, MSG_UPDATE = 4 }; --- 87,91 ---- MSG_CHATTEXT = 1, MSG_CONTROL = 2, ! MSG_AUTHENTICATION = 3, MSG_UPDATE = 4 }; *************** *** 89,99 **** void AddChatSubscriber(tcConsoleBox* subscriber); void AddMessageHandler(int messageId, tcMessageHandler* handler); void BroadcastControlMessage(int messageCode); //std::string GetChatText(); ! int GetConnectionId(unsigned connectionIdx); ! std::string GetConnectionStatus(unsigned connectionIdx); wxEvtHandler* GetEvtHandler() const; ! std::string GetName() const; ! unsigned GetNumConnections(); tcPlayerStatus& GetPlayerStatus(int connectionId); ///< redundant with GetConnectionStatus? void InitMessageHandlers(); --- 94,109 ---- void AddChatSubscriber(tcConsoleBox* subscriber); void AddMessageHandler(int messageId, tcMessageHandler* handler); + void AuthenticatePlayer(int connectionId, const std::string& username, + const std::string& passwordHash); + void BroadcastChatText(const std::string& message); void BroadcastControlMessage(int messageCode); //std::string GetChatText(); ! ! const std::list<int>& GetConnectionList() const; ! std::string GetConnectionStatus(int connectionId); wxEvtHandler* GetEvtHandler() const; ! const std::string& GetName() const; ! unsigned int GetNumConnections(); ! const std::string& GetPassword() const; tcPlayerStatus& GetPlayerStatus(int connectionId); ///< redundant with GetConnectionStatus? void InitMessageHandlers(); *************** *** 107,113 **** --- 117,127 ---- void ProcessCommandServer(const std::string& text); void RemoveChatSubscriber(tcConsoleBox* subscriber); + void Reset(); + void SendAuthRequest(int destination); + void SendAuthResponse(int destination); void SendChatText(int destination, const std::string& message); void SendControlMessage(int destination, int messageCode, int param = 0); void SendControlMessageUDP(int destination, int messageCode, int param = 0); + void SendControlMessageUDPAck(int destination, int messageCode, int param = 0); void SendTestUDP(int destination, const std::string& message); void SendUpdateMessage(int destination, tcStream& stream); *************** *** 115,119 **** void SetEvtHandler(wxEvtHandler *eh); void SetName(const std::string& name); ! void SetPingTime(int connectionId, float ping_s); void Update(); --- 129,135 ---- void SetEvtHandler(wxEvtHandler *eh); void SetName(const std::string& name); ! void SetPassword(const std::string& plainText); ! void SetPingTime(int connectionId, float ping_s); ! void Update(); *************** *** 124,128 **** std::queue<std::string> chatText; ///< chat text to display std::vector<tcConsoleBox*> chatSubscribers; ! std::string myName; ///< name to identify player std::map<int, tcPlayerStatus> playerInfo; ///< map of (connection id, tcPlayerStatus) pairs std::map<int, std::vector<tcMessageHandler*> > messageMap; ///< map of (message id, message handler vector) pairs --- 140,145 ---- std::queue<std::string> chatText; ///< chat text to display std::vector<tcConsoleBox*> chatSubscribers; ! std::string myName; ///< name to identify player (username) ! std::string passwordHash; ///< hashed password std::map<int, tcPlayerStatus> playerInfo; ///< map of (connection id, tcPlayerStatus) pairs std::map<int, std::vector<tcMessageHandler*> > messageMap; ///< map of (message id, message handler vector) pairs *************** *** 130,134 **** tcPlayerStatus errorPlayerStatus; ///< status to return if player not found wxEvtHandler* evtHandler; ///< wxWidgets event handler for posting messages to application ! void ClearMessageMap(); --- 147,152 ---- tcPlayerStatus errorPlayerStatus; ///< status to return if player not found wxEvtHandler* evtHandler; ///< wxWidgets event handler for posting messages to application ! const unsigned int entityUpdateInterval; ///< 30 Hz tics ! const unsigned int sensorUpdateInterval; ///< 30 Hz tics void ClearMessageMap(); *************** *** 139,151 **** void ProcessReceiveMessages(); ! void UpdateDestroyedObjects(unsigned connIdx); ! void UpdateExistingObjects(unsigned connIdx); ! void UpdateNewObjects(unsigned connIdx); ! void UpdateObjectCommands(unsigned connIdx, bool updateUnack, bool clearNewCmdFlag); ! void UpdateObjects(); void UpdatePing(); void UpdatePlayerInfo(); void UpdateSensorMaps(); ! void UpdateSensorMap(unsigned connIdx); void UpdateTime(); --- 157,168 ---- void ProcessReceiveMessages(); ! void UpdateDestroyedEntities(int connectionId); ! void UpdateNewAndExistingEntities(int connectionId); ! void UpdateEntityCommands(int connectionId, bool updateUnack, bool clearNewCmdFlag); ! void UpdateEntities(); void UpdatePing(); void UpdatePlayerInfo(); void UpdateSensorMaps(); ! void UpdateSensorMap(int connectionId); void UpdateTime(); Index: tcMessage.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/network/tcMessage.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcMessage.h 8 Aug 2004 00:31:32 -0000 1.6 --- tcMessage.h 16 Apr 2005 20:43:55 -0000 1.7 *************** *** 42,47 **** MESSAGE_SIZE = BUFFER_SIZE - HEADER_SIZE }; ! unsigned int timestamp; unsigned short bufferIdx; union DATA_UNION { --- 42,48 ---- MESSAGE_SIZE = BUFFER_SIZE - HEADER_SIZE }; ! unsigned int timestamp; ///< time in 30 Hz tics when message was created (not sent) unsigned short bufferIdx; + unsigned short resendCount; ///< number of times message has been resent union DATA_UNION { *************** *** 50,64 **** unsigned int messageSize : 16; ///< size of message in bytes (including all header fields) int sourceId : 16; ///< connection id of source of message ! unsigned int : 0; ! int id : 32; ///< id of message } header; unsigned char buffer[BUFFER_SIZE]; } data; ! const unsigned char* GetMessageData(); ! int GetMessageId(); ! unsigned int GetMessageSize(); ! unsigned int GetMessageTimestamp(); ! void PopulateMessage(int sourceId, int messageId, unsigned messageSize, const unsigned char *messageData); void Reset(); --- 51,72 ---- unsigned int messageSize : 16; ///< size of message in bytes (including all header fields) int sourceId : 16; ///< connection id of source of message ! unsigned int ackFlag : 1; ///< ack msg if 1 (UDP only) ! unsigned int msgId : 15; ///< id of message for ack ! unsigned int riderSize : 10; ///< size in bytes of "rider" message at end ! int id : 6; ///< functional id of message, message type } header; unsigned char buffer[BUFFER_SIZE]; } data; ! void ClearRider(); ! bool GetAck() const; ! unsigned int GetAckId() const; ! ! unsigned char* GetMessageData(); ! int GetId() const; ! unsigned int GetMessageSize() const; ! unsigned int GetMessageTimestamp() const; ! void PopulateMessage(int sourceId, int messageType, unsigned messageId, ! unsigned int ack, unsigned int messageSize, const unsigned char *messageData); void Reset(); Index: tcNetworkInterface.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/network/tcNetworkInterface.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** tcNetworkInterface.h 8 Apr 2005 01:54:11 -0000 1.9 --- tcNetworkInterface.h 16 Apr 2005 20:43:55 -0000 1.10 *************** *** 30,33 **** --- 30,34 ---- #include "wx/socket.h" #include "wx/event.h" + #include <list> #include <vector> #include <queue> *************** *** 59,73 **** }; ! void CloseConnection(); ! int GetConnectionId(unsigned connectionIdx); ! std::string GetConnectionStatus(unsigned connectionIdx); tcMessage* GetMessage(int id); ! unsigned GetNumConnections(); ! bool IsServer(); void MakeClient(); void MakeServer(); void OpenConnection(wxString hostName); ! ! const unsigned char* ReceiveMessage(int connectionId, int& messageId, unsigned& messageSize, int protocol = TCP); --- 60,78 ---- }; ! ! const std::list<int>& GetConnectionList() const; ! const std::map<int, tcConnectionData*>& GetConnectionMap(); ! ! std::string GetConnectionStatus(int id); tcMessage* GetMessage(int id); ! unsigned int GetNumConnections(); ! bool IsServer() const; void MakeClient(); void MakeServer(); + void OpenConnection(wxString hostName); ! void CloseConnection(); ! void RemoveConnection(int id); ! const unsigned char* ReceiveMessage(int connectionId, int& messageId, unsigned& messageSize, int protocol = TCP); *************** *** 99,117 **** wxDatagramSocket *datagramSock; ///< UDP socket ! std::vector<tcConnectionData> connectionData; ///< vector of connection data std::vector<tcMessage> messageBuffer; std::queue<unsigned int> available; ///< fifo of free slot indices ! std::map<int, int> connectionLookup; ///< (connection id key, connectionData idx (-1 invalid)) std::map<std::string, int> peerMap; ///< another lookup (peername, connectionData idx) ! void AddConnection(wxSocketBase *socket); // adds socket to connectionData void Clear(); ! void ClearConnectionMessages(unsigned int idx); int CheckoutMessage(); ! tcConnectionData* GetConnection(int idx); ! tcConnectionData* GetConnection(std::string peerName); wxDatagramSocket* GetDatagramSocket() {return datagramSock;} void InitializeUDP(); ! int LookupConnectionIndex(int id); void OnSocketEvent(wxSocketEvent& event); void RemoveDeadConnections(); --- 104,127 ---- wxDatagramSocket *datagramSock; ///< UDP socket ! /// map of (connection id, connection data), access (and delete) in log time ! std::map<int, tcConnectionData*> connectionData; ! std::list<int> connectionList; ///< list of connections ! std::vector<tcMessage> messageBuffer; std::queue<unsigned int> available; ///< fifo of free slot indices ! std::map<std::string, int> peerMap; ///< another lookup (peername, connectionData idx) ! void AddConnection(wxSocketBase *socket); // adds new connection using socket ! void Clear(); ! void ClearConnectionMessages(int id); int CheckoutMessage(); ! ! tcConnectionData* GetConnection(int id); ! tcConnectionData* GetConnection(const std::string& peerName); wxDatagramSocket* GetDatagramSocket() {return datagramSock;} void InitializeUDP(); ! void OnSocketEvent(wxSocketEvent& event); void RemoveDeadConnections(); *************** *** 123,127 **** void UpdateClientConnection(); void UpdateConnections(); ! void UpdateConnectionLookup(); void UpdateServer(); --- 133,137 ---- void UpdateClientConnection(); void UpdateConnections(); ! void UpdateServer(); Index: tcConnectionData.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/network/tcConnectionData.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcConnectionData.h 8 Apr 2005 01:54:11 -0000 1.7 --- tcConnectionData.h 16 Apr 2005 20:43:55 -0000 1.8 *************** *** 29,34 **** #include "wx/wx.h" #include "wx/socket.h" ! #include <vector> #include <queue> #include "network/tcMessage.h" --- 29,38 ---- #include "wx/wx.h" #include "wx/socket.h" ! ! #include <deque> ! #include <list> #include <queue> + #include <vector> + #include "network/tcMessage.h" *************** *** 53,60 **** std::queue<unsigned int> writeQueueTCP; ///< fifo of message indices waiting for TCP transmit std::queue<unsigned int> writeQueueUDP; ///< fifo of message indices waiting for UDP transmit ! std::vector<unsigned int> ack; ///< vector of transmitted messages waiting for ack unsigned long readCount; ///< number of bytes read from this connection unsigned long writeCount; ///< number of bytes written to this connection const wxIPV4address& GetPeerAddress() const; unsigned long GetReadCount() const; --- 57,68 ---- std::queue<unsigned int> writeQueueTCP; ///< fifo of message indices waiting for TCP transmit std::queue<unsigned int> writeQueueUDP; ///< fifo of message indices waiting for UDP transmit ! std::list<unsigned int> waitForAck; ///< vector of transmitted messages waiting for ack ! std::deque<unsigned int> sendAck; ///< dequeue of received messages to send acks for ! unsigned long readCount; ///< number of bytes read from this connection unsigned long writeCount; ///< number of bytes written to this connection + // free all queued messages + void ClearAllMessages(); const wxIPV4address& GetPeerAddress() const; unsigned long GetReadCount() const; *************** *** 67,73 **** void ReadNextMessageTCP(); void ReadNextMessageUDP(unsigned int messageSize, unsigned char *buffer); - void SendTCP(unsigned int idx); ! void SendUDP(unsigned int idx, bool useAck = false); void SetPingTime(float ping_s); void SetSocket(wxSocketBase* sock); --- 75,80 ---- void ReadNextMessageTCP(); void ReadNextMessageUDP(unsigned int messageSize, unsigned char *buffer); void SendTCP(unsigned int idx); ! void SendUDP(unsigned int idx); void SetPingTime(float ping_s); void SetSocket(wxSocketBase* sock); *************** *** 77,80 **** --- 84,89 ---- tcConnectionData(); + ~tcConnectionData(); + private: wxSocketBase *socket; ///< socket associated with this connection *************** *** 87,91 **** --- 96,105 ---- wxIPV4address UDPaddress; wxString peerName; + unsigned int lastCountUpdate; + unsigned int lastResendUpdate; + void AttachAckRider(tcMessage* message); + void ProcessAckRider(tcMessage* message); + void ResendFailedAcks(); void WriteTCP(); void WriteUDP(); |