Exemple #1
0
ISender* CManagedSenderTable::open_sender(const SenderInfo& sender_info)
{    
    if (!check_sender_info(sender_info))
    {
        return NULL;
    }

    CManagedSender* sender = NULL;
    sys::LockHelper<sys::CLock> lock(_lock_array[sender_info.key]);

    if (NULL == _sender_table[sender_info.key])
    {    
        sender = new CManagedSender(sender_info);            
        sender->inc_refcount();
        sender->set_in_table(true);

        sender->attach_sender_table(this);
        sender_info.reply_handler->attach(sender);
                
        _sender_table[sender_info.key] = sender;    
        get_context()->add_sender(sender);
    }

    return sender;
}
ISender* CUnmanagedSenderTable::open_sender(const SenderInfo& sender_info)
{             
    if (!check_sender_info(sender_info))
    {
        return NULL;
    }

    sys::LockHelper<sys::CLock> lock(_lock);
    std::pair<SenderMap::iterator, bool> retval;
    CUnmanagedSender* sender = new CUnmanagedSender(sender_info);
    
    retval = _sender_map.insert(std::make_pair(sender_info.ip_node, sender));
    if (!retval.second)
    {
        delete sender;
        sender = NULL;
    }
    else
    {
        sender->inc_refcount();
        sender->set_in_table(true);

        sender->attach_sender_table(this);
        sender_info.reply_handler->attach(sender);

        get_context()->add_sender(sender);
    }

    return sender;
}