index 194a1eda69d89aaaa2212206c09b3f4cc2293086..bc7d4ae30aaa7e19d9d8671d5e32106ab5166b1f 100644 (file)
--- a/src/game/g_netmaster.pas
+++ b/src/game/g_netmaster.pas
+(* Copyright (C) DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$INCLUDE g_amodes.inc}
unit g_netmaster;
interface
unit g_netmaster;
interface
Port: Word;
Map: string;
Players, MaxPlayers, LocalPl, Bots: Byte;
Port: Word;
Map: string;
Players, MaxPlayers, LocalPl, Bots: Byte;
- Ping: Integer;
+ Ping: Int64;
GameMode: Byte;
Password: Boolean;
PingAddr: ENetAddress;
GameMode: Byte;
Password: Boolean;
PingAddr: ENetAddress;
uses
SysUtils, e_fixedbuffer, e_input, e_graphics, e_log, g_window, g_net, g_console,
uses
SysUtils, e_fixedbuffer, e_input, e_graphics, e_log, g_window, g_net, g_console,
- g_map, g_game, g_sound, g_textures, g_gui, g_menu, g_options, g_language, WADEDITOR,
- ENetPlatform;
+ g_map, g_game, g_sound, g_textures, g_gui, g_menu, g_options, g_language, wadreader;
var
NetMEvent: ENetEvent;
var
NetMEvent: ENetEvent;
slFetched: Boolean = False;
slDirPressed: Boolean = False;
slFetched: Boolean = False;
slDirPressed: Boolean = False;
-function GetTimerMS(): Integer;
+function GetTimerMS(): Int64;
begin
begin
- Result := GetTimer() div 1000;
+ Result := GetTimer() {div 1000};
end;
procedure PingServer(var S: TNetServer; Sock: ENetSocket);
var
Buf: ENetBuffer;
end;
procedure PingServer(var S: TNetServer; Sock: ENetSocket);
var
Buf: ENetBuffer;
- Ping: array [0..5] of Byte;
- ClTime: Integer;
+ Ping: array [0..9] of Byte;
+ ClTime: Int64;
begin
ClTime := GetTimerMS();
Buf.data := Addr(Ping[0]);
begin
ClTime := GetTimerMS();
Buf.data := Addr(Ping[0]);
- Buf.dataLength := 6;
+ Buf.dataLength := 2+8;
Ping[0] := Ord('D');
Ping[1] := Ord('F');
Ping[0] := Ord('D');
Ping[1] := Ord('F');
- LongInt(Addr(Ping[2])^) := ClTime;
+ Int64(Addr(Ping[2])^) := ClTime;
enet_socket_send(Sock, Addr(S.PingAddr), @Buf, 1);
end;
enet_socket_send(Sock, Addr(S.PingAddr), @Buf, 1);
end;
Cnt: Byte;
P: pENetPacket;
MID: Byte;
Cnt: Byte;
P: pENetPacket;
MID: Byte;
- I, T, RX: Integer;
+ I, RX: Integer;
+ T: Int64;
Sock: ENetSocket;
Buf: ENetBuffer;
SvAddr: ENetAddress;
Sock: ENetSocket;
Buf: ENetBuffer;
SvAddr: ENetAddress;
e_Buffer_Clear(@NetOut);
e_Buffer_Write(@NetOut, Byte(NET_MMSG_GET));
e_Buffer_Clear(@NetOut);
e_Buffer_Write(@NetOut, Byte(NET_MMSG_GET));
- P := enet_packet_create(Addr(NetOut.Data), NetOut.Len, Cardinal(ENET_PACKET_FLAG_RELIABLE));
+ P := enet_packet_create(Addr(NetOut.Data), NetOut.WritePos, Cardinal(ENET_PACKET_FLAG_RELIABLE));
enet_peer_send(NetMPeer, NET_MCHAN_MAIN, P);
enet_host_flush(NetMHost);
enet_peer_send(NetMPeer, NET_MCHAN_MAIN, P);
enet_host_flush(NetMHost);
Cnt := e_Raw_Read_Byte(NetMEvent.packet^.data);
e_WriteLog('Retrieved ' + IntToStr(Cnt) + ' server(s).', MSG_NOTIFY);
g_Console_Add(_lc[I_NET_MSG] + Format(_lc[I_NET_SLIST_RETRIEVED], [Cnt]), True);
Cnt := e_Raw_Read_Byte(NetMEvent.packet^.data);
e_WriteLog('Retrieved ' + IntToStr(Cnt) + ' server(s).', MSG_NOTIFY);
g_Console_Add(_lc[I_NET_MSG] + Format(_lc[I_NET_SLIST_RETRIEVED], [Cnt]), True);
+ //writeln('BOO!');
if Cnt > 0 then
begin
if Cnt > 0 then
begin
RX := enet_socket_receive(Sock, @SvAddr, @Buf, 1);
if RX <= 0 then continue;
RX := enet_socket_receive(Sock, @SvAddr, @Buf, 1);
if RX <= 0 then continue;
- NetIn.Len := RX + 1;
+ NetIn.Cap := RX + 1;
NetIn.ReadPos := 0;
if e_Buffer_Read_Char(@NetIn) <> 'D' then continue;
NetIn.ReadPos := 0;
if e_Buffer_Read_Char(@NetIn) <> 'D' then continue;
begin
with SL[I] do
begin
begin
with SL[I] do
begin
- Ping := e_Buffer_Read_LongInt(@NetIn);
+ Ping := e_Buffer_Read_Int64(@NetIn);
Ping := GetTimerMS() - Ping;
Name := e_Buffer_Read_String(@NetIn);
Map := e_Buffer_Read_String(@NetIn);
Ping := GetTimerMS() - Ping;
Name := e_Buffer_Read_String(@NetIn);
Map := e_Buffer_Read_String(@NetIn);
Wad, Map: string;
Cli: Byte;
begin
Wad, Map: string;
Cli: Byte;
begin
- g_ProcessResourceStr(gMapInfo.Map, @Wad, nil, @Map);
- Wad := ExtractFileName(Wad);
+ Wad := g_ExtractWadNameNoPath(gMapInfo.Map);
+ Map := g_ExtractFileName(gMapInfo.Map);
e_Buffer_Write(@NetOut, NetServerName);
e_Buffer_Write(@NetOut, NetServerName);
g_Net_Slist_WriteInfo();
g_Net_Slist_WriteInfo();
- P := enet_packet_create(Addr(NetOut.Data), NetOut.Len, Cardinal(ENET_PACKET_FLAG_RELIABLE));
+ P := enet_packet_create(Addr(NetOut.Data), NetOut.WritePos, Cardinal(ENET_PACKET_FLAG_RELIABLE));
enet_peer_send(NetMPeer, NET_MCHAN_UPD, P);
enet_host_flush(NetMHost);
enet_peer_send(NetMPeer, NET_MCHAN_UPD, P);
enet_host_flush(NetMHost);
e_Buffer_Write(@NetOut, Byte(NET_MMSG_DEL));
e_Buffer_Write(@NetOut, NetAddr.port);
e_Buffer_Write(@NetOut, Byte(NET_MMSG_DEL));
e_Buffer_Write(@NetOut, NetAddr.port);
- P := enet_packet_create(Addr(NetOut.Data), NetOut.Len, Cardinal(ENET_PACKET_FLAG_RELIABLE));
+ P := enet_packet_create(Addr(NetOut.Data), NetOut.WritePos, Cardinal(ENET_PACKET_FLAG_RELIABLE));
enet_peer_send(NetMPeer, NET_MCHAN_MAIN, P);
enet_host_flush(NetMHost);
enet_peer_send(NetMPeer, NET_MCHAN_MAIN, P);
enet_host_flush(NetMHost);
if SL = nil then Exit;
if SL = nil then Exit;
- if e_KeyPressed(IK_RETURN) then
+ if e_KeyPressed(IK_RETURN) or e_KeyPressed(IK_KPRETURN) then
begin
if not slReturnPressed then
begin
begin
if not slReturnPressed then
begin
else
slReturnPressed := False;
else
slReturnPressed := False;
- if e_KeyPressed(IK_DOWN) then
+ if e_KeyPressed(IK_DOWN) or e_KeyPressed(IK_KPDOWN) then
begin
if not slDirPressed then
begin
begin
if not slDirPressed then
begin
end;
end;
end;
end;
- if e_KeyPressed(IK_UP) then
+ if e_KeyPressed(IK_UP) or e_KeyPressed(IK_KPUP) then
begin
if not slDirPressed then
begin
begin
if not slDirPressed then
begin
end;
end;
end;
end;
- if (not e_KeyPressed(IK_DOWN)) and (not e_KeyPressed(IK_UP)) then
+ if (not e_KeyPressed(IK_DOWN)) and (not e_KeyPressed(IK_UP)) and (not e_KeyPressed(IK_KPDOWN)) and (not e_KeyPressed(IK_KPUP)) then
slDirPressed := False;
end;
slDirPressed := False;
end;