// static methods int BaseConn::SendPkt(net_handle_t handle, PktBase* pkt) { EventLoop* el = get_io_event_loop(handle); PendingEventMgr* event_mgr = g_pending_event_mgr.GetIOResource(handle); if (el->IsInLoopThread()) { ConnMap_t::iterator it_conn = event_mgr->conn_map.find(handle); if (it_conn != event_mgr->conn_map.end()) { BaseConn* conn = it_conn->second; if (conn->IsOpen()) { conn->SendPkt(pkt); delete pkt; } else { conn->AddToWaitPktList(pkt); } } else { delete pkt; } } else { event_mgr->mutex.Lock(); event_mgr->pkt_list.push_back(make_pair(handle, pkt)); event_mgr->mutex.Unlock(); el->Wakeup(); } return 0; }
int BaseConn::CloseHandle(net_handle_t handle) { EventLoop* el = get_io_event_loop(handle); PendingEventMgr* event_mgr = g_pending_event_mgr.GetIOResource(handle); if (el->IsInLoopThread()) { ConnMap_t::iterator it_conn = event_mgr->conn_map.find(handle); if (it_conn != event_mgr->conn_map.end()) { it_conn->second->Close(); } } else { event_mgr->mutex.Lock(); event_mgr->close_list.push_back(handle); event_mgr->mutex.Unlock(); el->Wakeup(); } return 0; }