DEADSOFTWARE

f505d62ecc848f9d4812fb6fbfcebea405a38149
[d2df-sdl.git] / src / game / g_nethandler.pas
1 (* Copyright (C) DooM 2D:Forever Developers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *)
16 {$INCLUDE g_amodes.inc}
17 unit g_nethandler;
19 interface
21 uses g_net, g_netmsg, ENet;
23 procedure g_Net_ClientMsgHandler(P: pENetPacket);
24 procedure g_Net_ClientLightMsgHandler(P: pENetPacket);
25 procedure g_Net_HostMsgHandler(S: pTNetClient; P: pENetPacket);
27 implementation
29 uses e_fixedbuffer, e_log, StrUtils, SysUtils;
31 procedure g_Net_ClientMsgHandler(P: pENetPacket);
32 var
33 MID: Byte;
34 Len: Word;
35 B: Pointer;
36 begin
37 e_Raw_Seek(0);
39 B := P^.data;
40 if B = nil then Exit;
42 while RawPos < P^.dataLength do
43 begin
44 Len := e_Raw_Read_Word(B);
45 MID := e_Raw_Read_Byte(B);
46 case MID of
47 NET_MSG_CHAT: MC_RECV_Chat(B);
48 NET_MSG_GFX: MC_RECV_Effect(B);
49 NET_MSG_SND: MC_RECV_Sound(B);
50 NET_MSG_SCORE: MC_RECV_GameStats(B);
51 NET_MSG_COOP: MC_RECV_CoopStats(B);
52 NET_MSG_GEVENT: MC_RECV_GameEvent(B);
53 NET_MSG_FLAG: MC_RECV_FlagEvent(B);
54 NET_MSG_GSET: MC_RECV_GameSettings(B);
56 NET_MSG_PLR: MC_RECV_PlayerCreate(B);
57 NET_MSG_PLRPOS: MC_RECV_PlayerPos(B);
58 NET_MSG_PLRSTA: MC_RECV_PlayerStats(B);
59 NET_MSG_PLRDEL: MC_RECV_PlayerDelete(B);
60 NET_MSG_PLRDMG: MC_RECV_PlayerDamage(B);
61 NET_MSG_PLRDIE: MC_RECV_PlayerDeath(B);
62 NET_MSG_PLRFIRE:MC_RECV_PlayerFire(B);
63 NET_MSG_PLRSET: MC_RECV_PlayerSettings(B);
65 NET_MSG_MSPAWN: MC_RECV_MonsterSpawn(B);
66 NET_MSG_MPOS: MC_RECV_MonsterPos(B);
67 NET_MSG_MSTATE: MC_RECV_MonsterState(B);
68 NET_MSG_MSHOT: MC_RECV_MonsterShot(B);
69 NET_MSG_MDEL: MC_RECV_MonsterDelete(B);
71 NET_MSG_SHADD: MC_RECV_CreateShot(B);
72 NET_MSG_SHPOS: MC_RECV_UpdateShot(B);
73 NET_MSG_SHDEL: MC_RECV_DeleteShot(B);
75 NET_MSG_ISPAWN: MC_RECV_ItemSpawn(B);
76 NET_MSG_IDEL: MC_RECV_ItemDestroy(B);
78 NET_MSG_PSTATE: MC_RECV_PanelState(B);
79 NET_MSG_PTEX: MC_RECV_PanelTexture(B);
81 NET_MSG_TSOUND: MC_RECV_TriggerSound(B);
82 NET_MSG_TMUSIC: MC_RECV_TriggerMusic(B);
84 NET_MSG_TIME_SYNC: MC_RECV_TimeSync(B);
85 NET_MSG_VOTE_EVENT: MC_RECV_VoteEvent(B);
86 end;
87 end;
89 enet_packet_destroy(P);
90 end;
92 procedure g_Net_ClientLightMsgHandler(P: pENetPacket);
93 var
94 MID: Byte;
95 Len: Word;
96 B: Pointer;
97 begin
98 e_Raw_Seek(0);
100 B := P^.data;
101 if B = nil then Exit;
103 while RawPos < P^.dataLength do
104 begin
105 Len := e_Raw_Read_Word(B);
106 MID := e_Raw_Read_Byte(B);
107 case MID of
108 NET_MSG_GEVENT: MC_RECV_GameEvent(B);
109 NET_MSG_GSET: MC_RECV_GameSettings(B);
111 NET_MSG_PLR: if NetState <> NET_STATE_AUTH then MC_RECV_PlayerCreate(B);
112 NET_MSG_PLRDEL: if NetState <> NET_STATE_AUTH then MC_RECV_PlayerDelete(B);
114 else RawPos := RawPos + Len;
115 end;
116 end;
118 enet_packet_destroy(P);
119 end;
121 procedure g_Net_HostMsgHandler(S: pTNetClient; P: pENetPacket);
122 var
123 MID: Byte;
124 Len: Word;
125 B: Pointer;
126 begin
127 e_Raw_Seek(0);
129 B := P^.data;
130 if B = nil then Exit;
132 while RawPos < P^.dataLength do
133 begin
134 Len := e_Raw_Read_Word(B);
135 MID := e_Raw_Read_Byte(B);
136 case MID of
137 NET_MSG_INFO: MH_RECV_Info(S, B);
138 NET_MSG_CHAT: MH_RECV_Chat(S, B);
139 NET_MSG_REQFST: MH_RECV_FullStateRequest(S, B);
141 NET_MSG_PLRPOS: MH_RECV_PlayerPos(S, B);
142 NET_MSG_PLRSET: MH_RECV_PlayerSettings(S, B);
143 NET_MSG_CHEAT: MH_RECV_CheatRequest(S, B);
145 NET_MSG_RCON_AUTH: MH_RECV_RCONPassword(S, B);
146 NET_MSG_RCON_CMD: MH_RECV_RCONCommand(S, B);
148 NET_MSG_MAP_REQUEST: MH_RECV_MapRequest(S, B);
149 NET_MSG_RES_REQUEST: MH_RECV_ResRequest(S, B);
151 NET_MSG_VOTE_EVENT: MH_RECV_Vote(S, B);
152 end;
153 end;
155 enet_packet_destroy(P);
156 end;
158 end.