diff --git a/src/game/g_net.pas b/src/game/g_net.pas
index 5b4f71cc082792b254e52657eb4aef42fe0a0fcf..0f1cf30a8c346c705b6e57280001f7a5b6c0b1b7 100644 (file)
--- a/src/game/g_net.pas
+++ b/src/game/g_net.pas
e_log, e_msg, ENet, Classes, md5, MAPDEF{$IFDEF USE_MINIUPNPC}, miniupnpc;{$ELSE};{$ENDIF}
const
- NET_PROTOCOL_VER = 182;
+ NET_PROTOCOL_VER = 183;
NET_MAXCLIENTS = 24;
NET_CHANS = 12;
NetUseMaster: Boolean = True;
NetSlistIP: string = 'mpms.doom2d.org';
NetSlistPort: Word = 25665;
- NetSlistList: string = '';
+ NetSlistList: string = 'deadsoftware.ru:25665';
NetClientIP: string = '127.0.0.1';
NetClientPort: Word = 25666;
implementation
+// *enet_host_service()*
+// fuck! https://www.mail-archive.com/enet-discuss@cubik.org/msg00852.html
+// tl;dr: on shitdows, we can get -1 sometimes, and it is *NOT* a failure.
+// thank you, enet. let's ignore failures altogether then.
+
uses
SysUtils,
- e_input, g_nethandler, g_netmsg, g_netmaster, g_player, g_window, g_console,
+ e_input, e_res,
+ g_nethandler, g_netmsg, g_netmaster, g_player, g_window, g_console,
g_main, g_game, g_language, g_weapons, utils, ctypes, g_system,
g_map;
killClientByFT(nc^);
exit;
end;
- if (ridx < 0) then fname := MapsDir+gGameSettings.WAD else fname := {GameDir+'/wads/'+}gExternalResources[ridx].diskName;
+ if (ridx < 0) then fname := gGameSettings.WAD else fname := gExternalResources[ridx].diskName;
if (length(fname) = 0) then
begin
e_WriteLog('Invalid filename: '+fname, TMsgType.Warning);
exit;
end;
tf.diskName := findDiskWad(fname);
- //if (length(tf.diskName) = 0) then tf.diskName := findDiskWad(GameDir+'/wads/'+fname);
if (length(tf.diskName) = 0) then
begin
e_LogWritefln('NETWORK: file "%s" not found!', [fname], TMsgType.Fatal);
begin
e_LogWritefln('client #%d requested map info', [nc.ID]);
trans_omsg.Clear();
- dfn := findDiskWad(MapsDir+gGameSettings.WAD);
+ dfn := findDiskWad(gGameSettings.WAD);
if (dfn = '') then dfn := '!wad_not_found!.wad'; //FIXME
//md5 := MD5File(dfn);
md5 := gWADHash;
// packet type
trans_omsg.Write(Byte(NTF_SERVER_MAP_INFO));
// map wad name
- trans_omsg.Write(gGameSettings.WAD);
+ trans_omsg.Write(ExtractFileName(gGameSettings.WAD));
// map wad md5
trans_omsg.Write(md5);
// map wad size
ett := getNewTimeoutEnd();
repeat
status := enet_host_service(NetHost, @ev, 300);
+ {
if (status < 0) then
begin
g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_ERR_CONN] + ' network error', True);
Result := -1;
exit;
end;
- if (status = 0) then
+ }
+ if (status <= 0) then
begin
// check for timeout
ct := GetTimerMS();
ett := getNewTimeoutEnd();
repeat
status := enet_host_service(NetHost, @ev, 300);
+ {
if (status < 0) then
begin
g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_ERR_CONN] + ' network error', True);
Result := -1;
exit;
end;
- if (status = 0) then
+ }
+ if (status <= 0) then
begin
// check for timeout
ct := GetTimerMS();
repeat
//stx := -GetTimerMS();
status := enet_host_service(NetHost, @ev, 300);
+ {
if (status < 0) then
begin
g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_ERR_CONN] + ' network error', True);
Result := -1;
exit;
end;
- if (status = 0) then
+ }
+ if (status <= 0) then
begin
// check for timeout
ct := GetTimerMS();
F: TextFile;
IPstr: string;
IP: LongWord;
+ path: AnsiString;
begin
NetIn.Clear();
NetOut.Clear();
NetPlrUID2 := -1;
NetAddr.port := 25666;
SetLength(NetBannedHosts, 0);
- if FileExists(DataDir + BANLIST_FILENAME) then
+ path := BANLIST_FILENAME;
+ if e_FindResource(DataDirs, path) = true then
begin
- Assign(F, DataDir + BANLIST_FILENAME);
+ Assign(F, path);
Reset(F);
while not EOF(F) do
begin
function g_Net_Client_Update(): enet_size_t;
begin
Result := 0;
- while (enet_host_service(NetHost, @NetEvent, 0) > 0) do
+ while (NetHost <> nil) and (enet_host_service(NetHost, @NetEvent, 0) > 0) do
begin
case NetEvent.kind of
ENET_EVENT_TYPE_RECEIVE:
var
F: TextFile;
I: Integer;
+ path: AnsiString;
begin
- Assign(F, DataDir + BANLIST_FILENAME);
- Rewrite(F);
- if NetBannedHosts <> nil then
- for I := 0 to High(NetBannedHosts) do
- if NetBannedHosts[I].Perm and (NetBannedHosts[I].IP > 0) then
- Writeln(F, IpToStr(NetBannedHosts[I].IP));
- CloseFile(F);
+ path := e_GetWriteableDir(DataDirs);
+ if path <> '' then
+ begin
+ path := e_CatPath(path, BANLIST_FILENAME);
+ Assign(F, path);
+ Rewrite(F);
+ if NetBannedHosts <> nil then
+ for I := 0 to High(NetBannedHosts) do
+ if NetBannedHosts[I].Perm and (NetBannedHosts[I].IP > 0) then
+ Writeln(F, IpToStr(NetBannedHosts[I].IP));
+ CloseFile(F)
+ end
end;
procedure g_Net_DumpStart();
begin
if NetMode = NET_SERVER then
- NetDumpFile := createDiskFile(NETDUMP_FILENAME + '_server')
+ NetDumpFile := e_CreateResource(LogDirs, NETDUMP_FILENAME + '_server')
else
- NetDumpFile := createDiskFile(NETDUMP_FILENAME + '_client');
+ NetDumpFile := e_CreateResource(LogDirs, NETDUMP_FILENAME + '_client');
end;
procedure g_Net_DumpSendBuffer();