bool ServerIf::Start() { if (!PrepareStart()) return false; try { for (auto& it : acceptors_) { it->Start(); } } catch (std::exception& e) { BB_ERROR_LOG("server[%s] start fail:%s", GetName().c_str(), e.what()); return false; } return FinishStart(); }
BOOL CUdpCast::Start(LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress) { if(!CheckParams() || !CheckStarting()) return FALSE; PrepareStart(); m_ccContext.Reset(); BOOL isOK = FALSE; HP_SOCKADDR bindAddr(AF_UNSPEC, TRUE); if(CreateClientSocket(lpszRemoteAddress, usPort, lpszBindAddress, bindAddr)) { if(BindClientSocket(bindAddr)) { if(FirePrepareConnect(m_soClient) != HR_ERROR) { if(ConnectToGroup(bindAddr)) { if(CreateWorkerThread()) { isOK = TRUE; } else SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED); } else SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED); } else SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); if(!isOK) { DWORD dwCode = ::GetLastError(); m_ccContext.Reset(FALSE); Stop(); ::SetLastError(dwCode); } return isOK; }
BOOL CTcpClient::Start(LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress, USHORT usLocalPort) { if(!CheckParams() || !CheckStarting()) return FALSE; PrepareStart(); m_ccContext.Reset(); BOOL isOK = FALSE; HP_SOCKADDR addrRemote, addrBind; if(CreateClientSocket(lpszRemoteAddress, addrRemote, usPort, lpszBindAddress, addrBind)) { if(BindClientSocket(addrBind, addrRemote, usLocalPort)) { if(TRIGGER(FirePrepareConnect(m_soClient)) != HR_ERROR) { if(ConnectToServer(addrRemote, bAsyncConnect)) { if(CreateWorkerThread()) isOK = TRUE; else SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED); } else SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ENSURE_ERROR_CANCELLED); } else SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); if(!isOK) { m_ccContext.Reset(FALSE); EXECUTE_RESTORE_ERROR(Stop()); } return isOK; }
BOOL CTcpServer::Start(LPCTSTR pszBindAddress, USHORT usPort) { if(!CheckParams() || !CheckStarting()) return FALSE; PrepareStart(); if(CreateListenSocket(pszBindAddress, usPort)) if(CreateCompletePort()) if(CreateWorkerThreads()) if(StartAccept()) { m_enState = SS_STARTED; return TRUE; } Stop(); return FALSE; }
BOOL CTcpAgent::Start(LPCTSTR lpszBindAddress, BOOL bAsyncConnect) { if(!CheckParams() || !CheckStarting()) return FALSE; PrepareStart(); if(ParseBindAddress(lpszBindAddress)) if(CreateCompletePort()) if(CreateWorkerThreads()) { m_bAsyncConnect = bAsyncConnect; m_enState = SS_STARTED; return TRUE; } Stop(); return FALSE; }
BOOL CUdpClient::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect) { if(!CheckParams() || !CheckStarting()) return FALSE; PrepareStart(); BOOL isOK = FALSE; m_bAsyncConnect = bAsyncConnect; if(CreateClientSocket()) { if(FirePrepareConnect(this, m_soClient) != HR_ERROR) { if(ConnectToServer(pszRemoteAddress, usPort)) { if(CreateWorkerThread()) { if(CreateDetectorThread()) isOK = TRUE; else SetLastError(SE_DETECT_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED); } else SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED); } else SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); if(!isOK) Stop(); return isOK; }