void ConnetManager::add(const TcpConnectionPtr& con) { TcpConnection *addr=con.get(); int handler = addr->getSocket().getHandle(); ConnetCidMap::iterator it=m_cid_manager.find(handler); if(it!=m_cid_manager.end()) { return; } m_cid_manager[handler]=addr; }
void publish( const string& content, ProtobufCodecLite& codec, Counters& counters) { PubSubMessage message = makeMessage(content); muduo::net::Buffer buf; codec.fillEmptyBuffer(&buf, message); for (auto audience : audiences_) { TcpConnectionPtr tcpConnection = audience.lock(); if (tcpConnection.get()) { tcpConnection->send(buf.peek(), buf.readableBytes()); counters.addOutBoundTraffic(buf.readableBytes()); counters.incrementOutBoundMessage(); } } }
//----------------------------------------------------------------------------- // 描述: TCP连接上的一个接收任务已完成 //----------------------------------------------------------------------------- void AppBusiness::onTcpRecvComplete(const TcpConnectionPtr& connection, void *packetBuffer, int packetSize, const Context& context) { logger().writeStr("onTcpRecvComplete"); char *dataptr=(char*)packetBuffer; string msg((char*)dataptr+2, packetSize-2); Json::Reader reader; Json::Value value; if (reader.parse(msg, value)) { uint32 n = value["type"].asUInt(); if(isExist(n)) { if(!value.isMember("data")) { connection->recv(SELF_PACKET_SPLITTER, EMPTY_CONTEXT); return; } if(value["data"].isMember("cid")) { connection->recv(SELF_PACKET_SPLITTER, EMPTY_CONTEXT); return; } value["data"]["cid"]=connection.get()->getSocket().getHandle(); sendToDb(value); } else { msgProcess(connection,n,value["data"]); } } logger().writeFmt("Received message: %s", msg.c_str()); connection->recv(SELF_PACKET_SPLITTER, EMPTY_CONTEXT); }
void ConnetManager::del(const TcpConnectionPtr& con) { TcpConnection *addr=con.get(); int handler = addr->getSocket().getHandle(); ConnetCidMap::iterator it=m_cid_manager.find(handler); if(it==m_cid_manager.end()) { return ; } m_cid_manager.erase(it); ConPLayerMap::iterator ip=m_con_player.find(handler); if(ip==m_con_player.end()) { return ; } GamePlayerManager::instance().DelPlayer((*ip).second->getUid()); m_con_player.erase(ip); }