ecsnet
Loading...
Searching...
No Matches
connection_manager.h
1#pragma once
2
3#include "net_socket.h"
4#include <stdint.h>
5#include <stdbool.h>
6#include <winsock2.h>
7#include "config.h"
8// Include networked_entity.h to obtain the definition of interest_mask_t.
9// This header does not depend on connection_manager, so including it here
10// avoids circular dependencies and allows peers to have an interest mask.
11#include "networked_entity.h"
12
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18
22#define PROTOCOL_COUNT 2
23#ifndef MAX_PACKET_SIZE
24#define MAX_PACKET_SIZE 1024
25#endif
29#define MAX_PEERS 32
30
35typedef struct network_cs_t network_cs_t;
37
38
45typedef struct peer_t {
46 char id[64];
47 struct sockaddr_in addr_tcp;
48 struct sockaddr_in addr_udp;
49 net_socket_t net_sockets[PROTOCOL_COUNT];
51 bool udp_ready;
52
61
62 // TCP reassembly (used for framing)
63 uint8_t tcp_rx_buf[MAX_PACKET_SIZE * 2];
64 int tcp_rx_len;
65} peer_t;
66
67
74typedef struct connection_manager_t {
75 peer_t peers[MAX_PEERS];
77 net_socket_t listen_sockets[PROTOCOL_COUNT];
78 bool is_server;
79 void* user_data;
80
81 // Callbacks for different network events
82 void (*on_receive)(void*, peer_t*, const void*, int);
83 void (*on_connect)(void*, peer_t*);
84 void (*on_disconnect)(void*, peer_t*);
86
91void connection_manager_init(connection_manager_t* connection_manager);
92
99void connection_manager_add_listen_socket(connection_manager_t* connection_manager, net_socket_t socket, socket_type_t socket_type);
100
106void connection_manager_remove_peer(connection_manager_t* connection_manager, const char* peer_id);
107
116int connection_manager_send_to_peer(connection_manager_t* connection_manager, const char* peer_id, const void* data, int len);
117
126int connection_manager_send_to_peer_udp(connection_manager_t* connection_manager, const char* peer_id, const void* data, int len);
127
135int connection_manager_broadcast(connection_manager_t* connection_manager, const void* data, int len);
136
144int connection_manager_connect_to_server(connection_manager_t* connection_manager, const char* ip, uint16_t port);
145
151void connection_manager_update(connection_manager_t* connection_manager);
152
157void connection_manager_destroy(connection_manager_t* connection_manager);
158
165net_socket_t* connection_manager_get_listen_socket(connection_manager_t* connection_manager, socket_type_t type);
166
167uint16_t connection_manager_get_udp_local_port(connection_manager_t* connection_manager);
168
175int connection_manager_set_peer_udp_remote_port_by_id(connection_manager_t* connection_manager, const char* peer_id, uint16_t remote_udp_port);
176
184peer_t* find_peer_by_addr(connection_manager_t* connection_manager, const struct sockaddr_in* addr, socket_type_t socket_type);
185
195peer_t* connection_manager_get_peer(connection_manager_t* connection_manager, const char* peer_id);
196
207void connection_manager_set_peer_interest(connection_manager_t* connection_manager, const char* peer_id, interest_mask_t mask);
208
209#ifdef __cplusplus
210}
211#endif
Defines the NetworkedEntity component used for network replication.
uint32_t interest_mask_t
Bitmask type for representing interest groups (up to 32 groups).
Definition networked_entity.h:22
Manages all active network connections (peers) for a client or server.
Definition connection_manager.h:74
void(* on_connect)(void *, peer_t *)
Definition connection_manager.h:83
net_socket_t listen_sockets[PROTOCOL_COUNT]
Definition connection_manager.h:77
bool is_server
Definition connection_manager.h:78
peer_t peers[MAX_PEERS]
Definition connection_manager.h:75
void(* on_disconnect)(void *, peer_t *)
Definition connection_manager.h:84
int peer_count
Definition connection_manager.h:76
void * user_data
Definition connection_manager.h:79
void(* on_receive)(void *, peer_t *, const void *, int)
Definition connection_manager.h:82
Represents a network socket. This struct encapsulates the socket's file descriptor,...
Definition net_socket.h:33
Represents the client-server network architecture implementation. This struct contains the core compo...
Definition network_cs.h:18
Represents a connected network peer.
Definition connection_manager.h:45
interest_mask_t interest_mask
Bitmask of interest groups for this peer.
Definition connection_manager.h:60
struct sockaddr_in addr_tcp
Definition connection_manager.h:47
net_socket_t net_sockets[PROTOCOL_COUNT]
Definition connection_manager.h:49
struct sockaddr_in addr_udp
Definition connection_manager.h:48
bool udp_ready
Definition connection_manager.h:51
bool is_connected
Definition connection_manager.h:50
The protocol handler structure. Manages the state for incoming and outgoing network packets,...
Definition protocol_handler.h:62