ecsnet
Loading...
Searching...
No Matches
network_architecture.h
1#pragma once
2#include "connection_manager.h"
3#include "ecs.h"
4#include <stdint.h>
5#include <stdbool.h>
6#ifdef __cplusplus
7extern "C" {
8#endif
9// Forward declarations
10typedef peer_t peer_t;
11typedef void (*on_receive_func_t)(const struct sockaddr_in *sender_addr, const void *data, int len);
12
16typedef enum {
17 ARCH_CLIENT_SERVER,
18 ARCH_P2P,
19} network_architecture_type_t;
20
24typedef struct {
25 network_architecture_type_t type;
26 const char *ip_address;
27 uint16_t port;
28 bool is_server;
29 uint16_t tcp_port;
30 uint16_t udp_port;
31
33
34 // Unified callbacks
35 void (*on_peer_connected)(void* user_data, peer_t* peer);
36 void (*on_peer_disconnected)(void* user_data, peer_t* peer);
37 void (*on_packet_received)(void* user_data, peer_t* peer, const void* data, int len);
38 void (*on_client_input)(void* user_data, peer_t* from, entity_t entity_id, uint8_t cmd, const void* extra, uint16_t extra_len);
39 void* user_data;
41
47typedef struct network_architecture_t {
48 network_architecture_type_t type;
50 void *impl; // A pointer to the specific network implementation (e.g., network_cs_t).
51 ecs_t *ecs; // A pointer to the ECS instance.
53
60ECSNET_API void network_architecture_init(network_architecture_t** architecture, const network_architecture_config_t* config, ecs_t* ecs);
61
67ECSNET_API void network_architecture_update(network_architecture_t* architecture, float dt);
68
73ECSNET_API void network_architecture_destroy(network_architecture_t* architecture);
74
82ECSNET_API bool network_architecture_connect_to_server(network_architecture_t* architecture, const char* ip_address, uint16_t port);
83
92ECSNET_API bool network_architecture_send_to_peer(network_architecture_t* architecture, uint32_t peer_id, const void* data, int len);
93
103ECSNET_API bool network_architecture_send_entity_update(network_architecture_t* architecture, uint32_t peer_id, entity_t entity_id, const void* component_data, int data_len);
104
112ECSNET_API bool network_architecture_broadcast(network_architecture_t* architecture, const void* data, int len);
113
119ECSNET_API int network_architecture_get_peer_count(network_architecture_t* architecture);
120
127ECSNET_API peer_t* network_architecture_get_peer(network_architecture_t* architecture, uint32_t peer_id);
128
134ECSNET_API connection_manager_t* network_architecture_get_connection_manager(network_architecture_t* architecture);
135
136#ifdef __cplusplus
137}
138#endif
139
Manages all active network connections (peers) for a client or server.
Definition connection_manager.h:74
Internal structure representing the ECS world state. This holds:
Definition ecs_internal.h:44
Structure for configuring the network architecture.
Definition network_architecture.h:24
uint16_t tcp_port
Definition network_architecture.h:29
uint16_t port
Definition network_architecture.h:27
uint16_t udp_port
Definition network_architecture.h:30
const char * ip_address
Definition network_architecture.h:26
network_architecture_type_t type
Definition network_architecture.h:25
void * user_data
Definition network_architecture.h:39
bool is_server
Definition network_architecture.h:28
float ecs_sync_hz
Definition network_architecture.h:32
Represents the opaque network architecture structure. This struct serves as a wrapper that holds a po...
Definition network_architecture.h:47
Represents a connected network peer.
Definition connection_manager.h:45