[chocolate-doom] 05/79: Working client connect code

Jonathan Dowland jmtd at moszumanska.debian.org
Mon Jan 30 15:07:19 UTC 2017


This is an automated email from the git hooks/post-receive script.

jmtd pushed a commit to annotated tag chocolate-doom-0.1.3
in repository chocolate-doom.

commit f459280f965b6e737466e2e250226aa809627c13
Author: Simon Howard <fraggle at gmail.com>
Date:   Thu Dec 29 21:29:55 2005 +0000

    Working client connect code
    
    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 233
---
 src/net_client.c | 165 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 src/net_client.h |   7 ++-
 src/net_loop.c   |  12 +++-
 src/net_server.c |   7 ++-
 4 files changed, 165 insertions(+), 26 deletions(-)

diff --git a/src/net_client.c b/src/net_client.c
index 2abc5ac..639f609 100644
--- a/src/net_client.c
+++ b/src/net_client.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.c 232 2005-12-29 17:48:25Z fraggle $
+// $Id: net_client.c 233 2005-12-29 21:29:55Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/12/29 21:29:55  fraggle
+// Working client connect code
+//
 // Revision 1.1  2005/12/29 17:48:25  fraggle
 // Add initial client/server connect code.  Reorganise sources list in
 // Makefile.am.
@@ -38,15 +41,130 @@
 #include "net_packet.h"
 #include "net_server.h"
 
+typedef enum
+{
+    // sent a syn, not received an ack yet
+
+    CLIENT_STATE_CONNECTING,
+
+    // waiting for the game to start
+
+    CLIENT_STATE_WAITING_START,
+
+    // in game
+
+    CLIENT_STATE_IN_GAME,
+} net_clientstate_t;
+
+static net_clientstate_t client_state;
 static net_addr_t *server_addr;
 static net_context_t *client_context;
