Exemple #1
0
// 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;
}
Exemple #2
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;
}