aboutsummaryrefslogtreecommitdiff
path: root/src/parsec/include/net_glob.h
blob: c21e2597e3ea4acfbe4be0e47bc2ed7c8e320070 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * PARSEC HEADER: net_glob.h
 */

#ifndef _NET_GLOB_H_
#define _NET_GLOB_H_


// ----------------------------------------------------------------------------
// NETWORKING SUBSYSTEM (NET) related global declarations and definitions     -
// ----------------------------------------------------------------------------


// forward declarations -------------------------------------------------------
//
struct node_t;
struct RE_Header;
struct RE_KillStats;
struct NetPacket;
struct NetPacketExternal;
struct ShipRemInfo;
class NET_Stream;


extern int			LocalPlayerId;
extern char 		LocalPlayerName[];

extern int			NetAvailable;
extern int 			NetworkGameMask;
extern int			NetConnected;
extern int			NetJoined;
extern int			EntryMode;
extern int			ShipDowned;
extern int			Packet_Send_Frametime;
extern int			Packet_Send_Frequency;
extern int			Packet_Recv_Rate;
extern int			HaveFullPlayerState;		// indicates whether we have received a full playerstate from the server

extern refframe_t	ServerTimeoutFrames;		// # of refframes the server times out

extern int			NetInterfaceSelect;

extern char*		CurServerToResolve;
extern int			CurServerID;
extern char*		CurServerName;
extern int 			CurServerPing;
extern node_t*		CurJumpServerNode;
extern int 			CurMaxPlayers;
extern int			CurMaxDataLength;
extern int 			CurKillUpdate;
extern int 			CurKiller;
extern int			MyUniverse;
extern int			NumRemPlayers;
extern int			CurSendMessageId_PEER;
extern int 			CurGameTime;
extern int			ServerPingTime;

extern int			RE_List_Avail;
extern char*		RE_List_CurPos;

extern int			Player_Status[];
extern GenObject*	Player_Ship[];
extern int 			Player_ShipId[];
extern int 			Player_AliveCounter[];
extern int 			Player_UpToDate[];
extern int			Player_KillStat[];
extern int 			Player_LastMsgId[];
extern int			Player_LastUpdateGameStateMsgId[];
extern char			Player_Name[][ MAX_PLAYER_NAME + 1 ];

extern char*		Masters[];


// NETWORKING subsystem jump table for dynamic function binding ---------------
//
struct net_subsys_jtab_s {
	
	// PROTOCOL API
	
	int			(* Connect )		();
	int			(* Disconnect )		();
	int			(* Join )			();
	int			(* Unjoin )			( byte flag );
	
	int			(* UpdateName )		();
	
	void		(* MaintainNet )	();
	
	// PROTOCOL API - GAME
	
	size_t		(* RmEvList_GetMaxSize) ();
	void		(* UpdateKillStats) ( RE_KillStats* killstats );
	
	// PROTOCOL API - PACKET HANDLING
	
	size_t		(* HandleOutPacket)					( const NetPacket*			int_gamepacket,	NetPacketExternal*	ext_gamepacket );
	size_t		(* HandleOutPacket_DEMO )			( const NetPacket*			int_gamepacket,	NetPacketExternal*	ext_gamepacket );
	int			(* HandleInPacket)					( const NetPacketExternal*	ext_gamepacket,	const int ext_pktsize, NetPacket*			int_gamepacket );
	int			(* HandleInPacket_DEMO )			( const NetPacketExternal*  ext_gamepacket,	NetPacket*			int_gamepacket, size_t* psize_external );
	void		(* StdGameHeader)					( byte command,	NetPacket* gampacket );
	size_t		(* NetPacketExternal_DEMO_GetSize ) ( const NetPacketExternal*  ext_gamepacket );
	void		(* WritePacketInfo )				( FILE *fp, NetPacketExternal* ext_gamepacket );
	
	// PACKET API

	int			(* CompareNodes )( node_t *node1, node_t *node2 );
	int			(* VirtualNode )( node_t *node );
	void		(* SetVirtualAddress )( node_t *node );
	void		(* SetBroadcastAddress )( node_t *node );

	void		(* ResolveNode )( node_t* node_dst, node_t* node_src );
	void		(* MakeNodeRaw )( node_t* node_dst, node_t* node_src );
	node_t*		(* GetSender )( int bufid );
	void		(* ResolveSender )( node_t *node, int bufid );

	void		(* PrintNode )( node_t *node );

	void		(* ProcessPacketChain )	( void (*procfunc)( NetPacket* gamepacket, int bufid ) );
	void		(* FlushListenBuffers )();
	int			(* InsertVirtualPacket )( NetPacket* gamepacket );
	int			(* DeterminePacketLoss )( char **info, int *isiz, int incoming );

	int			(* SleepUntilInput) ( int timeout_msec );
	
	void		(* SendPacket )			( NetPacket *gamepacket, node_t *node );
	void		(* AuxSendPacket )		( NetPacket *gamepacket, node_t *node );

	int			(* ResetAPI )();
	int			(* InitAPI )();
	int			(* KillAPI )();

};

// exported by NET_GLOB.C -----------------------------------------------------
//
extern net_subsys_jtab_s net_subsys_jtab;

// exported by NET_UDP.C ------------------------------------------------------
//
extern NET_Stream ServerStream;

#endif // _NET_GLOB_H_