int _tmain(int argc, _TCHAR* argv[]) { try { LoadConfig(); boost::asio::io_service io_service; APP_EVENT("Application Start"); // Initialise server. http::server::server s(io_service); if ( ! s.start() ) { APP_ERROR("Http Tips Server Start Error"); return 0; } APP_ERROR("Application Start Succeed"); // Set console control handler to allow server to be stopped. console_ctrl_function = boost::bind(&http::server::server::stop, &s); SetConsoleCtrlHandler(console_ctrl_handler, TRUE); // Run the server until stopped. io_service.run(); } catch (std::exception& e) { std::cerr << "exception: " << e.what() << "\n"; } return 0; }
BOOL CXdllApp::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_ACTIVATE) { APP_EVENT("CXdllApp::PreTranslateMessage WM_ACTIVATE"); } return CWinApp::PreTranslateMessage(pMsg); }
//--------------------------------------------------------------------------------- // Name: enter() //--------------------------------------------------------------------------------- void GameplayState::enter(App * app) { initState(); BATTLE_CITY->loadMap( getNextMapNum() ); setMapFrame(); resetGame(); incTimesPlayed(); APP_EVENT( GAME_STARTED ); }
LiveAppModuleImpl::~LiveAppModuleImpl() { APP_EVENT("destruct LiveAppModuleImpl begin " << this); m_LogClient->DoSaveLog(m_streamBuffer->GetStatistics(), *m_Manager, *m_ipPool); m_LogClient->SendLog(); m_timer.stop(); if (m_StunTypeResolver) { m_StunTypeResolver->Cancel(); m_StunTypeResolver.reset(); } // 注意创建/启动/删除的顺序,PeerManager依赖于StreamBuffer m_mediaServer.reset(); APP_EVENT("LiveAppModuleImpl::~LiveAppModuleImpl delete mediaserver"); m_tracker.reset(); APP_EVENT("LiveAppModuleImpl::~LiveAppModuleImpl delete tracker"); m_streamBuffer.reset(); APP_EVENT("LiveAppModuleImpl::~LiveAppModuleImpl delete streambuffer"); m_Manager.reset(); APP_EVENT("LiveAppModuleImpl::~LiveAppModuleImpl delete peermanager"); APP_EVENT("destruct LiveAppModuleImpl end " << this); TRACE(TEXT("destruct LiveAppModuleImpl end %p\n"), this); TEST_LOG_OUT_ONCE("live end."); }
bool LiveAppModuleImpl::DispatchUdpPacket(BYTE* data, int size, const InetSocketAddress& remoteSockAddr, UINT proxyType, ExtraProxyEnum extraProxy) { m_Statistics.TotalFlow.Download.Record( size ); const size_t totalDataSize = size; APP_EVENT( "DispatchUdpPacket " << make_buffer_pair(data, size) << " from " << remoteSockAddr );//<< " " << HexEncoding::Encode(string((const char*)data, size)) ); //BYTE* rawData = data; //size_t rawSize = size; this->RecordDownload(size); SimpleSocketAddress sockAddr(remoteSockAddr); if ((size_t) size >= sizeof( OLD_UDP_PACKET_HEAD ) + sizeof( GUID ) ) { #ifndef _PPL_TEMP_DISABLE_TRACKER PacketInputStream is( data, size ); // 可能是老报文,尝试由tracker模块处理 if (m_tracker->TryHandleResponse( is, remoteSockAddr, (BYTE)proxyType )) { m_trackerFlow.Download.Record(size); return true; } #endif } // 解混淆 int len = PacketObfuscator::UnObfuscate( reinterpret_cast<BYTE*>( data ), size ); if ( len <= 0 ) { // 解混淆失败,可能是vod的报文 if ( VODProxy::HandlePacket( data, size, remoteSockAddr, m_BootModule.get(), m_StunModule.get() ) ) { return true; } m_Statistics.TotalInvalidPackets++; if ( size >= 3 ) { VIEW_ERROR( "LiveAppModuleImpl::DispatchUdpPacket unshuffle failed 1 " << make_tuple( size, len ) << sockAddr << " action=" << strings::format( "0x%02X%02X 0x%02X", data[0], data[1], data[2] ) ); } else { VIEW_ERROR( "LiveAppModuleImpl::DispatchUdpPacket unshuffle failed 1 " << make_tuple( size, len ) << sockAddr ); } //LIVE_ASSERT( false ); return false; } if ( size < len ) { m_Statistics.TotalInvalidPackets++; VIEW_ERROR( "LiveAppModuleImpl::DispatchUdpPacket unshuffle failed 2 " << make_tuple( size, len ) << sockAddr ); return false; } // 截去混淆部分的头,取出真正的报文部分 data += len; size -= len; PacketInputStream is( data, size ); NEW_UDP_PACKET_HEAD head; is >> head; if ( !is ) { m_Statistics.TotalInvalidPackets++; VIEW_ERROR( "LiveAppModuleImpl::DispatchUdpPacket invalid 2 " << size << " " << sockAddr ); return false; } if ( head.ProtocolVersion < SYNACAST_VERSION_3 ) { m_Statistics.TotalInvalidPackets++; // 检查版本号与MAGIC APP_ERROR("Invalid protocol version " << head.ProtocolVersion << " " << sockAddr); return false; } UDPT_INFO("LiveAppModuleImpl::DispatchUdp "<<sockAddr << " " << (int)head.Action); // session 处理完 if ( head.Action & PPL_P2P_CONNECTION_ACTION_FLAG ) { UDP_SESSION_INFO sessionInfo; is >> sessionInfo; if ( !is ) { m_Statistics.TotalInvalidPackets++; APP_ERROR("Invalid session size " << size << " " << sockAddr); return false; } bool res = m_Manager->HandleUDPSessionPacket(is, head, sessionInfo, sockAddr); if ( false == res ) { m_Statistics.TotalInvalidPackets++; } else { m_Statistics.UDPConnectionFlow.Download.Record(totalDataSize); } return res; }