Beispiel #1
0
	virtual void startup() {
		thread_accepter_.start(new _ESQ accepter(setter_, dispatcher_, handler_), this);
		thread_transceiver_.start(new _ESQ transceiver(setter_, dispatcher_, handler_), this);
		thread_recycler_.start(new _ESQ recycler(setter_, dispatcher_, handler_), this);
		thread_destroyer_.start(new _ESQ destroyer(setter_, dispatcher_, handler_), this);
		processer_pools_.start(this);
	}
AccepterID CTcpSessionManager::AddAcceptor(const tagAcceptorConfigTraits &traits)
{
	if (m_mapAccepterConfig.find(traits.aID) != m_mapAccepterConfig.end() || traits.aID == InvalidAccepterID)
	{
		LOGE("AddAcceptor confilict AccecptID. traits=" << traits);
		return InvalidAccepterID;
	}
	m_mapAccepterConfig[traits.aID].first = traits;
	CTcpAcceptPtr accepter(new zsummer::network::CTcpAccept(m_summer));
	if (!accepter->OpenAccept(traits.listenIP.c_str(), traits.listenPort))
	{
		LOGE("AddAcceptor OpenAccept Failed. traits=" << traits);
		return InvalidAccepterID;
	}
	m_mapAccepterPtr[traits.aID] = accepter;
	CTcpSocketPtr newclient(new zsummer::network::CTcpSocket);
	newclient->Initialize(m_summer);
	accepter->DoAccept(newclient, std::bind(&CTcpSessionManager::OnAcceptNewClient, this, std::placeholders::_1, std::placeholders::_2, accepter, traits.aID));
	return  traits.aID;
}