Serious-Engine/Sources/Engine/Network/CommunicationInterface.h
Ryan C. Gordon 24cb244d43 First attempt to hand-merge Ryan's Linux and Mac OS X port.
This was a _ton_ of changes, made 15 years ago, so there are probably some
problems to work out still.

Among others: Engine/Base/Stream.* was mostly abandoned and will need to be
re-ported.

Still, this is a pretty good start, and probably holds a world record for
lines of changes or something.  :)
2016-03-28 23:46:13 -04:00

113 lines
3.7 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
#ifndef SE_INCL_COMMUNICATIONINTERFACE_H
#define SE_INCL_COMMUNICATIONINTERFACE_H
#ifdef PRAGMA_ONCE
#pragma once
#endif
#include <Engine/Network/Socket.h>
#define SERVER_CLIENTS 16
#include <Engine/Network/CPacket.h>
// Communication class
class ENGINE_API CCommunicationInterface {
public:
BOOL cci_bSocketOpen; // set if socket is open and working
BOOL cci_bBound; // set for udp sockets that have been explicitly or implicitly bound
BOOL cci_bInitialized; // is the communication interface initialized or not
BOOL cci_bWinSockOpen; // is the winsock API initialized
BOOL cci_bServerInitialized;
BOOL cci_bClientInitialized;
CPacketBuffer cci_pbMasterOutput; // master output buffer
CPacketBuffer cci_pbMasterInput; // master input buffer
SOCKET cci_hSocket; // the socket handle itself
public:
// client
void Client_OpenLocal(void);
void Client_OpenNet_t(ULONG ulServerAddress);
// update master UDP socket and route its messages
void UpdateMasterBuffers(void);
public:
CCommunicationInterface(void);
~CCommunicationInterface(void){};
// start/stop protocols
void Init(void);
void Close(void);
void InitWinsock(void);
void EndWinsock(void);
void PrepareForUse(BOOL bUseNetwork, BOOL bClient);
void Unprepare(void);
BOOL IsNetworkEnabled(void);
// get address of local machine
void GetHostName(CTString &strName, CTString &strAddress);
// create an inet-family socket
void CreateSocket_t();
// bind socket to the given address
void Bind_t(ULONG ulLocalHost, ULONG ulLocalPort);
// set socket to non-blocking mode
void SetNonBlocking_t(void);
// get generic socket error info string and last error
CTString GetSocketError(INDEX iError);
// open an UDP socket at given port
void OpenSocket_t(ULONG ulLocalHost, ULONG ulLocalPort);
// get address of this host
void GetLocalAddress_t(ULONG &ulHost, ULONG &ulPort);
// get address of the peer host connected to this socket
void GetRemoteAddress_t(ULONG &ulHost, ULONG &ulPort);
// broadcast communication
void Broadcast_Send(const void *pvSend, SLONG slSendSize,CAddress &adrDestination);
BOOL Broadcast_Receive(void *pvReceive, SLONG &slReceiveSize,CAddress &adrAddress);
// here we receive connect requests
void Broadcast_Update_t(void);
// Server
void Server_Init_t(void);
void Server_Close(void);
void Server_ClearClient(INDEX iClient);
BOOL Server_IsClientLocal(INDEX iClient);
BOOL Server_IsClientUsed(INDEX iClient);
CTString Server_GetClientName(INDEX iClient);
void Server_Send_Reliable(INDEX iClient, const void *pvSend, SLONG slSendSize);
BOOL Server_Receive_Reliable(INDEX iClient, void *pvReceive, SLONG &slReceiveSize);
void Server_Send_Unreliable(INDEX iClient, const void *pvSend, SLONG slSendSize);
BOOL Server_Receive_Unreliable(INDEX iClient, void *pvReceive, SLONG &slReceiveSize);
BOOL Server_Update(void);
// Client
void Client_Init_t(char* strServerName);
void Client_Init_t(ULONG ulServerAddress);
void Client_Close(void);
void Client_Clear(void);
BOOL Client_IsConnected(void);
void Client_Send_Reliable(const void *pvSend, SLONG slSendSize);
BOOL Client_Receive_Reliable(void *pvReceive, SLONG &slReceiveSize);
BOOL Client_Receive_Reliable(CTStream &strmReceive);
void Client_PeekSize_Reliable(SLONG &slExpectedSize,SLONG &slReceivedSize);
void Client_Send_Unreliable(const void *pvSend, SLONG slSendSize);
BOOL Client_Receive_Unreliable(void *pvReceive, SLONG &slReceiveSize);
BOOL Client_Update(void);
};
extern ENGINE_API CCommunicationInterface _cmiComm;
extern CPacketBufferStats _pbsSend;
extern CPacketBufferStats _pbsRecv;
#endif /* include-once check. */