void CKortideRemoteService::InitServerSocket() { ECode ec = NOERROR; do { ec = CServerSocket::New(LANPORT, (IServerSocket**)&mLanServerSocket); if (FAILED(ec)) break; ec = CServerSocket::New(NETPORT, (IServerSocket**)&mNetServerSocket); } while (0); if (FAILED(ec)) { Slogger::E(TAG, "ServerSocket init fail, retry"); // ex.printStackTrace(); SystemClock::Sleep(SLEEPTIME_MS); sRetryCounter++; if (sRetryCounter <= RETRYMAX) { InitServerSocket(); } else { Slogger::E(TAG, "Stop init ServerSocket"); sRetryCounter = 0; } return; } if (mLanServerSocket != NULL && mLanCmdListener == NULL) { mLanCmdListener = new RemoteCmdListener(mContext, mLanServerSocket); mLanCmdListener->Start(); } if (mNetServerSocket != NULL && mNetCmdListener == NULL) { mNetCmdListener = new RemoteCmdListener(mContext, mNetServerSocket); mNetCmdListener->Start(); } }
NETWORK_ERROR_CODE TcpNetwork::Init(const ServerConfig* pConfig, ServerLog* pLogger) { memcpy(&m_Config, pConfig, sizeof(ServerConfig)); m_pRefLogger = pLogger; auto initRet = InitServerSocket(); if (initRet != NETWORK_ERROR_CODE::NONE) { return initRet; } auto bindListenRet = BindListen(pConfig->port, pConfig->backLogCount); if (bindListenRet != NETWORK_ERROR_CODE::NONE) { return bindListenRet; } FD_ZERO(&m_Readfds); FD_SET(m_ServerSockfd, &m_Readfds); CreateSessionPool(pConfig->maxClientCount + pConfig->extraClientCount); return NETWORK_ERROR_CODE::NONE; }
ECode CKortideRemoteService::constructor( /* [in] */ IContext* context) { mContext = context; AutoPtr<ISystemProperties> systemProperties; CSystemProperties::AcquireSingleton((ISystemProperties**)&systemProperties); systemProperties->Get(String("ro.product.name"), String("KortideDevice"), &mDevName); mLanDispatcher = new LanDispatcher(mContext); mLanDispatcher->Start(); InitServerSocket(); if (DBG) Slogger::D(TAG, "constructor %s", mDevName.string()); return NOERROR; }
UINT WINAPI LoadAccountRecords(LPVOID lpParameter) { //InsertLogMsg(IDS_LOADACCOUNTRECORDS); //下面这一段是获取服务器相关消息的,暂时屏蔽掉 //CRecordset *pRec = GetDBManager()->CreateRecordset(); //pRec->Execute( "UPDATE TBL_ACCOUNT SET FLD_CERTIFICATION=0 WHERE FLD_CERTIFICATION >= 30" ); //GetDBManager()->DestroyRecordset( pRec ); //// ---------------------------------------------------------------------------------------- //GAMESERVERINFO *pServerInfo; //pRec = GetDBManager()->CreateRecordset(); //if ( pRec->Execute( "SELECT * FROM TBL_SERVERINFO" ) ) //{ // while ( pRec->Fetch() ) // { // pServerInfo = new GAMESERVERINFO; // if ( !pServerInfo ) // break; // pServerInfo->index = atoi( pRec->Get( "FLD_SERVERIDX" ) ); // strcpy( pServerInfo->name, pRec->Get( "FLD_SERVERNAME" ) ); // strcpy( pServerInfo->ip, pRec->Get( "FLD_SERVERIP" ) ); // pServerInfo->connCnt = 0; // g_xGameServerList.AddNewNode( pServerInfo ); // } //} //GetDBManager()->DestroyRecordset( pRec ); GAMESERVERINFO *pServerInfo; char szTmp[64]; for ( PLISTNODE pNode = g_xGameServerList.GetHead(); pNode; pNode = g_xGameServerList.GetNext( pNode ) ) { pServerInfo = g_xGameServerList.GetData( pNode ); sprintf( szTmp, "%d,%s,", pServerInfo->index, pServerInfo->name ); strcat( g_szServerList, szTmp ); } // ---------------------------------------------------------------------------------------- InitServerThreadForMsg(); if (InitServerSocket(g_gcSock, &g_gcAddr, _IDM_GATECOMMSOCK_MSG, 5500, 1)) SwitchMenuItem(TRUE); return 0L; }
void OnCommand(WPARAM wParam, LPARAM lParam) { int nPort; switch (LOWORD(wParam)) { case IDM_STARTSERVICE: { g_fTerminated = FALSE; if (!jRegGetKey(_DB_SERVER_REGISTRY, _TEXT("LocalPort"), (LPBYTE)&nPort)) nPort = 5000; LoadCharacterRecords(); InitServerSocket(g_ssock, &g_saddr, _IDM_GATECOMMSOCK_MSG, 6000, 1); InitGateCommSocket(g_gssock, &g_gsaddr, _IDM_GATECOMMSOCK_MSG, 5100, FD_ACCEPT|FD_READ|FD_CLOSE); UINT dwThreadIDForMsg = 0; unsigned long hThreadForMsg = 0; // if (hThreadForMsg = _beginthreadex(NULL, 0, ProcessUserHuman, NULL, 0, &dwThreadIDForMsg)) hThreadForMsg = _beginthreadex(NULL, 0, ProcessDBMsg, NULL, 0, &dwThreadIDForMsg); hThreadForMsg = _beginthreadex(NULL, 0, ProcessGateMsg, NULL, 0, &dwThreadIDForMsg); SwitchMenuItem(TRUE); return; } case IDM_STOPSERVICE: { g_fTerminated = TRUE; SwitchMenuItem(FALSE); return; } case IDM_CONFIG: { DialogBox(g_hInst, MAKEINTRESOURCE(IDD_CONFIGDLG), NULL, (DLGPROC)ConfigDlgFunc); return; } } }
UINT WINAPI LoadAccountRecords(LPVOID lpParameter) { //获取服务器列表的 GAMESERVERINFO *pServerInfo; char szTmp[64]; for ( PLISTNODE pNode = g_xGameServerList.GetHead(); pNode; pNode = g_xGameServerList.GetNext( pNode ) ) { pServerInfo = g_xGameServerList.GetData( pNode ); sprintf( szTmp, "%d,%s,", pServerInfo->index, pServerInfo->name ); strcat( g_szServerList, szTmp ); } // ---------------------------------------------------------------------------------------- //服务器线程 InitServerThreadForMsg(); ENGINE_COMPONENT_INFO info = g_SeverConfig.getLoginSrvInfo(); if (InitServerSocket(g_gcSock, &g_gcAddr, _IDM_GATECOMMSOCK_MSG, info.intport?info.intport:5500, 1)) SwitchMenuItem(TRUE); return 0L; }
int main () { GetFileTypeForExtension(""); InitMemory(); printf("Staring server... \n"); // int RequestBufferSize = 1000000; // char *RequestBuffer = (char*)malloc(RequestBufferSize); // ZeroMemory(RequestBuffer, RequestBufferSize); socket_handle ServerSocket = INVALID_SOCKET; socket_handle ConnectionSocket = INVALID_SOCKET; InitServerSocket(&ServerSocket); while (TRUE) { ClearMemory(); s32 BufferSize = KiloBytes(1); char *Buffer = PushMemory(BufferSize); ConnectionSocket = accept(ServerSocket, NULL, NULL); if (ConnectionSocket == INVALID_SOCKET) { printf("Accept failed \n"); } int RequestBytes = recv(ConnectionSocket, Buffer, BufferSize, 0); if (RequestBytes > 0) { // printf("Request bytes: %i \nRequest: %s \n", RecvResult, RequestBuffer); server_request ServerRequest = {0}; ServerRequest.Request = Buffer; char *t; while (t = ReadToken(&ServerRequest)) { if (!strcmp(t, "GET")) { char *t1 = ReadToken(&ServerRequest); ServerRequest.Get = t1; } if (!strcmp(t, "Host:")) { char *t1 = ReadToken(&ServerRequest); ServerRequest.Host = t1; } // printf("t: %s \n", t); } printf("Request: "); printf(ServerRequest.Get); printf("\n"); #define Headers "HTTP/1.1 %i OK\r\n"\ "Date: %s\r\n"\ "Server: Linux\r\n"\ "Accept-Ranges: none\r\n"\ "Content-Type: %s\r\n"\ "Content-Length: %i\r\n"\ "Connection: close\r\n"\ "\r\n""\0" char *Output = PushMemory(KiloBytes(20)); if (ServerRequest.Get[0] == '/') { ++ServerRequest.Get; } file_data FileData; char *FileName; if (*ServerRequest.Get) { FileName = ServerRequest.Get; } else { FileName = "index.html"; } time_t tm; time(&tm); char *Date = PushMemory(KiloBytes(1)); strftime(Date, KiloBytes(1), "%a, %d %b %Y %X GMT", localtime(&tm)); char *Ext = strrchr(FileName, '.'); if (!Ext) { char *fn = PushMemory(strlen(FileName) + 6); //FileName = fn; strcat(fn, FileName); strcat(fn, ".html\0"); if (FExists(fn)) { FileName = fn; } } FileData = FRead(FileName); // TODO: handle video files if (FileData.Data && strcmp(FileName, "404.html") && strcmp(FileName, "404")) { // char *Ext = PathFindExtensionA(FileName); char *Ext = strrchr(FileName, '.'); char *HttpFileType; HttpFileType = GetFileTypeForExtension(Ext + 1); if (!HttpFileType) { HttpFileType = "text/html"; } sprintf(Output, Headers, 200, Date, HttpFileType, FileData.Size); // memcpy(Output + strlen(Output), FileData.Data, FileData.Size); int SendResult; s32 HeaderBytesSent = send(ConnectionSocket, Output, strlen(Output), 0); s32 DataBytesSent = send(ConnectionSocket, FileData.Data, FileData.Size, 0); printf("HeaderBytesSent: %i \n", HeaderBytesSent); printf("DataBytesSent: %i \n", DataBytesSent); if (SendResult == SOCKET_ERROR) { printf("Send to client failed \n"); } // SendResult = send(ConnectionSocket, FileData.Data, FileData.Size, 0); if (SendResult == SOCKET_ERROR) { printf("Send to client failed \n"); } #if 0 FILE *f; f = fopen("assets/test.bmp", "w"); if (f) { fwrite(FileData.Data, sizeof(char), FileData.Size, f); fclose(f); } #endif } else { // char *PageNotFoundText = "<h1>Page not found</h1>"; file_data File404 = FRead("404.html"); if (File404.Data) { sprintf(Output, Headers, 404, Date, "text/html", File404.Size); int SendResult = send(ConnectionSocket, Output, strlen(Output), 0); send(ConnectionSocket, File404.Data, File404.Size, 0); if (SendResult == SOCKET_ERROR) { printf("Send to client failed \n"); } } } closesocket(ConnectionSocket); } else { closesocket(ConnectionSocket); } } system("pause"); return 0; }
LPARAM OnClientSockMsg(WPARAM wParam, LPARAM lParam) { switch (WSAGETSELECTEVENT(lParam)) { case FD_CONNECT: { if (CheckSocketError(lParam)) { InsertLogMsg(IDS_CONNECT_DBSERVER); KillTimer(g_hMainWnd, _ID_TIMER_CONNECTSERVER); UINT dwThreadIDForMsg = 0; unsigned long hThreadForMsg = 0; // SetTimer(g_hMainWnd, _ID_TIMER_PROCESSUSERHUMAN, 1, (TIMERPROC)OnProcessUserHuman); if (hThreadForMsg = _beginthreadex(NULL, 0, ProcessLogin, NULL, 0, &dwThreadIDForMsg)) { // SetThreadPriority((HANDLE)hThreadForMsg, THREAD_PRIORITY_HIGHEST); hThreadForMsg = _beginthreadex(NULL, 0, ProcessUserHuman, NULL, 0, &dwThreadIDForMsg); hThreadForMsg = _beginthreadex(NULL, 0, ProcessMonster, NULL, 0, &dwThreadIDForMsg); hThreadForMsg = _beginthreadex(NULL, 0, ProcessNPC, NULL, 0, &dwThreadIDForMsg); } int nPort; if (!jRegGetKey(_GAME_SERVER_REGISTRY, _TEXT("LocalPort"), (LPBYTE)&nPort)) nPort = 5000; InitServerSocket(g_ssock, &g_saddr, _IDM_SERVERSOCK_MSG, nPort, 1); InsertLogMsg(IDS_STARTSERVICE); SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(0, 0), (LPARAM)_T("Ready")); } else { closesocket(g_csock); g_csock = INVALID_SOCKET; SetTimer(g_hMainWnd, _ID_TIMER_CONNECTSERVER, 10000, (TIMERPROC)OnTimerProc); } break; } case FD_CLOSE: { closesocket(g_csock); g_csock = INVALID_SOCKET; InsertLogMsg(IDS_DISCONNECT_DBSERVER); break; } case FD_READ: { char szPacket[8096]; int nRecv = recv((SOCKET)wParam, szPacket, sizeof(szPacket), 0); #ifdef _DEBUG _RPT1(_CRT_WARN, "ClientSockMsg[FD_READ]:%d\n", nRecv); #endif szPacket[nRecv] = '\0'; ProcReceiveBuffer(szPacket, nRecv); break; } } return 0L; }
void OnCommand(WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case IDM_STARTSERVICE: { //开始服务器 DWORD dwIP = 0; int nPort = 0; g_fTerminated = FALSE; g_pRandom.Random_Seed(0); //初始化等待ip ENGINE_COMPONENT_INFO info = g_SeverConfig.getLoginGateInfo(); nPort = info.extport?info.extport:7000; //初始化完成端口 InitServerSocket(g_ssock, &g_saddr, _IDM_SERVERSOCK_MSG, nPort, FD_ACCEPT); //初始化等待ip ENGINE_COMPONENT_INFO loginsrvinfo = g_SeverConfig.getLoginSrvInfo(); nPort = loginsrvinfo.intport?loginsrvinfo.intport:5500; //连接loginsrv ConnectToServer(g_csock, &g_caddr, _IDM_CLIENTSOCK_MSG, loginsrvinfo.intip.c_str(), dwIP, nPort, FD_CONNECT|FD_READ|FD_CLOSE); HMENU hMainMenu = GetMenu(g_hMainWnd); HMENU hMenu = GetSubMenu(hMainMenu, 0); EnableMenuItem(hMenu, IDM_STARTSERVICE, MF_GRAYED|MF_BYCOMMAND); EnableMenuItem(hMenu, IDM_STOPSERVICE, MF_ENABLED|MF_BYCOMMAND); SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STARTSERVICE, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0)); SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STOPSERVICE, (LPARAM)MAKELONG(TBSTATE_ENABLED, 0)); InsertLogMsg(IDS_STARTSERVICE); SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(0, 0), (LPARAM)_TEXT("Ready")); return; } case IDM_STOPSERVICE: { g_fTerminated = TRUE; /* if (g_hAcceptThread != INVALID_HANDLE_VALUE) { TerminateThread(g_hAcceptThread, 0); WaitForSingleObject(g_hAcceptThread, INFINITE); CloseHandle(g_hAcceptThread); g_hAcceptThread = INVALID_HANDLE_VALUE; } if (g_hMsgThread != INVALID_HANDLE_VALUE) { TerminateThread(g_hMsgThread, 0); WaitForSingleObject(g_hMsgThread, INFINITE); CloseHandle(g_hMsgThread); g_hMsgThread = INVALID_HANDLE_VALUE; } */ ClearSocket(g_ssock); ClearSocket(g_csock); CloseHandle(g_hIOCP); HMENU hMainMenu = GetMenu(g_hMainWnd); HMENU hMenu = GetSubMenu(hMainMenu, 0); EnableMenuItem(hMenu, IDM_STARTSERVICE, MF_ENABLED|MF_BYCOMMAND); EnableMenuItem(hMenu, IDM_STOPSERVICE, MF_GRAYED|MF_BYCOMMAND); SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STARTSERVICE, (LPARAM)MAKELONG(TBSTATE_ENABLED, 0)); SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STOPSERVICE, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0)); InsertLogMsg(IDS_STOPSERVICE); SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(0, 0), (LPARAM)_TEXT("Not Ready")); return; } // ORZ: case IDM_FONTCOLOR: SetFontColor(); return; case IDM_BACKCOLOR: SetBackColor(); return; case IDM_CONFIG: { DialogBox(g_hInst, MAKEINTRESOURCE(IDD_CONFIGDLG), g_hMainWnd, (DLGPROC)ConfigDlgFunc); return; } } }