ea6fa63e7e221f6c608c899defec14427f7aa251
[tpg/acess2.git] / Tools / NetTest / cmdline_backend.c
1 /*
2  */
3 #define DEBUG   1
4 #include "cmdline.h"
5 #include "tcpserver.h"
6 #include <vfs_ext.h>
7 #include <threads.h>
8 #include <events.h>
9
10 // === PROTOTYES ===
11 void    Cmdline_Backend_Thread(void *unused);
12
13 // === GLOBALS ===
14 tThread *gpCmdline_WorkerThread;
15 tNetTest_TCPServer      *gpCmdline_TCPEchoServer;
16
17 // === CODE ===
18 void Cmdline_Backend_StartThread(void)
19 {
20         ASSERT(!gpCmdline_WorkerThread);
21         gpCmdline_WorkerThread = Proc_SpawnWorker(Cmdline_Backend_Thread, NULL);
22 }
23
24 void Cmdline_Backend_Thread(void *unused)
25 {
26         Threads_SetName("Cmdline Worker");
27         for( ;; )
28         {
29                 fd_set  rfd, wfd, efd;
30                  int    max = -1;
31                 
32                 FD_ZERO(&rfd);
33                 FD_ZERO(&wfd);
34                 
35                 LOG("gpCmdline_TCPEchoServer = %p", gpCmdline_TCPEchoServer);
36                 if(gpCmdline_TCPEchoServer)
37                         max = MAX(max, NetTest_TCPServer_FillSelect(gpCmdline_TCPEchoServer, &rfd));
38                 
39                 //memcpy(&wfd, &rfd, sizeof(rfd));
40                 memcpy(&efd, &rfd, sizeof(rfd));
41                 
42                 LOG("max = %i", max);
43                 int rv = VFS_Select(max+1, &rfd, &wfd, &efd, NULL, THREAD_EVENT_USER1, false);
44                 LOG("rv = %i", rv);
45                 
46                 if(gpCmdline_TCPEchoServer)
47                         NetTest_TCPServer_HandleSelect(gpCmdline_TCPEchoServer, &rfd, &wfd, &efd);
48         }
49 }
50
51 void Cmdline_Backend_StartEchoServer(int Port)
52 {
53         if(gpCmdline_TCPEchoServer)
54         {
55                 // Oops, two
56         }
57         else
58         {
59                 gpCmdline_TCPEchoServer = NetTest_TCPServer_Create(Port);
60                 Log_Debug("Cmdline", "Echo Server = %p", gpCmdline_TCPEchoServer);
61                 Threads_PostEvent(gpCmdline_WorkerThread, THREAD_EVENT_USER1);
62         }
63 }

UCC git Repository :: git.ucc.asn.au