+static int last_send_time;
+
+// parse a received packet
+
+static void ClientParsePacket(net_packet_t *packet)
+{
+    unsigned int packet_type;
+
+    if (!NET_ReadInt16(packet, &packet_type))
+    {
+        return;
+    }
+
+    switch (packet_type)
+    {
+        case NET_PACKET_TYPE_ACK:
+
+            // received an acknowledgement to the SYN we sent
+
+            if (client_state == CLIENT_STATE_CONNECTING)
+            {
+                client_state = CLIENT_STATE_WAITING_START;
+            }
+            break;
+
+        case NET_PACKET_TYPE_GAMESTART:
+            break;
+
+        case NET_PACKET_TYPE_GAMEDATA:
+            break;
+        default:
+            break;
+    }
+}
+
+// called when we are in the "connecting" state
+
+static void ClientConnecting(void)
+{
+    net_packet_t *packet;
+
+    // send a SYN packet every second
+
+    if (last_send_time < 0 || I_GetTimeMS() - last_send_time > 1000)
+    {
+        // construct a SYN packet
+
+        packet = NET_NewPacket(10);
+
+        // packet type
+     
+        NET_WriteInt16(packet, NET_PACKET_TYPE_SYN);
+
+        // magic number
+
+        NET_WriteInt32(packet, NET_MAGIC_NUMBER);
+
+        // send to the server
+
+        NET_SendPacket(server_addr, packet);
+
+        NET_FreePacket(packet);
+
+        last_send_time = I_GetTimeMS();
+    }
+}
+
+// "Run" the client code: check for new packets, send packets as
+// needed
+
+void NET_ClientRun(void)
+{
+    net_addr_t *addr;
+    net_packet_t *packet;
+    
+    while (NET_RecvPacket(client_context, &addr, &packet))
+    {
+        // only accept packets from the server
+
+        if (addr == server_addr)
+        {
+            ClientParsePacket(packet);
+        }
+
+        NET_FreePacket(packet);
+    }
+
+    // send packets as needed
+
+    switch (client_state)
+    {
+        case CLIENT_STATE_CONNECTING:
+            ClientConnecting();
+            break;
+        case CLIENT_STATE_WAITING_START:
+            break;
+        case CLIENT_STATE_IN_GAME:
+            break;
+    }
+}
 
 // connect to a server
 
 boolean NET_ClientConnect(net_addr_t *addr)
 {
-    net_packet_t *packet;
-    int last_send_time = -1;
+    int start_time;
 
     server_addr = addr;
 
@@ -66,33 +184,42 @@ boolean NET_ClientConnect(net_addr_t *addr)
 
     // try to connect
  
-    // construct a SYN packet
+    client_state = CLIENT_STATE_CONNECTING;
+    last_send_time = -1;
 
-    packet = NET_NewPacket(10);
-
-    // packet type
- 
-    NET_WriteInt16(packet, NET_PACKET_TYPE_SYN);
+    start_time = I_GetTimeMS();
 
-    // magic number
-
-    NET_WriteInt32(packet, NET_MAGIC_NUMBER);
-
-    while (true)
+    while (client_state == CLIENT_STATE_CONNECTING)
     {
-        if (I_GetTime() - last_send_time > 35)
-        {
-            // resend packet
+        // time out after 5 seconds 
 
-            NET_SendPacket(addr, packet);
-            last_send_time = I_GetTime();
+        if (I_GetTime() - start_time > 5000)
+        {
+            break;
         }
 
+        // run client code
+
+        NET_ClientRun();
+        
         // run the server, just incase we are doing a loopback
         // connect
 
         NET_ServerRun();
     }
+
+    if (client_state != CLIENT_STATE_CONNECTING)
+    {
+        // connected ok!
+
+        return true;
+    }
+    else
+    {
+        // failed to connect
+        
+        return false;
+    }
 }
 
 
diff --git a/src/net_client.h b/src/net_client.h
index 086d8c6..5823627 100644
--- a/src/net_client.h
+++ b/src/net_client.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_client.h 232 2005-12-29 17:48:25Z fraggle $
+// $Id: net_client.h 233 2005-12-29 21:29:55Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/12/29 21:29:55  fraggle
+// Working client connect code
+//
 // Revision 1.1  2005/12/29 17:48:25  fraggle
 // Add initial client/server connect code.  Reorganise sources list in
 // Makefile.am.
@@ -34,7 +37,7 @@
 
 #include "net_defs.h"
 
-boolean NET_ClietConnect(net_addr_t *addr);
+boolean NET_ClientConnect(net_addr_t *addr);
 
 #endif /* #ifndef NET_CLIENT_H */
 
diff --git a/src/net_loop.c b/src/net_loop.c
index 5dc3bbf..f6b128c 100644
--- a/src/net_loop.c
+++ b/src/net_loop.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_loop.c 229 2005-10-30 19:56:15Z fraggle $
+// $Id: net_loop.c 233 2005-12-29 21:29:55Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/12/29 21:29:55  fraggle
+// Working client connect code
+//
 // Revision 1.1  2005/10/30 19:56:15  fraggle
 // Add foundation code for the new networking system
 //
@@ -99,7 +102,6 @@ static net_packet_t *QueuePop(packet_queue_t *queue)
 static boolean NET_CL_InitClient(void)
 {
     QueueInit(&client_queue);
-    client_addr.module = &net_loop_client_module;
 
     return true;
 }
@@ -125,6 +127,7 @@ static boolean NET_CL_RecvPacket(net_addr_t **addr, net_packet_t **packet)
     {
         *packet = popped;
         *addr = &client_addr;
+        client_addr.module = &net_loop_client_module;
         
         return true;
     }
@@ -143,6 +146,8 @@ static void NET_CL_FreeAddress(net_addr_t *addr)
 
 static net_addr_t *NET_CL_ResolveAddress(char *address)
 {
+    client_addr.module = &net_loop_client_module;
+
     return &client_addr;
 }
 
@@ -172,7 +177,6 @@ static boolean NET_SV_InitClient(void)
 static boolean NET_SV_InitServer(void)
 {
     QueueInit(&server_queue);
-    server_addr.module = &net_loop_server_module;
 
     return true;
 }
@@ -192,6 +196,7 @@ static boolean NET_SV_RecvPacket(net_addr_t **addr, net_packet_t **packet)
     {
         *packet = popped;
         *addr = &server_addr;
+        server_addr.module = &net_loop_server_module;
         
         return true;
     }
@@ -210,6 +215,7 @@ static void NET_SV_FreeAddress(net_addr_t *addr)
 
 static net_addr_t *NET_SV_ResolveAddress(char *address)
 {
+    server_addr.module = &net_loop_server_module;
     return &server_addr;
 }
 
diff --git a/src/net_server.c b/src/net_server.c
index db44d53..82ba8ec 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: net_server.c 232 2005-12-29 17:48:25Z fraggle $
+// $Id: net_server.c 233 2005-12-29 21:29:55Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -21,6 +21,9 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.2  2005/12/29 21:29:55  fraggle
+// Working client connect code
+//
 // Revision 1.1  2005/12/29 17:48:25  fraggle
 // Add initial client/server connect code.  Reorganise sources list in
 // Makefile.am.
@@ -80,7 +83,7 @@ static void NET_ServerParseSYN(net_packet_t *packet,
 
     // read the magic number
 
-    if (!NET_ReadInt16(packet, &magic))
+    if (!NET_ReadInt32(packet, &magic))
     {
         return;
     }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/chocolate-doom.git



More information about the Pkg-games-commits mailing list