begin
if (NetEvent.kind = ENET_EVENT_TYPE_RECEIVE) then
begin
+ if (NetEvent.channelID = NET_CHAN_DOWNLOAD_EX) then
+ begin
+ // ignore all download packets, they're processed by separate code
+ enet_packet_destroy(NetEvent.packet);
+ continue;
+ end;
Ptr := NetEvent.packet^.data;
if not InMsg.Init(Ptr, NetEvent.packet^.dataLength, True) then
+ begin
+ enet_packet_destroy(NetEvent.packet);
continue;
+ end;
InMsg.ReadLongWord(); // skip size
MID := InMsg.ReadByte();
NetDumpFile: TStream;
+ g_Res_received_map_start: Boolean = false; // set if we received "map change" event
+
+
function g_Net_Init(): Boolean;
procedure g_Net_Cleanup();
procedure g_Net_Free();
case NetEvent.kind of
ENET_EVENT_TYPE_RECEIVE:
begin
+ if (NetEvent.channelID = NET_CHAN_DOWNLOAD_EX) then continue; // ignore all download packets, they're processed by separate code
if NetDump then g_Net_DumpRecvBuffer(NetEvent.packet^.data, NetEvent.packet^.dataLength);
g_Net_Client_HandlePacket(NetEvent.packet, g_Net_ClientMsgHandler);
end;
case NetEvent.kind of
ENET_EVENT_TYPE_RECEIVE:
begin
+ if (NetEvent.channelID = NET_CHAN_DOWNLOAD_EX) then continue; // ignore all download packets, they're processed by separate code
if NetDump then g_Net_DumpRecvBuffer(NetEvent.packet^.data, NetEvent.packet^.dataLength);
g_Net_Client_HandlePacket(NetEvent.packet, g_Net_ClientLightMsgHandler);
end;
if (ev.channelID <> NET_CHAN_DOWNLOAD_EX) then
begin
//e_LogWritefln('g_Net_Wait_MapInfo: skip message from non-transfer channel', []);
+ freePacket := false;
+ g_Net_Client_HandlePacket(ev.packet, g_Net_ClientLightMsgHandler);
+ if (g_Res_received_map_start) then begin result := -666; exit; end;
end
else
begin
if (ev.channelID <> NET_CHAN_DOWNLOAD_EX) then
begin
//e_LogWriteln('g_Net_Wait_Event: skip message from non-transfer channel');
+ freePacket := false;
+ g_Net_Client_HandlePacket(ev.packet, g_Net_ClientLightMsgHandler);
+ if (g_Res_received_map_start) then begin result := -666; exit; end;
end
else
begin
if (ev.channelID <> NET_CHAN_DOWNLOAD_EX) then
begin
//e_LogWritefln('g_Net_Wait_Event: skip message from non-transfer channel', []);
+ freePacket := false;
+ g_Net_Client_HandlePacket(ev.packet, g_Net_ClientLightMsgHandler);
+ if (g_Res_received_map_start) then begin result := -666; exit; end;
end
else
begin
case EvType of
NET_EV_MAPSTART:
begin
+ g_Res_received_map_start := true;
gGameOn := False;
g_Game_ClearLoading();
g_Game_StopAllSounds(True);
NET_EV_MAPEND:
begin
+ g_Res_received_map_start := true;
gMissionFailed := EvNum <> 0;
gExit := EXIT_ENDLEVELCUSTOM;
end;