mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
- netcode cleanup.
This moves all parts in the Duke/Redneck modules that access ENet into net.cpp/network.cpp and changes global ENet structs to use C++ notation instead of typedefs so that anonymous definitions for them can be added where needed. These changes are done to avoid including enet.h globally which is a major issue because this file does not work without including windows.h, making it extremely dirty.
This commit is contained in:
parent
1cb182be2f
commit
4350a4dd31
11 changed files with 310 additions and 276 deletions
|
@ -5685,12 +5685,7 @@ int GameInterface::app_main()
|
||||||
#ifndef NETCODE_DISABLE
|
#ifndef NETCODE_DISABLE
|
||||||
if (g_networkMode == NET_SERVER || g_networkMode == NET_DEDICATED_SERVER)
|
if (g_networkMode == NET_SERVER || g_networkMode == NET_DEDICATED_SERVER)
|
||||||
{
|
{
|
||||||
ENetAddress address = { ENET_HOST_ANY, g_netPort };
|
Net_InitNetwork();
|
||||||
g_netServer = enet_host_create(&address, MAXPLAYERS, CHAN_MAX, 0, 0);
|
|
||||||
|
|
||||||
if (g_netServer == NULL)
|
|
||||||
initprintf("An error occurred while trying to create an ENet server host.\n");
|
|
||||||
else initprintf("Multiplayer server initialized\n");
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
numplayers = 1;
|
numplayers = 1;
|
||||||
|
|
|
@ -48,7 +48,7 @@ BEGIN_DUKE_NS
|
||||||
ENetHost *g_netServer = NULL;
|
ENetHost *g_netServer = NULL;
|
||||||
ENetHost *g_netClient = NULL;
|
ENetHost *g_netClient = NULL;
|
||||||
ENetPeer *g_netClientPeer = NULL;
|
ENetPeer *g_netClientPeer = NULL;
|
||||||
enet_uint16 g_netPort = 23513;
|
uint16_t g_netPort = 23513;
|
||||||
int32_t g_netDisconnect = 0;
|
int32_t g_netDisconnect = 0;
|
||||||
char g_netPassword[32];
|
char g_netPassword[32];
|
||||||
int32_t g_networkMode = NET_CLIENT;
|
int32_t g_networkMode = NET_CLIENT;
|
||||||
|
@ -5240,6 +5240,141 @@ void Net_SendRTS(int ridiculeNum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Net_InitNetwork()
|
||||||
|
{
|
||||||
|
ENetAddress address = { ENET_HOST_ANY, g_netPort };
|
||||||
|
g_netServer = enet_host_create(&address, MAXPLAYERS, CHAN_MAX, 0, 0);
|
||||||
|
|
||||||
|
if (g_netServer == NULL)
|
||||||
|
initprintf("An error occurred while trying to create an ENet server host.\n");
|
||||||
|
else initprintf("Multiplayer server initialized\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Net_PrintLag(FString &output)
|
||||||
|
{
|
||||||
|
// lag meter
|
||||||
|
if (g_netClientPeer)
|
||||||
|
{
|
||||||
|
output.AppendFormat("%d +- %d ms\n", (g_netClientPeer->lastRoundTripTime + g_netClientPeer->roundTripTime) / 2,
|
||||||
|
(g_netClientPeer->lastRoundTripTimeVariance + g_netClientPeer->roundTripTimeVariance) / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int osdcmd_listplayers(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
char ipaddr[32];
|
||||||
|
|
||||||
|
if (parm && parm->numparms != 0)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Connected clients:\n");
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
||||||
|
initprintf("%s %s\n", ipaddr,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static int osdcmd_kick(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
uint32_t hexaddr;
|
||||||
|
|
||||||
|
if (parm->numparms != 1)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sscanf(parm->parms[0], "%" SCNx32 "", &hexaddr);
|
||||||
|
|
||||||
|
if (currentPeer->address.host == hexaddr)
|
||||||
|
{
|
||||||
|
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
enet_peer_disconnect(currentPeer, DISC_KICKED);
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Player %s not found!\n", parm->parms[0]);
|
||||||
|
osdcmd_listplayers(NULL);
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int osdcmd_kickban(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
uint32_t hexaddr;
|
||||||
|
|
||||||
|
if (parm->numparms != 1)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sscanf(parm->parms[0], "%" SCNx32 "", &hexaddr);
|
||||||
|
|
||||||
|
// TODO: implement banning logic
|
||||||
|
|
||||||
|
if (currentPeer->address.host == hexaddr)
|
||||||
|
{
|
||||||
|
char ipaddr[32];
|
||||||
|
|
||||||
|
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
||||||
|
initprintf("Host %s is now banned.\n", ipaddr);
|
||||||
|
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
enet_peer_disconnect(currentPeer, DISC_BANNED);
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Player %s not found!\n", parm->parms[0]);
|
||||||
|
osdcmd_listplayers(NULL);
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -31,7 +31,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#define EDUKE32_UNUSED
|
#define EDUKE32_UNUSED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "enet.h"
|
struct ENetHost;
|
||||||
|
struct ENetPeer;
|
||||||
|
struct ENetAddress;
|
||||||
|
|
||||||
BEGIN_DUKE_NS
|
BEGIN_DUKE_NS
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ extern ENetPeer *g_netClientPeer;
|
||||||
extern char g_netPassword[32];
|
extern char g_netPassword[32];
|
||||||
extern int32_t g_netDisconnect;
|
extern int32_t g_netDisconnect;
|
||||||
extern int32_t g_netPlayersWaiting;
|
extern int32_t g_netPlayersWaiting;
|
||||||
extern enet_uint16 g_netPort;
|
extern uint16_t g_netPort;
|
||||||
extern int32_t g_networkMode;
|
extern int32_t g_networkMode;
|
||||||
extern int32_t g_netIndex;
|
extern int32_t g_netIndex;
|
||||||
|
|
||||||
|
@ -298,6 +300,8 @@ void Net_WaitForInitialSnapshot();
|
||||||
|
|
||||||
void Net_SendTaunt(int ridiculeNum);
|
void Net_SendTaunt(int ridiculeNum);
|
||||||
void Net_SendRTS(int ridiculeNum);
|
void Net_SendRTS(int ridiculeNum);
|
||||||
|
void Net_InitNetwork();
|
||||||
|
void Net_PrintLag(FString& output);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -543,120 +543,8 @@ static int osdcmd_password(osdcmdptr_t parm)
|
||||||
return OSDCMD_OK;
|
return OSDCMD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int osdcmd_listplayers(osdcmdptr_t parm)
|
int osdcmd_listplayers(osdcmdptr_t parm);
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
char ipaddr[32];
|
|
||||||
|
|
||||||
if (parm && parm->numparms != 0)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Connected clients:\n");
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
|
||||||
initprintf("%s %s\n", ipaddr,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static int osdcmd_kick(osdcmdptr_t parm)
|
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
uint32_t hexaddr;
|
|
||||||
|
|
||||||
if (parm->numparms != 1)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sscanf(parm->parms[0],"%" SCNx32 "", &hexaddr);
|
|
||||||
|
|
||||||
if (currentPeer->address.host == hexaddr)
|
|
||||||
{
|
|
||||||
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
enet_peer_disconnect(currentPeer, DISC_KICKED);
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Player %s not found!\n", parm->parms[0]);
|
|
||||||
osdcmd_listplayers(NULL);
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int osdcmd_kickban(osdcmdptr_t parm)
|
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
uint32_t hexaddr;
|
|
||||||
|
|
||||||
if (parm->numparms != 1)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sscanf(parm->parms[0],"%" SCNx32 "", &hexaddr);
|
|
||||||
|
|
||||||
// TODO: implement banning logic
|
|
||||||
|
|
||||||
if (currentPeer->address.host == hexaddr)
|
|
||||||
{
|
|
||||||
char ipaddr[32];
|
|
||||||
|
|
||||||
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
|
||||||
initprintf("Host %s is now banned.\n", ipaddr);
|
|
||||||
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
enet_peer_disconnect(currentPeer, DISC_BANNED);
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Player %s not found!\n", parm->parms[0]);
|
|
||||||
osdcmd_listplayers(NULL);
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int osdcmd_printtimes(osdcmdptr_t UNUSED(parm))
|
static int osdcmd_printtimes(osdcmdptr_t UNUSED(parm))
|
||||||
|
|
|
@ -619,12 +619,9 @@ FString GameInterface::statFPS(void)
|
||||||
output.AppendFormat("G_MoveWorld(): %.3f ms\n", g_moveWorldTime);
|
output.AppendFormat("G_MoveWorld(): %.3f ms\n", g_moveWorldTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// lag meter
|
#ifndef NETCODE_DISABLE
|
||||||
if (g_netClientPeer)
|
Net_PrintLag(output);
|
||||||
{
|
#endif
|
||||||
output.AppendFormat("%d +- %d ms\n", (g_netClientPeer->lastRoundTripTime + g_netClientPeer->roundTripTime)/2,
|
|
||||||
(g_netClientPeer->lastRoundTripTimeVariance + g_netClientPeer->roundTripTimeVariance)/2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cumulativeFrameDelay >= 1000.0)
|
if (cumulativeFrameDelay >= 1000.0)
|
||||||
|
|
|
@ -7153,15 +7153,7 @@ int GameInterface::app_main()
|
||||||
initprintf("CON debugging activated (level %d).\n",g_scriptDebug);
|
initprintf("CON debugging activated (level %d).\n",g_scriptDebug);
|
||||||
|
|
||||||
#ifndef NETCODE_DISABLE
|
#ifndef NETCODE_DISABLE
|
||||||
if (g_networkMode == NET_SERVER/* || g_networkMode == NET_DEDICATED_SERVER*/)
|
Net_InitNetwork();
|
||||||
{
|
|
||||||
ENetAddress address = { ENET_HOST_ANY, g_netPort };
|
|
||||||
g_netServer = enet_host_create(&address, MAXPLAYERS, CHAN_MAX, 0, 0);
|
|
||||||
|
|
||||||
if (g_netServer == NULL)
|
|
||||||
initprintf("An error occurred while trying to create an ENet server host.\n");
|
|
||||||
else initprintf("Multiplayer server initialized\n");
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
numplayers = 1;
|
numplayers = 1;
|
||||||
g_mostConcurrentPlayers = ud.multimode; // Lunatic needs this (player[] bound)
|
g_mostConcurrentPlayers = ud.multimode; // Lunatic needs this (player[] bound)
|
||||||
|
|
|
@ -3682,6 +3682,145 @@ void Net_SendRTS(int ridiculeNum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Net_InitNetwork()
|
||||||
|
{
|
||||||
|
if (g_networkMode == NET_SERVER/* || g_networkMode == NET_DEDICATED_SERVER*/)
|
||||||
|
{
|
||||||
|
ENetAddress address = { ENET_HOST_ANY, g_netPort };
|
||||||
|
g_netServer = enet_host_create(&address, MAXPLAYERS, CHAN_MAX, 0, 0);
|
||||||
|
|
||||||
|
if (g_netServer == NULL)
|
||||||
|
initprintf("An error occurred while trying to create an ENet server host.\n");
|
||||||
|
else initprintf("Multiplayer server initialized\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Net_PrintLag(FString& output)
|
||||||
|
{
|
||||||
|
// lag meter
|
||||||
|
if (g_netClientPeer)
|
||||||
|
{
|
||||||
|
output.AppendFormat("%d +- %d ms\n", (g_netClientPeer->lastRoundTripTime + g_netClientPeer->roundTripTime) / 2,
|
||||||
|
(g_netClientPeer->lastRoundTripTimeVariance + g_netClientPeer->roundTripTimeVariance) / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int osdcmd_listplayers(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
char ipaddr[32];
|
||||||
|
|
||||||
|
if (parm && parm->numparms != 0)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Connected clients:\n");
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
||||||
|
initprintf("%s %s\n", ipaddr,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static int osdcmd_kick(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
uint32_t hexaddr;
|
||||||
|
|
||||||
|
if (parm->numparms != 1)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sscanf(parm->parms[0], "%" SCNx32 "", &hexaddr);
|
||||||
|
|
||||||
|
if (currentPeer->address.host == hexaddr)
|
||||||
|
{
|
||||||
|
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
enet_peer_disconnect(currentPeer, DISC_KICKED);
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Player %s not found!\n", parm->parms[0]);
|
||||||
|
osdcmd_listplayers(NULL);
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int osdcmd_kickban(osdcmdptr_t parm)
|
||||||
|
{
|
||||||
|
ENetPeer* currentPeer;
|
||||||
|
uint32_t hexaddr;
|
||||||
|
|
||||||
|
if (parm->numparms != 1)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!g_netServer)
|
||||||
|
{
|
||||||
|
initprintf("You are not the server.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (currentPeer = g_netServer->peers;
|
||||||
|
currentPeer < &g_netServer->peers[g_netServer->peerCount];
|
||||||
|
++currentPeer)
|
||||||
|
{
|
||||||
|
if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sscanf(parm->parms[0], "%" SCNx32 "", &hexaddr);
|
||||||
|
|
||||||
|
// TODO: implement banning logic
|
||||||
|
|
||||||
|
if (currentPeer->address.host == hexaddr)
|
||||||
|
{
|
||||||
|
char ipaddr[32];
|
||||||
|
|
||||||
|
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
||||||
|
initprintf("Host %s is now banned.\n", ipaddr);
|
||||||
|
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
||||||
|
g_player[(intptr_t)currentPeer->data].user_name);
|
||||||
|
enet_peer_disconnect(currentPeer, DISC_BANNED);
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initprintf("Player %s not found!\n", parm->parms[0]);
|
||||||
|
osdcmd_listplayers(NULL);
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // !defined NETCODE_DISABLE
|
#endif // !defined NETCODE_DISABLE
|
||||||
|
|
||||||
END_RR_NS
|
END_RR_NS
|
||||||
|
|
|
@ -23,13 +23,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#ifndef netplay_h_
|
#ifndef netplay_h_
|
||||||
#define netplay_h_
|
#define netplay_h_
|
||||||
|
|
||||||
#ifdef _WIN32
|
struct ENetHost;
|
||||||
// include this before enet does
|
struct ENetPeer;
|
||||||
# define NEED_WINSOCK2_H
|
struct ENetEvent;
|
||||||
# include "windows_inc.h"
|
struct ENetPacket;
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "enet.h"
|
|
||||||
|
|
||||||
BEGIN_RR_NS
|
BEGIN_RR_NS
|
||||||
|
|
||||||
|
@ -42,7 +39,7 @@ extern ENetPeer *g_netClientPeer;
|
||||||
extern char g_netPassword[32];
|
extern char g_netPassword[32];
|
||||||
extern int32_t g_netDisconnect;
|
extern int32_t g_netDisconnect;
|
||||||
extern int32_t g_netPlayersWaiting;
|
extern int32_t g_netPlayersWaiting;
|
||||||
extern enet_uint16 g_netPort;
|
extern uint16_t g_netPort;
|
||||||
#ifndef NETCODE_DISABLE
|
#ifndef NETCODE_DISABLE
|
||||||
extern int32_t g_networkMode;
|
extern int32_t g_networkMode;
|
||||||
#else
|
#else
|
||||||
|
@ -308,6 +305,8 @@ void faketimerhandler(void);
|
||||||
|
|
||||||
void Net_SendTaunt(int ridiculeNum);
|
void Net_SendTaunt(int ridiculeNum);
|
||||||
void Net_SendRTS(int ridiculeNum);
|
void Net_SendRTS(int ridiculeNum);
|
||||||
|
void Net_InitNetwork();
|
||||||
|
void Net_PrintLag(FString& output);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -403,120 +403,7 @@ static int osdcmd_password(osdcmdptr_t parm)
|
||||||
return OSDCMD_OK;
|
return OSDCMD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int osdcmd_listplayers(osdcmdptr_t parm)
|
int osdcmd_listplayers(osdcmdptr_t parm);
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
char ipaddr[32];
|
|
||||||
|
|
||||||
if (parm && parm->numparms != 0)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Connected clients:\n");
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
|
||||||
initprintf("%s %s\n", ipaddr,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static int osdcmd_kick(osdcmdptr_t parm)
|
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
uint32_t hexaddr;
|
|
||||||
|
|
||||||
if (parm->numparms != 1)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sscanf(parm->parms[0],"%" SCNx32 "", &hexaddr);
|
|
||||||
|
|
||||||
if (currentPeer->address.host == hexaddr)
|
|
||||||
{
|
|
||||||
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
enet_peer_disconnect(currentPeer, DISC_KICKED);
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Player %s not found!\n", parm->parms[0]);
|
|
||||||
osdcmd_listplayers(NULL);
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int osdcmd_kickban(osdcmdptr_t parm)
|
|
||||||
{
|
|
||||||
ENetPeer *currentPeer;
|
|
||||||
uint32_t hexaddr;
|
|
||||||
|
|
||||||
if (parm->numparms != 1)
|
|
||||||
return OSDCMD_SHOWHELP;
|
|
||||||
|
|
||||||
if (!g_netServer)
|
|
||||||
{
|
|
||||||
initprintf("You are not the server.\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (currentPeer = g_netServer -> peers;
|
|
||||||
currentPeer < & g_netServer -> peers [g_netServer -> peerCount];
|
|
||||||
++ currentPeer)
|
|
||||||
{
|
|
||||||
if (currentPeer -> state != ENET_PEER_STATE_CONNECTED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
sscanf(parm->parms[0],"%" SCNx32 "", &hexaddr);
|
|
||||||
|
|
||||||
// TODO: implement banning logic
|
|
||||||
|
|
||||||
if (currentPeer->address.host == hexaddr)
|
|
||||||
{
|
|
||||||
char ipaddr[32];
|
|
||||||
|
|
||||||
enet_address_get_host_ip(¤tPeer->address, ipaddr, sizeof(ipaddr));
|
|
||||||
initprintf("Host %s is now banned.\n", ipaddr);
|
|
||||||
initprintf("Kicking %x (%s)\n", currentPeer->address.host,
|
|
||||||
g_player[(intptr_t)currentPeer->data].user_name);
|
|
||||||
enet_peer_disconnect(currentPeer, DISC_BANNED);
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initprintf("Player %s not found!\n", parm->parms[0]);
|
|
||||||
osdcmd_listplayers(NULL);
|
|
||||||
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int osdcmd_printtimes(osdcmdptr_t UNUSED(parm))
|
static int osdcmd_printtimes(osdcmdptr_t UNUSED(parm))
|
||||||
|
|
|
@ -618,11 +618,9 @@ FString GameInterface::statFPS()
|
||||||
}
|
}
|
||||||
|
|
||||||
// lag meter
|
// lag meter
|
||||||
if (g_netClientPeer)
|
#ifndef NETCODE_DISABLE
|
||||||
{
|
Net_PrintLag(output);
|
||||||
output.AppendFormat("%d +- %d ms\n", (g_netClientPeer->lastRoundTripTime + g_netClientPeer->roundTripTime)/2,
|
#endif
|
||||||
(g_netClientPeer->lastRoundTripTimeVariance + g_netClientPeer->roundTripTimeVariance) / 2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cumulativeFrameDelay >= 1000.0)
|
if (cumulativeFrameDelay >= 1000.0)
|
||||||
|
|
24
source/thirdparty/include/enet.h
vendored
24
source/thirdparty/include/enet.h
vendored
|
@ -487,11 +487,11 @@ extern "C" {
|
||||||
* but not for enet_host_create. Once a server responds to a broadcast, the
|
* but not for enet_host_create. Once a server responds to a broadcast, the
|
||||||
* address is updated from ENET_HOST_BROADCAST to the server's actual IP address.
|
* address is updated from ENET_HOST_BROADCAST to the server's actual IP address.
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetAddress {
|
struct ENetAddress {
|
||||||
struct in6_addr host;
|
struct in6_addr host;
|
||||||
enet_uint16 port;
|
enet_uint16 port;
|
||||||
enet_uint16 sin6_scope_id;
|
enet_uint16 sin6_scope_id;
|
||||||
} ENetAddress;
|
};
|
||||||
|
|
||||||
#define in6_equal(in6_addr_a, in6_addr_b) (memcmp(&in6_addr_a, &in6_addr_b, sizeof(struct in6_addr)) == 0)
|
#define in6_equal(in6_addr_a, in6_addr_b) (memcmp(&in6_addr_a, &in6_addr_b, sizeof(struct in6_addr)) == 0)
|
||||||
|
|
||||||
|
@ -530,14 +530,14 @@ extern "C" {
|
||||||
* ENET_PACKET_FLAG_SENT - whether the packet has been sent from all queues it has been entered into
|
* ENET_PACKET_FLAG_SENT - whether the packet has been sent from all queues it has been entered into
|
||||||
* @sa ENetPacketFlag
|
* @sa ENetPacketFlag
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetPacket {
|
struct ENetPacket {
|
||||||
size_t referenceCount; /**< internal use only */
|
size_t referenceCount; /**< internal use only */
|
||||||
enet_uint32 flags; /**< bitwise-or of ENetPacketFlag constants */
|
enet_uint32 flags; /**< bitwise-or of ENetPacketFlag constants */
|
||||||
enet_uint8 * data; /**< allocated data for packet */
|
enet_uint8 * data; /**< allocated data for packet */
|
||||||
size_t dataLength; /**< length of data */
|
size_t dataLength; /**< length of data */
|
||||||
ENetPacketFreeCallback freeCallback; /**< function to be called when the packet is no longer in use */
|
ENetPacketFreeCallback freeCallback; /**< function to be called when the packet is no longer in use */
|
||||||
void * userData; /**< application private data, may be freely modified */
|
void * userData; /**< application private data, may be freely modified */
|
||||||
} ENetPacket;
|
};
|
||||||
|
|
||||||
typedef struct _ENetAcknowledgement {
|
typedef struct _ENetAcknowledgement {
|
||||||
ENetListNode acknowledgementList;
|
ENetListNode acknowledgementList;
|
||||||
|
@ -629,9 +629,9 @@ extern "C" {
|
||||||
*
|
*
|
||||||
* No fields should be modified unless otherwise specified.
|
* No fields should be modified unless otherwise specified.
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetPeer {
|
struct ENetPeer {
|
||||||
ENetListNode dispatchList;
|
ENetListNode dispatchList;
|
||||||
struct _ENetHost *host;
|
struct ENetHost *host;
|
||||||
enet_uint16 outgoingPeerID;
|
enet_uint16 outgoingPeerID;
|
||||||
enet_uint16 incomingPeerID;
|
enet_uint16 incomingPeerID;
|
||||||
enet_uint32 connectID;
|
enet_uint32 connectID;
|
||||||
|
@ -694,7 +694,7 @@ extern "C" {
|
||||||
enet_uint32 unsequencedWindow[ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
|
enet_uint32 unsequencedWindow[ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
|
||||||
enet_uint32 eventData;
|
enet_uint32 eventData;
|
||||||
size_t totalWaitingData;
|
size_t totalWaitingData;
|
||||||
} ENetPeer;
|
};
|
||||||
|
|
||||||
/** An ENet packet compressor for compressing UDP packets before socket sends or receives. */
|
/** An ENet packet compressor for compressing UDP packets before socket sends or receives. */
|
||||||
typedef struct _ENetCompressor {
|
typedef struct _ENetCompressor {
|
||||||
|
@ -715,7 +715,7 @@ extern "C" {
|
||||||
typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback)(const ENetBuffer *buffers, size_t bufferCount);
|
typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback)(const ENetBuffer *buffers, size_t bufferCount);
|
||||||
|
|
||||||
/** Callback for intercepting received raw UDP packets. Should return 1 to intercept, 0 to ignore, or -1 to propagate an error. */
|
/** Callback for intercepting received raw UDP packets. Should return 1 to intercept, 0 to ignore, or -1 to propagate an error. */
|
||||||
typedef int (ENET_CALLBACK * ENetInterceptCallback)(struct _ENetHost *host, void *event);
|
typedef int (ENET_CALLBACK * ENetInterceptCallback)(struct ENetHost *host, void *event);
|
||||||
|
|
||||||
/** An ENet host for communicating with peers.
|
/** An ENet host for communicating with peers.
|
||||||
*
|
*
|
||||||
|
@ -732,7 +732,7 @@ extern "C" {
|
||||||
* @sa enet_host_bandwidth_limit()
|
* @sa enet_host_bandwidth_limit()
|
||||||
* @sa enet_host_bandwidth_throttle()
|
* @sa enet_host_bandwidth_throttle()
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetHost {
|
struct ENetHost {
|
||||||
ENetSocket socket;
|
ENetSocket socket;
|
||||||
ENetAddress address; /**< Internet address of the host */
|
ENetAddress address; /**< Internet address of the host */
|
||||||
enet_uint32 incomingBandwidth; /**< downstream bandwidth of the host */
|
enet_uint32 incomingBandwidth; /**< downstream bandwidth of the host */
|
||||||
|
@ -769,7 +769,7 @@ extern "C" {
|
||||||
size_t duplicatePeers; /**< optional number of allowed peers from duplicate IPs, defaults to ENET_PROTOCOL_MAXIMUM_PEER_ID */
|
size_t duplicatePeers; /**< optional number of allowed peers from duplicate IPs, defaults to ENET_PROTOCOL_MAXIMUM_PEER_ID */
|
||||||
size_t maximumPacketSize; /**< the maximum allowable packet size that may be sent or received on a peer */
|
size_t maximumPacketSize; /**< the maximum allowable packet size that may be sent or received on a peer */
|
||||||
size_t maximumWaitingData; /**< the maximum aggregate amount of buffer space a peer may use waiting for packets to be delivered */
|
size_t maximumWaitingData; /**< the maximum aggregate amount of buffer space a peer may use waiting for packets to be delivered */
|
||||||
} ENetHost;
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An ENet event type, as specified in @ref ENetEvent.
|
* An ENet event type, as specified in @ref ENetEvent.
|
||||||
|
@ -811,13 +811,13 @@ extern "C" {
|
||||||
*
|
*
|
||||||
* @sa enet_host_service
|
* @sa enet_host_service
|
||||||
*/
|
*/
|
||||||
typedef struct _ENetEvent {
|
struct ENetEvent {
|
||||||
ENetEventType type; /**< type of the event */
|
ENetEventType type; /**< type of the event */
|
||||||
ENetPeer * peer; /**< peer that generated a connect, disconnect or receive event */
|
ENetPeer * peer; /**< peer that generated a connect, disconnect or receive event */
|
||||||
enet_uint8 channelID; /**< channel on the peer that generated the event, if appropriate */
|
enet_uint8 channelID; /**< channel on the peer that generated the event, if appropriate */
|
||||||
enet_uint32 data; /**< data associated with the event, if appropriate */
|
enet_uint32 data; /**< data associated with the event, if appropriate */
|
||||||
ENetPacket * packet; /**< packet associated with the event, if appropriate */
|
ENetPacket * packet; /**< packet associated with the event, if appropriate */
|
||||||
} ENetEvent;
|
};
|
||||||
|
|
||||||
// =======================================================================//
|
// =======================================================================//
|
||||||
// !
|
// !
|
||||||
|
|
Loading…
Reference in a new issue