29 #include "../../engine/Util/MR_Types.h" 30 #include "../../engine/Util/Config.h" 32 #define MR_ID_NOT_SET 255 34 #define MR_OUT_QUEUE_LEN 2048 35 #define MR_MAX_NET_MESSAGE_LEN 255 37 #define MR_NET_REQUIRED 1 39 #define MR_NOT_REQUIRED 0 40 #define MR_NET_DATAGRAM -1 48 class NetMessageBuffer
58 MR_UInt8 mData[MR_MAX_NET_MESSAGE_LEN];
63 #define MR_NET_HEADER_LEN (sizeof(NetMessageBuffer) - MR_MAX_NET_MESSAGE_LEN) 76 SOCKET mUDPRecvSocket;
77 SOCKADDR_IN mUDPRemoteAddr;
79 MR_UInt8 mLastSendedDatagramNumber[4];
80 MR_UInt8 mLastReceivedDatagramNumber[4];
90 int mInputMessageBufferIndex;
91 NetMessageBuffer mInputMessageBuffer;
96 MR_UInt8 mOutQueue[MR_OUT_QUEUE_LEN];
103 void Connect(SOCKET pSocket, SOCKET pUDPRecvSocket);
104 void SetRemoteUDPPort(
unsigned int pPort);
106 BOOL IsConnected()
const;
108 SOCKET GetSocket()
const;
109 SOCKET GetUDPSocket()
const;
111 const NetMessageBuffer *Poll(
int pClientId, BOOL pCheckClientId);
112 void Send(
const NetMessageBuffer *pMessage,
int pReqLevel);
113 BOOL UDPSend(SOCKET pSocket, NetMessageBuffer *pMessage,
unsigned pQueueId, BOOL pResendLast);
116 BOOL AddLagSample(
int pLag);
117 BOOL LagDone()
const;
119 int GetAvgLag()
const;
120 int GetMinLag()
const;
121 void SetLag(
int pAvgLag,
int pMinLag);
135 class NetworkInterface
145 SOCKET mRegistrySocket;
149 std::string mServerAddr;
150 std::string mGameName;
153 SOCKET mUDPOutShortPort;
154 SOCKET mUDPOutLongPort;
155 SOCKET mUDPRecvSocket;
158 NetworkPort mClient[eMaxClient];
159 std::string mClientName[eMaxClient];
160 BOOL mAllPreLoguedRecv;
161 BOOL mCanBePreLogued[eMaxClient];
162 BOOL mPreLoguedClient[eMaxClient];
163 BOOL mConnected[eMaxClient];
164 DWORD mClientAddr[eMaxClient];
165 DWORD mClientBkAddr[eMaxClient];
166 int mClientPort[eMaxClient];
171 static NetworkInterface *mActiveInterface;
172 static BOOL CALLBACK ServerPortCallBack(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
173 static BOOL CALLBACK ServerAddrCallBack(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
174 static BOOL CALLBACK WaitGameNameCallBack(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
175 static BOOL CALLBACK ListCallBack(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
176 static BOOL CALLBACK WarnAloneCallback(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
177 static BOOL CALLBACK WaitConnCallback(HWND pWindow, UINT pMsgId, WPARAM pWParam, LPARAM pLParam);
180 void SendConnectionDoneIfNeeded();
187 void SetPlayerName(
const char *pPlayerName);
188 const char *GetPlayerName()
const;
190 BOOL MasterConnect(HWND pWindow,
const char *pGameName,
191 BOOL pPromptForPort = TRUE,
193 HWND * pModalessDlg = NULL,
int pReturnMessage = 0);
194 BOOL SlavePreConnect(HWND pWindow, std::string &pGameName);
195 BOOL SlaveConnect(HWND pWindow,
const char *pServerIP = NULL,
197 const char *pGameName = NULL, HWND * pModalessDlg = NULL,
198 int pReturnMessage = 0);
202 int GetClientCount()
const;
205 int GetLagFromServer()
const;
206 int GetAvgLag(
int pClient)
const;
207 int GetMinLag(
int pClient)
const;
210 BOOL CreateUDPRecvSocket(
int pPort);
213 BOOL UDPSend(
int pClient, NetMessageBuffer * pMessage, BOOL pLongPort, BOOL pResendLast = FALSE);
214 BOOL BroadcastMessage(NetMessageBuffer * pMessage,
int pReqLevel);
216 BOOL FetchMessage(DWORD & pTimeStamp,
int &pMessageType,
int &pMessageLen,
const MR_UInt8 * &pMessage,
int &pClientId);
219 const char *GetPlayerName(
int pIndex)
const;
220 BOOL IsConnected(
int pIndex)
const;
uint16_t MR_UInt16
Definition: MR_Types.h:42
static Config * GetInstance()
Definition: Config.h:151
Definition: Announcement.h:24
uint8_t MR_UInt8
Definition: MR_Types.h:40