wip netcode

This commit is contained in:
Nishi 2026-01-29 15:01:53 +09:00
commit f65a3179ac
Signed by: nishi
GPG key ID: 27EF69B208EB9343
8 changed files with 191 additions and 8 deletions

View file

@ -6,6 +6,9 @@
#include <string.h>
#include <stdarg.h>
#include <math.h>
#ifndef _WIN32
#include <unistd.h>
#endif
#if defined(_GEARSRC) && defined(_WIN32)
#define GSDECL extern __declspec(dllexport)

View file

@ -0,0 +1,35 @@
#ifndef __GEARSRC_NET_H__
#define __GEARSRC_NET_H__
#include <GearSrc/MachDep.h>
#include <GearSrc/TypeDefs.h>
#ifdef __cplusplus
extern "C" {
#endif
/* net_client.c */
GSDECL GSNetClient GSNetClientOpen(GSClient client, const char* hostname, int port);
GSDECL void GSNetClientClose(GSNetClient client);
/* net_server.c */
GSDECL GSNetServer GSNetServerOpen(GSServer server, int port);
GSDECL void GSNetServerClose(GSNetServer server);
/* net_base.c */
GSDECL GSBool GSNetBaseHasData(int fd);
GSDECL int GSNetBaseServer(int port);
GSDECL int GSNetBaseClient(const char* hostname, int port);
GSDECL void GSNetBaseClose(int fd);
GSDECL void GSNetBaseRead(int fd, void* data, int size, GSNetAddress* address); /* always read 508 bytes! */
GSDECL void GSNetBaseWrite(int fd, void* data, int size, GSNetAddress* address);
/* net_packet.c */
GSDECL void GSNetPacketRead(int fd, GSNetPacket* packet, GSNetAddress* address);
GSDECL void GSNetPacketWrite(int fd, GSNetPacket* packet, GSNetAddress* address);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -41,11 +41,13 @@ typedef GSU8 GSBool;
#define GSTrue ((GSBool)1)
#define GSFalse ((GSBool)0)
typedef struct _GSVersion GSVersion;
typedef struct _GSEngineParam GSEngineParam;
typedef struct _GSResourceKV GSResourceKV;
typedef struct _GSBox GSBox;
typedef struct _GSNetPacket GSNetPacket;
typedef struct _GSVersion GSVersion;
typedef struct _GSEngineParam GSEngineParam;
typedef struct _GSResourceKV GSResourceKV;
typedef struct _GSBox GSBox;
typedef struct _GSNetPacketHeader GSNetPacketHeader;
typedef struct _GSNetPacket GSNetPacket;
typedef struct _GSNetAddress GSNetAddress;
#ifdef _GEARSRC
typedef struct _GSClient* GSClient;
typedef struct _GSServer* GSServer;
@ -58,6 +60,8 @@ typedef struct _GSModel* GSModel;
typedef struct _GSSoundDriver* GSSoundDriver;
typedef struct _GSSoundEngine* GSSoundEngine;
typedef struct _GSSound* GSSound;
typedef struct _GSNetClient* GSNetClient;
typedef struct _GSNetServer* GSNetServer;
typedef struct _GSModelFace GSModelFace;
typedef struct _GSModelMaterial GSModelMaterial;
@ -107,13 +111,25 @@ struct _GSResourceKV {
};
#pragma pack(1)
struct _GSNetPacket {
GSU8 flag;
struct _GSNetPacketHeader {
GSU8 flag;
GSU32 index;
GSU32 sequence;
};
#pragma pack()
struct _GSNetPacket {
GSNetPacketHeader header;
unsigned char data[508];
int size;
};
/* i hope someone adds ipv6 support :) */
struct _GSNetAddress {
GSU32 address;
GSU16 port;
};
#ifdef _GEARSRC
#include <GearSrc/GL/GL.h>
#include <miniaudio.h>
@ -226,6 +242,14 @@ struct _GSSoundEngine {
GSSound* sound;
};
struct _GSNetClient {
GSEngine engine;
};
struct _GSNetServer {
GSEngine engine;
};
struct _GSClient {
GSEngine engine;