X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_net.pas;h=63e4cb91ed172945f96137fe185d91895a5f6020;hb=402c9caffcfe7aff2f70471c79c7f5db62b659e3;hp=95b2319e6acd1eb2f92a7f599de2ce1af7011800;hpb=4bf6da74deaa56a43fa6b0ad15c1bf4054ac6fd4;p=d2df-sdl.git diff --git a/src/game/g_net.pas b/src/game/g_net.pas index 95b2319..63e4cb9 100644 --- a/src/game/g_net.pas +++ b/src/game/g_net.pas @@ -21,7 +21,7 @@ uses e_log, e_msg, utils, ENet, Classes, md5, MAPDEF{$IFDEF USE_MINIUPNPC}, miniupnpc;{$ELSE};{$ENDIF} const - NET_PROTOCOL_VER = 184; + NET_PROTOCOL_VER = 185; NET_MAXCLIENTS = 24; NET_CHANS = 12; @@ -72,12 +72,6 @@ const BANLIST_FILENAME = 'banlist.txt'; NETDUMP_FILENAME = 'netdump'; - {$IF DEFINED(FREEBSD) OR DEFINED(DARWIN)} - NilThreadId = nil; - {$ELSE} - NilThreadId = 0; - {$ENDIF} - type TNetMapResourceInfo = record wadName: AnsiString; // wad file name, without a path @@ -147,9 +141,7 @@ var NetPongSock: ENetSocket = ENET_SOCKET_NULL; NetUseMaster: Boolean = True; - NetSlistIP: string = 'mpms.doom2d.org'; - NetSlistPort: Word = 25665; - NetSlistList: string = 'deadsoftware.ru:25665'; + NetMasterList: string = 'mpms.doom2d.org:25665, deadsoftware.ru:25665'; NetClientIP: string = '127.0.0.1'; NetClientPort: Word = 25666; @@ -180,6 +172,8 @@ var NetGotEverything: Boolean = False; NetGotKeys: Boolean = False; + NetDeafLevel: Integer = 0; + {$IFDEF USE_MINIUPNPC} NetPortForwarded: Word = 0; NetPongForwarded: Boolean = False; @@ -279,7 +273,10 @@ begin end; procedure g_Net_InitLowLevel (); + var v: ENetVersion; begin + v := enet_linked_version(); + e_LogWritefln('ENet Version: %s.%s.%s', [ENET_VERSION_GET_MAJOR(v), ENET_VERSION_GET_MINOR(v), ENET_VERSION_GET_PATCH(v)]); if enet_init_success then raise Exception.Create('wuta?!'); enet_init_success := (enet_initialize() = 0); end; @@ -1500,8 +1497,6 @@ begin NetAddr.host := IPAddr; NetAddr.port := Port; - if NetForwardPorts then NetPortThread := BeginThread(ForwardThread); - NetHost := enet_host_create(@NetAddr, NET_MAXCLIENTS, NET_CHANS, 0, 0); if (NetHost = nil) then @@ -1512,6 +1507,8 @@ begin Exit; end; + if NetForwardPorts then NetPortThread := BeginThread(ForwardThread); + NetPongSock := enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM); if NetPongSock <> ENET_SOCKET_NULL then begin @@ -1614,7 +1611,7 @@ var Ping: array [0..9] of Byte; NPl: Byte; begin - if NetPongSock = ENET_SOCKET_NULL then Exit; + if (NetPongSock = ENET_SOCKET_NULL) or (NetHost = nil) then Exit; Buf.data := Addr(Ping[0]); Buf.dataLength := 2+8; @@ -1631,7 +1628,7 @@ begin NetOut.Clear(); NetOut.Write(Byte(Ord('D'))); NetOut.Write(Byte(Ord('F'))); - NetOut.Write(NetPort); + NetOut.Write(NetHost.address.port); NetOut.Write(ClTime); TMasterHost.writeInfo(NetOut); NPl := 0; @@ -2246,7 +2243,10 @@ var begin Result := False; - if NetPortForwarded = NetPort then + if NetHost = nil then + exit; + + if NetPortForwarded = NetHost.address.port then begin Result := True; exit; @@ -2272,7 +2272,7 @@ begin exit; end; - StrPort := IntToStr(NetPort); + StrPort := IntToStr(NetHost.address.port); I := UPNP_AddPortMapping( Urls.controlURL, Addr(data.first.servicetype[1]), PChar(StrPort), PChar(StrPort), Addr(LanAddr[0]), PChar('D2DF'), @@ -2281,7 +2281,7 @@ begin if I <> 0 then begin - conwritefln('forwarding port %d failed: error %d', [NetPort, I]); + conwritefln('forwarding port %d failed: error %d', [NetHost.address.port, I]); FreeUPNPDevList(DevList); FreeUPNPUrls(@Urls); exit; @@ -2308,10 +2308,10 @@ begin end; end; - conwritefln('forwarded port %d successfully', [NetPort]); + conwritefln('forwarded port %d successfully', [NetHost.address.port]); NetIGDControl := AnsiString(Urls.controlURL); NetIGDService := data.first.servicetype; - NetPortForwarded := NetPort; + NetPortForwarded := NetHost.address.port; FreeUPNPDevList(DevList); FreeUPNPUrls(@Urls); @@ -2343,12 +2343,12 @@ begin if NetPongForwarded then begin NetPongForwarded := False; - StrPort := IntToStr(NetPortForwarded + 1); + StrPort := IntToStr(NET_PING_PORT); I := UPNP_DeletePortMapping( PChar(NetIGDControl), Addr(NetIGDService[1]), PChar(StrPort), PChar('UDP'), nil ); - conwritefln(' port %d: %d', [NetPortForwarded + 1, I]); + conwritefln(' port %d: %d', [NET_PING_PORT, I]); end; NetPortForwarded := 0; @@ -2374,7 +2374,7 @@ begin SetLength(NetServerName, 64); g_Net_Slist_ServerRenamed(); end; - g_Console_Add(cmd + ' = "' + NetServerName + '"'); + g_Console_Add(cmd + ' "' + NetServerName + '"'); end; 'sv_passwd': begin @@ -2385,7 +2385,7 @@ begin SetLength(NetPassword, 24); g_Net_Slist_ServerRenamed(); end; - g_Console_Add(cmd + ' = "' + AnsiLowerCase(NetPassword) + '"'); + g_Console_Add(cmd + ' "' + AnsiLowerCase(NetPassword) + '"'); end; 'sv_maxplrs': begin @@ -2412,16 +2412,27 @@ begin g_Net_Slist_ServerRenamed(); end; end; - g_Console_Add(cmd + ' = ' + IntToStr(NetMaxClients)); + g_Console_Add(cmd + ' ' + IntToStr(NetMaxClients)); end; 'sv_public': begin if (Length(P) > 1) then begin - NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) > 0; + NetUseMaster := StrToIntDef(P[1], Byte(NetUseMaster)) <> 0; if NetUseMaster then g_Net_Slist_Public() else g_Net_Slist_Private(); end; - g_Console_Add(cmd + ' = ' + IntToStr(Byte(NetUseMaster))); + g_Console_Add(cmd + ' ' + IntToStr(Byte(NetUseMaster))); + end; + 'sv_port': + begin + if (Length(P) > 1) then + begin + if not g_Game_IsNet then + NetPort := nclamp(StrToIntDef(P[1], NetPort), 0, $FFFF) + else + g_Console_Add(_lc[I_MSG_NOT_NETGAME]); + end; + g_Console_Add(cmd + ' ' + IntToStr(Ord(NetUseMaster))); end; end; end; @@ -2431,7 +2442,19 @@ initialization conRegVar('cl_predictself', @NetPredictSelf, '', 'predict local player'); conRegVar('cl_forceplayerupdate', @NetForcePlayerUpdate, '', 'update net players on NET_MSG_PLRPOS'); conRegVar('cl_interp', @NetInterpLevel, '', 'net player interpolation steps'); + conRegVar('cl_last_ip', @NetClientIP, '', 'address of the last you have connected to'); + conRegVar('cl_last_port', @NetClientPort, '', 'port of the last server you have connected to'); + conRegVar('cl_deafen', @NetDeafLevel, '', 'filter server messages (0-3)'); + conRegVar('sv_forwardports', @NetForwardPorts, '', 'forward server port using miniupnpc (requires server restart)'); + conRegVar('sv_rcon', @NetAllowRCON, '', 'enable remote console'); + conRegVar('sv_rcon_password', @NetRCONPassword, '', 'remote console password'); + conRegVar('sv_update_interval', @NetUpdateRate, '', 'unreliable update interval'); + conRegVar('sv_reliable_interval', @NetRelupdRate, '', 'reliable update interval'); + conRegVar('sv_master_interval', @NetMasterRate, '', 'master server update interval'); + + conRegVar('net_master_list', @NetMasterList, '', 'list of master servers'); + SetLength(NetClients, 0); g_Net_DownloadTimeout := 60; NetIn.Alloc(NET_BUFSIZE);