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();
    }
}
Ejemplo n.º 2
0
	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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
		}
	}
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
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;
}
Ejemplo n.º 9
0
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;
		}
	}
}