File Network.c

FileList > core > 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