本文整理汇总了C++中DatagramPtr::add_channel方法的典型用法代码示例。如果您正苦于以下问题:C++ DatagramPtr::add_channel方法的具体用法?C++ DatagramPtr::add_channel怎么用?C++ DatagramPtr::add_channel使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DatagramPtr
的用法示例。
在下文中一共展示了DatagramPtr::add_channel方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handle_ai_change
void DistributedObject::handle_ai_change(channel_t new_ai, channel_t sender,
bool channel_is_explicit)
{
channel_t old_ai = m_ai_channel;
if(new_ai == old_ai) {
return;
}
// Set of channels that must be notified about ai_change
unordered_set<channel_t> targets;
if(old_ai) {
targets.insert(old_ai);
}
if(!m_zone_objects.empty()) {
// We have at least one child, so we want to notify the children as well
targets.insert(parent_to_children(m_do_id));
}
m_ai_channel = new_ai;
m_ai_explicitly_set = channel_is_explicit;
DatagramPtr dg = Datagram::create(targets, sender, STATESERVER_OBJECT_CHANGING_AI);
dg->add_doid(m_do_id);
dg->add_channel(new_ai);
dg->add_channel(old_ai);
route_datagram(dg);
if(new_ai) {
m_log->trace() << "Sending AI entry to " << new_ai << ".\n";
send_ai_entry(new_ai);
}
}
示例2: recall_post_removes
void MessageDirector::recall_post_removes(channel_t sender)
{
// Clear post removes upstream
if(m_upstream != nullptr) {
DatagramPtr dg = Datagram::create(CONTROL_CLEAR_POST_REMOVES);
dg->add_channel(sender);
m_upstream->handle_datagram(dg);
}
}
示例3: preroute_post_remove
void MessageDirector::preroute_post_remove(channel_t sender, DatagramHandle post_remove)
{
// Add post remove upstream
if(m_upstream != nullptr) {
DatagramPtr dg = Datagram::create(CONTROL_ADD_POST_REMOVE);
dg->add_channel(sender);
dg->add_blob(post_remove);
m_upstream->handle_datagram(dg);
}
}
示例4: notify_interest_done
// notify_interest_done send a CLIENTAGENT_DONE_INTEREST_RESP to the
// interest operation's caller, if one has been set.
void Client::notify_interest_done(const InterestOperation* iop)
{
if(iop->m_callers.size() == 0) {
return;
}
DatagramPtr resp = Datagram::create(iop->m_callers, m_channel, CLIENTAGENT_DONE_INTEREST_RESP);
resp->add_channel(m_channel);
resp->add_uint16(iop->m_interest_id);
route_datagram(resp);
}
示例5: handle_delete_ai
void StateServer::handle_delete_ai(DatagramIterator& dgi, channel_t sender)
{
channel_t ai_channel = dgi.read_channel();
std::set <channel_t> targets;
for(auto it = m_objs.begin(); it != m_objs.end(); ++it) {
if(it->second && it->second->m_ai_channel == ai_channel && it->second->m_ai_explicitly_set) {
targets.insert(it->second->m_do_id);
}
}
if(targets.size()) {
DatagramPtr dg = Datagram::create(targets, sender, STATESERVER_DELETE_AI_OBJECTS);
dg->add_channel(ai_channel);
route_datagram(dg);
}
}
示例6: handle_datagram
void DistributedObject::handle_datagram(DatagramHandle, DatagramIterator &dgi)
{
channel_t sender = dgi.read_channel();
uint16_t msgtype = dgi.read_uint16();
switch(msgtype) {
case STATESERVER_DELETE_AI_OBJECTS: {
if(m_ai_channel != dgi.read_channel()) {
m_log->warning() << " received reset for wrong AI channel.\n";
break; // Not my AI!
}
annihilate(sender);
break;
}
case STATESERVER_OBJECT_DELETE_RAM: {
if(m_do_id != dgi.read_doid()) {
break; // Not meant for me!
}
// Delete object
annihilate(sender);
break;
}
case STATESERVER_OBJECT_DELETE_CHILDREN: {
doid_t r_do_id = dgi.read_doid();
if(r_do_id == m_do_id) {
delete_children(sender);
} else if(r_do_id == m_parent_id) {
annihilate(sender, false);
}
break;
}
case STATESERVER_OBJECT_SET_FIELD: {
if(m_do_id != dgi.read_doid()) {
break; // Not meant for me!
}
handle_one_update(dgi, sender);
break;
}
case STATESERVER_OBJECT_SET_FIELDS: {
if(m_do_id != dgi.read_doid()) {
break; // Not meant for me!
}
uint16_t field_count = dgi.read_uint16();
for(int16_t i = 0; i < field_count; ++i) {
if(!handle_one_update(dgi, sender)) {
break;
}
}
break;
}
case STATESERVER_OBJECT_CHANGING_AI: {
doid_t r_parent_id = dgi.read_doid();
channel_t new_channel = dgi.read_channel();
m_log->trace() << "Received ChangingAI notification from " << r_parent_id << ".\n";
if(r_parent_id != m_parent_id) {
m_log->warning() << "Received AI channel from " << r_parent_id
<< " but my parent_id is " << m_parent_id << ".\n";
break;
}
if(m_ai_explicitly_set) {
break;
}
handle_ai_change(new_channel, sender, false);
break;
}
case STATESERVER_OBJECT_SET_AI: {
channel_t new_channel = dgi.read_channel();
m_log->trace() << "Updating AI to " << new_channel << ".\n";
handle_ai_change(new_channel, sender, true);
break;
}
case STATESERVER_OBJECT_GET_AI: {
m_log->trace() << "Received AI query from " << sender << ".\n";
DatagramPtr dg = Datagram::create(sender, m_do_id, STATESERVER_OBJECT_GET_AI_RESP);
dg->add_uint32(dgi.read_uint32()); // Get context
dg->add_doid(m_do_id);
dg->add_channel(m_ai_channel);
route_datagram(dg);
break;
}
case STATESERVER_OBJECT_GET_AI_RESP: {
dgi.read_uint32(); // Discard context
doid_t r_parent_id = dgi.read_doid();
m_log->trace() << "Received AI query response from " << r_parent_id << ".\n";
if(r_parent_id != m_parent_id) {
m_log->warning() << "Received AI channel from " << r_parent_id
<< " but my parent_id is " << m_parent_id << ".\n";
break;
}
channel_t new_ai = dgi.read_channel();
if(m_ai_explicitly_set) {
break;
}
//.........这里部分代码省略.........