Packet diverted simplification - faster client startup

This commit is contained in:
ariclone 2002-12-15 16:08:07 +00:00
parent 40a093e77f
commit f9546232de
3 changed files with 44 additions and 50 deletions

View file

@ -207,7 +207,7 @@ extern void NetworkInitClientConnect(void); /// Setup network connect state mach
extern void NetworkExitClientConnect(void); /// Terminate network connect state machine for clients
extern void NetworkInitServerConnect(void); /// Setup network connect state machine for the server
extern void NetworkExitServerConnect(void); /// Terminate network connect state machine for the server
extern void NetworkParseSetupEvent(const char *buf, int size); /// Parse a network connect event
extern int NetworkParseSetupEvent(const char *buf, int size); /// Parse a network connect event
extern int NetworkSetupServerAddress(const char *serveraddr); /// Menu: Setup the server IP
extern void NetworkProcessClientRequest(void); /// Menu Loop: Send out client request messages
extern void NetworkProcessServerRequest(void); /// Menu Loop: Send out server request messages

View file

@ -801,8 +801,9 @@ global void NetworkProcessServerRequest(void)
}
}
IfDebug(
/**
** Parse a network menu packet in client disconneccted state.
** Parse a network menu packet in client disconnected state.
**
** @param msg message received
*/
@ -812,9 +813,10 @@ local void ClientParseDisconnected(
DebugLevel0Fn("ccs_disconnected: Server sending GoodBye dups %d\n" _C_
msg->SubType);
}
);
/**
** FIXME: docu
** Parse a network menu packet in client detaching state.
**
** @param msg message received
*/
@ -835,7 +837,7 @@ local void ClientParseDetaching(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client connecting state.
**
** @param msg message received
*/
@ -909,19 +911,18 @@ local void ClientParseConnecting(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client connected state.
**
** @param msg message received
*/
local void ClientParseConnected(const InitMessage* msg)
{
int pathlen;
switch(msg->SubType) {
int pathlen;
case ICMMap: // Server has sent us new map info
sprintf(ScenSelectFullPath, "%s/", FreeCraftLibPath);
// FIXME: pathlen = sprintf should work?
pathlen = strlen(ScenSelectFullPath);
pathlen = sprintf(ScenSelectFullPath, "%s/", FreeCraftLibPath);
memcpy(ScenSelectFullPath+pathlen, msg->u.MapPath, 256);
ScenSelectFullPath[pathlen+255] = 0;
if (NetClientSelectScenario()) {
@ -952,7 +953,7 @@ local void ClientParseConnected(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client initial mapinfo state.
**
** @param msg message received
*/
@ -975,7 +976,7 @@ local void ClientParseMapInfo(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client synced state.
**
** @param msg message received
*/
@ -993,7 +994,7 @@ local void ClientParseSynced(const InitMessage* msg)
NetStateMsgCnt = 0;
break;
case ICMConfig: // Server gives the go ahead..
case ICMConfig: // Server gives the go ahead.. - start game
DebugLevel0Fn("ccs_synced: Config subtype %d received - starting\n" _C_ msg->SubType);
HostsCount = 0;
for (i = 0; i < msg->HostsCount - 1; ++i) {
@ -1040,7 +1041,7 @@ local void ClientParseSynced(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client async state.
**
** @param msg message received
*/
@ -1077,7 +1078,7 @@ local void ClientParseAsync(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu packet in client final goahead waiting state.
**
** @param msg message received
*/
@ -1090,7 +1091,7 @@ local void ClientParseGoAhead(const InitMessage* msg)
break;
case ICMState: // Server has sent final state info
DebugLevel3Fn("ccs_goahead: Final State subtype %d received - starting\n" _C_ msg->SubType);
DebugLevel0Fn("ccs_goahead: Final State subtype %d received - starting\n" _C_ msg->SubType);
ServerSetupState = msg->u.State;
NetLocalState = ccs_started;
NetStateMsgCnt = 0;
@ -1103,7 +1104,7 @@ local void ClientParseGoAhead(const InitMessage* msg)
}
/**
** FIXME: docu
** Parse a network menu AreYouThere keepalive packet and reply IAmHere.
**
** @param msg message received
*/
@ -1117,7 +1118,7 @@ local void ClientParseAreYouThere(const InitMessage* msg __attribute__((unused))
}
/**
** FIXME: docu
** Parse a network menu Bad Map reply from server.
**
** @param msg message received
*/
@ -1135,6 +1136,7 @@ local void ClientParseBadMap(const InitMessage* msg __attribute__((unused)))
NetConnectRunning = 0; // End the menu..
}
/**
** Parse the initial 'Hello' message of new client that wants to join the game
**
@ -1559,16 +1561,11 @@ local int CheckVersions(const InitMessage* msg)
** Parse a Network menu packet.
**
** @param msg message received
** @param size size of the received packet.
*/
local void NetworkParseMenuPacket(const InitMessage *msg, int size)
local void NetworkParseMenuPacket(const InitMessage *msg)
{
if (msg->Type > MessageInitConfig || size != sizeof(*msg)) {
DebugLevel0Fn("Wrong message\n");
return;
}
DebugLevel0Fn("Received %s Init Message %d:%d (%d) from %d.%d.%d.%d:%d (%ld)\n" _C_
icmsgsubtypenames[msg->SubType] _C_ msg->Type _C_ msg->SubType _C_ size _C_ NIPQUAD(ntohl(NetLastHost)) _C_
DebugLevel0Fn("Received %s Init Message %d:%d from %d.%d.%d.%d:%d (%ld)\n" _C_
icmsgsubtypenames[msg->SubType] _C_ msg->Type _C_ msg->SubType _C_ NIPQUAD(ntohl(NetLastHost)) _C_
ntohs(NetLastPort) _C_ FrameCounter);
if (NetConnectRunning == 2) { // client
@ -1585,7 +1582,9 @@ local void NetworkParseMenuPacket(const InitMessage *msg, int size)
}
switch(NetLocalState) {
case ccs_disconnected:
IfDebug(
ClientParseDisconnected(msg);
);
break;
case ccs_detaching:
@ -1692,33 +1691,27 @@ local void NetworkParseMenuPacket(const InitMessage *msg, int size)
**
** @param buf Packet received
** @param size size of the received packet.
**
** @return 1 if packet is an InitConfig message, 0 otherwise
*/
global void NetworkParseSetupEvent(const char *buf, int size)
global int NetworkParseSetupEvent(const char *buf, int size)
{
NetworkPacket *packet;
const InitMessage *msg = (const InitMessage *)buf;
if (InterfaceState == IfaceStateMenu && NetConnectRunning) {
NetworkParseMenuPacket((const InitMessage *)buf, size);
return;
if (msg->Type > MessageInitConfig || size != sizeof(*msg)) {
if (NetConnectRunning == 2 && NetLocalState == ccs_started) {
// Client has acked ready to start and receives first real network packed.
// This indicates game has been started by server, so do the same for client.
NetConnectRunning = 0; // End the menu..
}
DebugLevel3Fn("Wrong message\n");
return 0;
}
packet = (NetworkPacket *)buf;
if (packet->Commands[0].Type == MessageInitConfig
&& size == sizeof(InitMessage)) {
Acknowledge acknowledge;
DebugLevel0Fn("Received late clients\n");
// Acknowledge the packets.
acknowledge.Type = MessageInitReply;
size = NetSendUDP(NetworkFildes, NetLastHost, NetLastPort, &acknowledge,
sizeof(acknowledge));
DebugLevel0Fn("Sending config ack (%d)\n" _C_ size);
return;
}
if (packet->Commands[0].Type == MessageInitReply) {
DebugLevel0Fn("late init reply\n");
return;
if (InterfaceState == IfaceStateMenu) {
NetworkParseMenuPacket(msg);
return 1;
}
return 0;
}
//@}

View file

@ -635,9 +635,9 @@ global void NetworkEvent(void)
//
// Setup messages
//
if (packet->Commands[0].Type <= MessageInitConfig) {
NetworkParseSetupEvent(buf, i);
return;
if (NetConnectRunning) {
if (NetworkParseSetupEvent(buf, i))
return;
}
//
@ -647,6 +647,7 @@ global void NetworkEvent(void)
DebugLevel0Fn("Bad packet\n");
return;
}
for (i = 0; i < HostsCount; ++i) {
if (Hosts[i].Host == NetLastHost && Hosts[i].Port == NetLastPort) {
break;