File Network.c
Go to the source code of this file
#include "Network.h"#include "netcode.h"#include "main.h"#include "Thread.h"#include "Log.h"#include <stdbool.h>#include <inttypes.h>#include <string.h>#include "RawNetMessage.h"#include "ANSIColourCodes.h"#include "ThreadSafeQueue.h"#include "ObjectPool.h"#include "DynArray.h"#include "SharedPtr.h"#include "AssertLib.h"#include "FileHelpers.h"#include "cJSON.h"
Classes
| Type | Name |
|---|---|
| struct | FragmentedMessageReciever |
| struct | GameClient |
| struct | NetworkThreadQueues |
Public Types
| Type | Name |
|---|---|
| typedef void(* | FreePacketFn |
| typedef HGeneric | HReliableTracker |
| typedef u8 *(* | RecievePacketFn |
| typedef void(* | SendPacketFn |
Public Attributes
| Type | Name |
|---|---|
| struct MatchMakingMessage | gMatchmakingInfo |
| CrossPlatformThread | gNetworkThread |
Public Static Attributes
| Type | Name |
|---|---|
| u8 | gPacketBuffer |
| u32 | gRecentlyAckedIdentBufferSize = 0 |
| u32 | gRecentlyAckedPacketIdentifiers |
| uint8_t | private_key = /* multi line expression */ |
Public Functions
| Type | Name |
|---|---|
| DECLARE_THREAD_PROC (ClientThread, arg) |
|
| DECLARE_THREAD_PROC (ClientServerThread, arg) |
|
| bool | NW_DequeueConnectionEvent (struct NetworkConnectionEvent * pOut) |
| bool | NW_DequeueData (struct NetworkQueueItem * pOut) |
| void | NW_EnqueueData (struct NetworkQueueItem * pIn) |
| enum GameRole | NW_GetRole () |
| void | NW_Init () |
| void | OnConnectionEventTSQueueWrapAround (void * pItemToBeLost) |
| void | OnRXTSQueueWrapAround (void * pItemToBeLost) |
| void | OnTXTSQueueWrapAround (void * pItemToBeLost) |
| void | WrapAroundHandlerBase (void * pItemToBeLost, const char * message) |
| int | clamp (int i, int c) |
Public Static Functions
| Type | Name |
|---|---|
| void | AcknowledgeIdentifier (u32 ident) |
| void | ClientFreePacket (void * serverOrClient, void * packet) |
| u8 * | ClientRecievePacket (void * serverOrClient, int clientIndex, int * packetBytes, uint64_t * packetSequence) |
| void | ClientRecievePackets (struct netcode_client_t * client, struct NetworkThreadQueues * pQueues) |
| void | ClientResendReliablePackets (double time, struct netcode_client_t * client) |
| void | ClientSendPacket (void * clientOrServer, int clientIndex, u8 * packet, int packetSize) |
| struct FragmentedMessageReciever * | CreateNewReciever (struct NetFragmentMessageHeader * pFragmentHeader) |
| struct netcode_client_t * | CreateServerMatchmakingClient () return a client to the matchmaking server that a game server uses to advertise itself for matchmaking |
| void | DoTXQueueBase (struct NetworkThreadQueues * pQueues, void * serverOrClient, double time, SendPacketFn sendPacket) |
| void | DoTXQueueClient (struct NetworkThreadQueues * pQueues, struct netcode_client_t * server, double time) |
| void | DoTXQueueServer (struct NetworkThreadQueues * pQueues, struct netcode_server_t * server, double time) |
| struct FragmentedMessageReciever * | FindFragmentedMessageReciever (u32 ident) |
| struct netcode_network_simulator_t * | GetNetworkSimulator () |
| bool | HasReliablePacketBeenRecentlyAcknowledged (u32 ident) |
| void | InitClients (struct GameClient * clients) |
| bool | IsConnectedToServer (void * client, int clientIndex) |
| bool | IsServerClientConnected (void * pServerOrClient, int clientIndex) |
| char * | MatchmakeClient () blocks until a match is found |
| void | MatchmakeClientServerUpdate (struct netcode_client_t * client) |
| int | NetcodeLog (const char * fmt, ...) |
| static | OBJECT_POOL (struct FragmentedMessageReciever) |
| static | OBJECT_POOL (struct ReliableMessageTracker) |
| void | PushAckedPacketIdentifier (u32 ident) |
| void * | RecieveFragmentedMessage (u8 * packet, int packetSize, int * outCompletePacketBytes) |
| void | RecievePacketsBase (void * serverOrClient, struct NetworkThreadQueues * pQueues, RecievePacketFn recievePacket, SendPacketFn sendPacket, FreePacketFn freePacket) |
| void | ResendReliablePacketsBase (double time, void * serverOrClient, SendPacketFn sendPacket) |
| void | SendMessageFragmentsBase (struct NetworkThreadQueues * pQueues, void * serverOrClient, struct NetworkQueueItem * item, double time, SendPacketFn sendPacket) |
| void | SendMessageFragmentsServer (struct NetworkThreadQueues * pQueues, struct netcode_server_t * server, struct NetworkQueueItem * item, double time) |
| void | ServerFreePacket (void * serverOrClient, void * packet) |
| u8 * | ServerRecievePacket (void * serverOrClient, int clientIndex, int * packetBytes, uint64_t * packetSequence) |
| void | ServerRecievePackets (struct netcode_server_t * server, struct NetworkThreadQueues * pQueues) |
| void | ServerResendReliablePackets (double time, struct netcode_server_t * server) |
| void | ServerSendPacket (void * clientOrServer, int clientIndex, u8 * packet, int packetSize) |
| void | ServiceClientConnectionEvents (struct GameClient * gameClient, struct netcode_client_t * client, int clientIndex, struct NetworkThreadQueues * pQueues) |
| void | ServiceConnectionEventsBase (struct GameClient * client, int clientIndex, struct NetworkThreadQueues * pQueues, bool(*)(void *, int) IsConnected, void * clientOrServer) |
| void | ServiceServerConnectionEvents (struct GameClient * client, struct netcode_server_t * server, int clientIndex, struct NetworkThreadQueues * pQueues) |
| u32 | TrackReliableMessage (u8 * data, u32 dataSize, u32 dataOffset, struct NetFragmentMessageHeader * pHeader, double time, int client) |
Macros
| Type | Name |
|---|---|
| define | CONNECT_TOKEN_EXPIRY 30 |
| define | CONNECT_TOKEN_TIMEOUT 5 |
| define | GAME_MAX_CLIENTS 3 |
| define | GAME_PROTOCOL_ID TEST\_PROTOCOL\_ID |
| define | RECENTLY_ACKED_PACKETS_BUF_SIZE 64 |
| define | RESEND_IF_UNACKED_THRESHOLD (100.0 / 1000.0) |
| define | TEST_PROTOCOL_ID 0x1122334455667788 |
Public Types Documentation
typedef FreePacketFn
typedef void(* FreePacketFn) (void *serverOrClient, void *packet);
typedef HReliableTracker
typedef HGeneric HReliableTracker;
typedef RecievePacketFn
typedef u8 *(* RecievePacketFn) (void *serverOrClient, int clientIndex, int *bytesRecieved, uint64_t *packetSequence);
typedef SendPacketFn
typedef void(* SendPacketFn) (void *serverOrClient, int clientIndex, u8 *packetData, int packetSize);
Public Attributes Documentation
variable gMatchmakingInfo
struct MatchMakingMessage gMatchmakingInfo;
variable gNetworkThread
CrossPlatformThread gNetworkThread;
Public Static Attributes Documentation
variable gPacketBuffer
u8 gPacketBuffer[NETCODE_MAX_PACKET_SIZE];
variable gRecentlyAckedIdentBufferSize
u32 gRecentlyAckedIdentBufferSize;
variable gRecentlyAckedPacketIdentifiers
u32 gRecentlyAckedPacketIdentifiers[RECENTLY_ACKED_PACKETS_BUF_SIZE];
variable private_key
uint8_t private_key[NETCODE_KEY_BYTES];
Public Functions Documentation
function DECLARE_THREAD_PROC
DECLARE_THREAD_PROC (
ClientThread,
arg
)
function DECLARE_THREAD_PROC
DECLARE_THREAD_PROC (
ClientServerThread,
arg
)
function NW_DequeueConnectionEvent
bool NW_DequeueConnectionEvent (
struct NetworkConnectionEvent * pOut
)
function NW_DequeueData
bool NW_DequeueData (
struct NetworkQueueItem * pOut
)
function NW_EnqueueData
void NW_EnqueueData (
struct NetworkQueueItem * pIn
)
function NW_GetRole
enum GameRole NW_GetRole ()
function NW_Init
void NW_Init ()
function OnConnectionEventTSQueueWrapAround
void OnConnectionEventTSQueueWrapAround (
void * pItemToBeLost
)
function OnRXTSQueueWrapAround
void OnRXTSQueueWrapAround (
void * pItemToBeLost
)
function OnTXTSQueueWrapAround
void OnTXTSQueueWrapAround (
void * pItemToBeLost
)
function WrapAroundHandlerBase
void WrapAroundHandlerBase (
void * pItemToBeLost,
const char * message
)
function clamp
int clamp (
int i,
int c
)
Public Static Functions Documentation
function AcknowledgeIdentifier
static void AcknowledgeIdentifier (
u32 ident
)
function ClientFreePacket
static void ClientFreePacket (
void * serverOrClient,
void * packet
)
function ClientRecievePacket
static u8 * ClientRecievePacket (
void * serverOrClient,
int clientIndex,
int * packetBytes,
uint64_t * packetSequence
)
function ClientRecievePackets
static void ClientRecievePackets (
struct netcode_client_t * client,
struct NetworkThreadQueues * pQueues
)
function ClientResendReliablePackets
static void ClientResendReliablePackets (
double time,
struct netcode_client_t * client
)
function ClientSendPacket
static void ClientSendPacket (
void * clientOrServer,
int clientIndex,
u8 * packet,
int packetSize
)
function CreateNewReciever
static struct FragmentedMessageReciever * CreateNewReciever (
struct NetFragmentMessageHeader * pFragmentHeader
)
function CreateServerMatchmakingClient
return a client to the matchmaking server that a game server uses to advertise itself for matchmaking
static struct netcode_client_t * CreateServerMatchmakingClient ()
function DoTXQueueBase
static void DoTXQueueBase (
struct NetworkThreadQueues * pQueues,
void * serverOrClient,
double time,
SendPacketFn sendPacket
)
function DoTXQueueClient
static void DoTXQueueClient (
struct NetworkThreadQueues * pQueues,
struct netcode_client_t * server,
double time
)
function DoTXQueueServer
static void DoTXQueueServer (
struct NetworkThreadQueues * pQueues,
struct netcode_server_t * server,
double time
)
function FindFragmentedMessageReciever
static struct FragmentedMessageReciever * FindFragmentedMessageReciever (
u32 ident
)
function GetNetworkSimulator
static struct netcode_network_simulator_t * GetNetworkSimulator ()
function HasReliablePacketBeenRecentlyAcknowledged
static bool HasReliablePacketBeenRecentlyAcknowledged (
u32 ident
)
function InitClients
static void InitClients (
struct GameClient * clients
)
function IsConnectedToServer
static bool IsConnectedToServer (
void * client,
int clientIndex
)
function IsServerClientConnected
static bool IsServerClientConnected (
void * pServerOrClient,
int clientIndex
)
function MatchmakeClient
blocks until a match is found
static char * MatchmakeClient ()
Returns:
game server address to connect to
function MatchmakeClientServerUpdate
static void MatchmakeClientServerUpdate (
struct netcode_client_t * client
)
function NetcodeLog
static int NetcodeLog (
const char * fmt,
...
)
function OBJECT_POOL
static static OBJECT_POOL (
struct FragmentedMessageReciever
)
function OBJECT_POOL
static static OBJECT_POOL (
struct ReliableMessageTracker
)
function PushAckedPacketIdentifier
static void PushAckedPacketIdentifier (
u32 ident
)
function RecieveFragmentedMessage
static void * RecieveFragmentedMessage (
u8 * packet,
int packetSize,
int * outCompletePacketBytes
)
function RecievePacketsBase
static void RecievePacketsBase (
void * serverOrClient,
struct NetworkThreadQueues * pQueues,
RecievePacketFn recievePacket,
SendPacketFn sendPacket,
FreePacketFn freePacket
)
function ResendReliablePacketsBase
static void ResendReliablePacketsBase (
double time,
void * serverOrClient,
SendPacketFn sendPacket
)
function SendMessageFragmentsBase
static void SendMessageFragmentsBase (
struct NetworkThreadQueues * pQueues,
void * serverOrClient,
struct NetworkQueueItem * item,
double time,
SendPacketFn sendPacket
)
function SendMessageFragmentsServer
static void SendMessageFragmentsServer (
struct NetworkThreadQueues * pQueues,
struct netcode_server_t * server,
struct NetworkQueueItem * item,
double time
)
function ServerFreePacket
static void ServerFreePacket (
void * serverOrClient,
void * packet
)
function ServerRecievePacket
static u8 * ServerRecievePacket (
void * serverOrClient,
int clientIndex,
int * packetBytes,
uint64_t * packetSequence
)
function ServerRecievePackets
static void ServerRecievePackets (
struct netcode_server_t * server,
struct NetworkThreadQueues * pQueues
)
function ServerResendReliablePackets
static void ServerResendReliablePackets (
double time,
struct netcode_server_t * server
)
function ServerSendPacket
static void ServerSendPacket (
void * clientOrServer,
int clientIndex,
u8 * packet,
int packetSize
)
function ServiceClientConnectionEvents
static void ServiceClientConnectionEvents (
struct GameClient * gameClient,
struct netcode_client_t * client,
int clientIndex,
struct NetworkThreadQueues * pQueues
)
function ServiceConnectionEventsBase
static void ServiceConnectionEventsBase (
struct GameClient * client,
int clientIndex,
struct NetworkThreadQueues * pQueues,
bool(*)(void *, int) IsConnected,
void * clientOrServer
)
function ServiceServerConnectionEvents
static void ServiceServerConnectionEvents (
struct GameClient * client,
struct netcode_server_t * server,
int clientIndex,
struct NetworkThreadQueues * pQueues
)
function TrackReliableMessage
static u32 TrackReliableMessage (
u8 * data,
u32 dataSize,
u32 dataOffset,
struct NetFragmentMessageHeader * pHeader,
double time,
int client
)
Macro Definition Documentation
define CONNECT_TOKEN_EXPIRY
#define CONNECT_TOKEN_EXPIRY `30`
define CONNECT_TOKEN_TIMEOUT
#define CONNECT_TOKEN_TIMEOUT `5`
define GAME_MAX_CLIENTS
#define GAME_MAX_CLIENTS `3`
define GAME_PROTOCOL_ID
#define GAME_PROTOCOL_ID `TEST_PROTOCOL_ID`
define RECENTLY_ACKED_PACKETS_BUF_SIZE
#define RECENTLY_ACKED_PACKETS_BUF_SIZE `64`
define RESEND_IF_UNACKED_THRESHOLD
#define RESEND_IF_UNACKED_THRESHOLD `(100.0 / 1000.0)`
define TEST_PROTOCOL_ID
#define TEST_PROTOCOL_ID `0x1122334455667788`
The documentation for this class was generated from the following file /home/runner/work/2DFarmingRPG/2DFarmingRPG/Stardew/engine/src/core/Network.c