// === IMPORTS ===
extern tRequestHeader *SyscallRecieve(tRequestHeader *Request, int *ReturnLength);
extern int Threads_CreateRootProcess(void);
+extern void Threads_SetThread(int TID);
// HACK: Should have these in a header
extern void Log_Debug(const char *Subsys, const char *Message, ...);
extern void Log_Notice(const char *Subsys, const char *Message, ...);
tClient *Server_GetClient(int ClientID);
int Server_WorkerThread(void *ClientPtr);
int SyscallServer(void);
+ int Server_ListenThread(void *Unused);
// === GLOBALS ===
#ifdef __WIN32__
int gSocket = INVALID_SOCKET;
#endif
tClient gaServer_Clients[MAX_CLIENTS];
+SDL_Thread *gpServer_ListenThread;
// === CODE ===
int Server_GetClientID(void)
cur_client_id = Client->ClientID;
}
- Log_Debug("AcessSrv", "Worker %i takes %p",
- Client->ClientID, Client->CurrentRequest);
-
// Get the response
retHeader = SyscallRecieve(Client->CurrentRequest, &retSize);
+
+ Log_Debug("AcessSrv", "Client %i request %i",
+ Client->ClientID, Client->CurrentRequest->CallID);
+
if( !retHeader ) {
// Return an error to the client
#endif
Log_Notice("AcessSrv", "Listening on 0.0.0.0:%i", SERVER_PORT);
-
+ gpServer_ListenThread = SDL_CreateThread( Server_ListenThread, NULL );
+ return 0;
+}
+
+int Server_ListenThread(void *Unused)
+{
// Wait for something to do :)
for( ;; )
{
ntohl(addr.sin_addr.s_addr), ntohs(addr.sin_port));
client = Server_GetClient(req->ClientID);
- if( req->ClientID == 0 )
+ // NOTE: Hack - Should check if all zero
+ if( req->ClientID == 0 || client->ClientAddr.sin_port == 0 )
{
memcpy(&client->ClientAddr, &addr, sizeof(addr));
}
SDL_CondSignal(client->WaitFlag);
#endif
}
-
return -1;
}