Пример #1
0
void HttpServer::onConnection(const TcpConnectionPtr& conn)
{
     LOG_INFO("HttpServer::onConnection get one client %d", conn->fd());
     if (conn->connected())
     {
         conn->setContext(HttpContext());
     }
}
Пример #2
0
 void onConnection(const TcpConnectionPtr& conn) {
     if (conn->connected()) {
         connectionCount_.increment();
         conn->setContext(ConnectionContext());
         ConnectionContext* connectionContext
             = boost::any_cast<ConnectionContext>(conn->getMutableContext());
         EntryPtr entry(new Entry(conn));
         localConnectionBuckets_.get()->back().insert(entry);
         WeakEntryPtr weakEntry(entry);
         connectionContext->weakEntry_ = weakEntry;
     } else {
         connectionCount_.decrement();
         const ConnectionContext& connectionContext
             = boost::any_cast<const ConnectionContext&>(conn->getContext());
         const ConnectionSubscription& connSub = connectionContext.subscription_;
         // subtle: doUnsubscribe will erase *it, so increase before calling.
         for (auto it = connSub.begin(); it != connSub.end();) {
             doUnsubscribe(conn, *it++);
         }
     }
 }
Пример #3
0
void ZGWServer::onClientConnection(const TcpConnectionPtr& conn)
{
    LOG_INFO << "Client " << conn->peerAddress().toIpPort() << " -> "
        << conn->localAddress().toIpPort() << " is "
        << (conn->connected() ? "UP" : "DOWN");

    if( conn->connected() )
    {
        int id = -1;
        if( !idQueue_.empty() )
        {
            id = idQueue_.front();
            idQueue_.pop();
            id2conn_[id] = conn;
        }

        if( -1 == id )
        {
            LOG_ERROR << "[过载保护]系统到达最大连接数,拒绝连接";
            conn->shutdown();
        }
        else
        {
            conn->setContext(id);
            LOG_INFO << "新连接[" << conn->peerAddress().toIpPort() << "]流水ID: " << id;
        }
    }
    else
    {
        if(!conn->getContext().empty())
        {
            int id = boost::any_cast<int>(conn->getContext());
            assert(id > 0 && id <= static_cast<int>(kMaxConns));

            // 回收连接的key
            idQueue_.push(id);
            id2conn_.erase(id);
        }
    }
}
Пример #4
0
	void onConnection(const TcpConnectionPtr& conn)
	{
		//不管客户端连上来的是sub还是pub,都首先创建一个ConnectionSubscription,虽然对sub来说,没有必要
		if (conn->connected())
		{
			conn->setContext(ConnectionSubscription()); //保存一个clinet订阅的主题


		}
		else
		{
			//连接断开,把这个client订阅的topic里面都取消
			const ConnectionSubscription& connSub
				= boost::any_cast<const ConnectionSubscription&>(conn->getContext());
			// subtle: doUnsubscribe will erase *it, so increase before calling.
			for (ConnectionSubscription::const_iterator it = connSub.begin();
				it != connSub.end();)
			{
				doUnsubscribe(conn, *it++);
			}

		}
	}