X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest%2Fcmdline_backend.c;fp=Tools%2FNetTest%2Fcmdline_backend.c;h=f95895aac0da848d44ba5fe14177a1f71ee0c36e;hb=d2f1a4c62225533351551870cbe44d94a4ec4fab;hp=0000000000000000000000000000000000000000;hpb=f08ffb4a09855859328b73127ad5a62505564612;p=tpg%2Facess2.git diff --git a/Tools/NetTest/cmdline_backend.c b/Tools/NetTest/cmdline_backend.c new file mode 100644 index 00000000..f95895aa --- /dev/null +++ b/Tools/NetTest/cmdline_backend.c @@ -0,0 +1,62 @@ +/* + */ +#define DEBUG 1 +#include "cmdline.h" +#include "tcpserver.h" +#include +#include +#include + +// === PROTOTYES === +void Cmdline_Backend_Thread(void *unused); + +// === GLOBALS === +tThread *gpCmdline_WorkerThread; +tNetTest_TCPServer *gpCmdline_TCPEchoServer; + +// === CODE === +void Cmdline_Backend_StartThread(void) +{ + ASSERT(!gpCmdline_WorkerThread); + gpCmdline_WorkerThread = Proc_SpawnWorker(Cmdline_Backend_Thread, NULL); +} + +void Cmdline_Backend_Thread(void *unused) +{ + Threads_SetName("Cmdline Worker"); + for( ;; ) + { + fd_set rfd, wfd, efd; + int max = -1; + + FD_ZERO(&rfd); + + LOG("gpCmdline_TCPEchoServer = %p", gpCmdline_TCPEchoServer); + if(gpCmdline_TCPEchoServer) + max = MAX(max, NetTest_TCPServer_FillSelect(gpCmdline_TCPEchoServer, &rfd)); + + memcpy(&wfd, &rfd, sizeof(rfd)); + memcpy(&efd, &rfd, sizeof(rfd)); + + LOG("max = %i", max); + int rv = VFS_Select(max+1, &rfd, &wfd, &efd, NULL, THREAD_EVENT_USER1, true); + LOG("rv = %i", rv); + + if(gpCmdline_TCPEchoServer) + NetTest_TCPServer_HandleSelect(gpCmdline_TCPEchoServer, &rfd, &wfd, &efd); + } +} + +void Cmdline_Backend_StartEchoServer(int Port) +{ + if(gpCmdline_TCPEchoServer) + { + // Oops, two + } + else + { + gpCmdline_TCPEchoServer = NetTest_TCPServer_Create(Port); + Log_Debug("Cmdline", "Echo Server = %p", gpCmdline_TCPEchoServer); + Threads_PostEvent(gpCmdline_WorkerThread, THREAD_EVENT_USER1); + } +}