void CP2PServiceModule::RunMessageLoop() { #if defined(_DEBUG) _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); CKLog::SetDebugType( LOG_TYPE_DEBUG); #else CKLog::SetDebugType( LOG_TYPE_WARNING); #endif char szServiceName[256]; ::LoadString( NULL, IDS_SERVICENAME, szServiceName, sizeof(szServiceName)); ChangeServiceStartType( szServiceName, SERVICE_AUTO_START); TCHAR szClient_Mutex[] = _T("PPVOD_MUTEX_K_1.0"); if ( ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, szClient_Mutex) ) return; ::CreateMutex(0, FALSE, szClient_Mutex); g_socketClientMgr.Connect(); bool bListen = false; UINT uPort = 81; for ( int i = 1; i < 20; i ++ ) { g_server.setPort( uPort); if ( g_server.create( string("P2PLocalService"), string("C:\\") ) ) { bListen = true; break; } uPort += i; } HttpResponse::setServer( g_server ); if ( bListen ) { // 设置共享内存监听端口为 uPort CRegKey reg; LPCTSTR lpszKey = "SOFTWARE\\P2PService_K"; if ( reg.Open( HKEY_LOCAL_MACHINE, lpszKey ) == ERROR_SUCCESS ) { TCHAR szAppPath[MAX_PATH]; ULONG ulLen = sizeof( szAppPath ); if ( reg.SetDWORDValue( "ListenPort", uPort ) == ERROR_SUCCESS ) { } reg.Close(); } SetTimer( NULL, CHECK_SERVER_TIMER, 1000, NULL); MSG msg; while( GetMessage(&msg, NULL, 0, 0 )) { switch( msg.message) { case WM_TIMER: OnCheckTimer( 0, 0); break; default: break; } TranslateMessage(&msg); DispatchMessage(&msg); } KillTimer( NULL, CHECK_SERVER_TIMER); } g_server.stop(); SetServiceStatus(SERVICE_STOPPED); }