本文整理汇总了C++中mercury::Bundle::newMessage方法的典型用法代码示例。如果您正苦于以下问题:C++ Bundle::newMessage方法的具体用法?C++ Bundle::newMessage怎么用?C++ Bundle::newMessage使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mercury::Bundle
的用法示例。
在下文中一共展示了Bundle::newMessage方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: newMail
//-------------------------------------------------------------------------------------
void EntityMailboxAbstract::newMail(Mercury::Bundle& bundle)
{
if(componentID_ == 0) // 客户端
{
bundle.newMessage(ClientInterface::onRemoteMethodCall);
}
else // 服务器组件
{
Components::ComponentInfos* cinfos = Components::getSingleton().findComponent(componentID_);
if(cinfos != NULL)
{
// 找到对应的组件投递过去, 如果这个mailbox还需要中转比如 e.base.cell , 则由baseapp转往cellapp
if(cinfos->componentType == BASEAPP_TYPE)
{
bundle.newMessage(BaseappInterface::onEntityMail);
}
else
{
bundle.newMessage(CellappInterface::onEntityMail);
}
}
else
{
ERROR_MSG("EntityMailboxAbstract::newMail: not found component!\n");
}
}
bundle << id_;
// 如果是发往客户端的包则无需附加这样一个类型
if(componentID_ > 0)
bundle << type_;
}
示例2: newMail
//-------------------------------------------------------------------------------------
void EntityMailboxAbstract::newMail(Mercury::Bundle& bundle)
{
// 如果是server端的mailbox
if(g_componentType != CLIENT_TYPE && g_componentType != BOTS_TYPE)
{
if(componentID_ == 0) // 客户端
{
bundle.newMessage(ClientInterface::onRemoteMethodCall);
}
else // 服务器组件
{
Components::ComponentInfos* cinfos = Components::getSingleton().findComponent(componentID_);
if(cinfos != NULL)
{
// 找到对应的组件投递过去, 如果这个mailbox还需要中转比如 e.base.cell , 则由baseapp转往cellapp
if(cinfos->componentType == BASEAPP_TYPE)
{
bundle.newMessage(BaseappInterface::onEntityMail);
}
else
{
bundle.newMessage(CellappInterface::onEntityMail);
}
}
else
{
ERROR_MSG(fmt::format("EntityMailboxAbstract::newMail: not found component({})!\n",
componentID_));
}
}
bundle << id_;
// 如果是发往客户端的包则无需附加这样一个类型
if(componentID_ > 0)
bundle << type_;
}
else
{
// 如果是客户端上的mailbox调用服务端方法只存在调用cell或者base
switch(type_)
{
case MAILBOX_TYPE_BASE:
bundle.newMessage(BaseappInterface::onRemoteMethodCall);
break;
case MAILBOX_TYPE_CELL:
bundle.newMessage(BaseappInterface::onRemoteCallCellMethodFromClient);
break;
default:
KBE_ASSERT(false && "no support!\n");
break;
};
bundle << id_;
}
}
示例3: onSpaceDataChanged
//-------------------------------------------------------------------------------------
void Space::onSpaceDataChanged(const std::string& key, const std::string& value, bool isdel)
{
// 通知脚本
if(!isdel)
{
SCRIPT_OBJECT_CALL_ARGS3(Cellapp::getSingleton().getEntryScript().get(), const_cast<char*>("onSpaceData"),
const_cast<char*>("Iss"), this->id(), key.c_str(), value.c_str());
}
else
{
SCRIPT_OBJECT_CALL_ARGS3(Cellapp::getSingleton().getEntryScript().get(), const_cast<char*>("onSpaceData"),
const_cast<char*>("IsO"), this->id(), key.c_str(), Py_None);
}
SPACE_ENTITIES::const_iterator iter = this->entities().begin();
for(; iter != this->entities().end(); iter++)
{
const Entity* pEntity = (*iter).get();
if(pEntity == NULL || pEntity->isDestroyed() || !pEntity->hasWitness())
continue;
Mercury::Bundle* pForwardBundle = Mercury::Bundle::ObjPool().createObject();
if(!isdel)
{
pForwardBundle->newMessage(ClientInterface::setSpaceData);
(*pForwardBundle) << this->id();
(*pForwardBundle) << key;
(*pForwardBundle) << value;
}
else
{
pForwardBundle->newMessage(ClientInterface::delSpaceData);
(*pForwardBundle) << this->id();
(*pForwardBundle) << key;
}
Mercury::Bundle* pSendBundle = Mercury::Bundle::ObjPool().createObject();
MERCURY_ENTITY_MESSAGE_FORWARD_CLIENT(pEntity->id(), (*pSendBundle), (*pForwardBundle));
if(!isdel)
pEntity->pWitness()->sendToClient(ClientInterface::setSpaceData, pSendBundle);
else
pEntity->pWitness()->sendToClient(ClientInterface::delSpaceData, pSendBundle);
Mercury::Bundle::ObjPool().reclaimObject(pForwardBundle);
}
}
示例4: reqTeleportOther
//-------------------------------------------------------------------------------------
void Base::reqTeleportOther(Mercury::Channel* pChannel, ENTITY_ID reqTeleportEntityID,
COMPONENT_ID reqTeleportEntityCellAppID, COMPONENT_ID reqTeleportEntityBaseAppID)
{
DEBUG_MSG("Base::reqTeleportOther: reqTeleportEntityID=%d, reqTeleportEntityCellAppID=%"PRAppID".\n",
reqTeleportEntityID, reqTeleportEntityCellAppID);
if(this->getCellMailbox() == NULL || this->getCellMailbox()->getChannel() == NULL)
{
ERROR_MSG("%s::reqTeleportOther: %d, teleport is error, cellMailbox is NULL, reqTeleportEntityID, reqTeleportEntityCellAppID=%"PRAppID".\n",
this->getScriptName(), this->getID(), reqTeleportEntityID, reqTeleportEntityCellAppID);
return;
}
Components::ComponentInfos* cinfos = Components::getSingleton().findComponent(reqTeleportEntityCellAppID);
if(cinfos == NULL || cinfos->pChannel == NULL)
{
ERROR_MSG("%s::reqTeleportOther: %d, teleport is error, not found cellapp, reqTeleportEntityID, reqTeleportEntityCellAppID=%"PRAppID".\n",
this->getScriptName(), this->getID(), reqTeleportEntityID, reqTeleportEntityCellAppID);
return;
}
Mercury::Bundle bundle;
bundle.newMessage(CellappInterface::teleportFromBaseapp);
bundle << reqTeleportEntityID;
CellappInterface::teleportFromBaseappArgs3::staticAddToBundle(bundle, this->getCellMailbox()->getComponentID(), this->getID(), reqTeleportEntityBaseAppID);
bundle.send(Baseapp::getSingleton().getNetworkInterface(), cinfos->pChannel);
}
示例5: onMessage
//-------------------------------------------------------------------------------------
void DebugHelper::onMessage(uint32 logType, const char * str, uint32 length)
{
if(g_componentType == MACHINE_TYPE ||
g_componentType == CONSOLE_TYPE || g_componentType == MESSAGELOG_TYPE)
return;
if(length <= 0)
return;
Mercury::Bundle* pBundle = Mercury::Bundle::ObjPool().createObject();
int8 v = Mercury::g_trace_packet;
Mercury::g_trace_packet = 0;
pBundle->newMessage(MessagelogInterface::writeLog);
(*pBundle) << logType;
(*pBundle) << g_componentType;
(*pBundle) << g_componentID;
(*pBundle) << g_componentOrder;
int64 t = time(NULL);
(*pBundle) << t;
(*pBundle) << g_kbetime;
(*pBundle) << str;
bufferedLogPackets_.push_back(pBundle);
Mercury::g_trace_packet = v;
if(!syncStarting_)
{
if(pDispatcher_)
pDispatcher_->addFrequentTask(this);
syncStarting_ = true;
}
}
示例6: size
void EntityApp<E>::onExecScriptCommand(Mercury::Channel* pChannel, KBEngine::MemoryStream& s)
{
std::string cmd;
s.readBlob(cmd);
PyObject* pycmd = PyUnicode_DecodeUTF8(cmd.data(), cmd.size(), NULL);
if(pycmd == NULL)
{
SCRIPT_ERROR_CHECK();
return;
}
DEBUG_MSG(boost::format("EntityApp::onExecScriptCommand: size(%1%), command=%2%.\n") %
cmd.size() % cmd);
std::string retbuf = "";
PyObject* pycmd1 = PyUnicode_AsEncodedString(pycmd, "utf-8", NULL);
if(script_.run_simpleString(PyBytes_AsString(pycmd1), &retbuf) == 0)
{
// 将结果返回给客户端
Mercury::Bundle bundle;
ConsoleInterface::ConsoleExecCommandCBMessageHandler msgHandler;
bundle.newMessage(msgHandler);
ConsoleInterface::ConsoleExecCommandCBMessageHandlerArgs1::staticAddToBundle(bundle, retbuf);
bundle.send(this->getNetworkInterface(), pChannel);
}
Py_DECREF(pycmd);
Py_DECREF(pycmd1);
}
示例7: queryWatcher
//-------------------------------------------------------------------------------------
void ServerApp::queryWatcher(Mercury::Channel* pChannel, MemoryStream& s)
{
AUTO_SCOPED_PROFILE("watchers");
std::string path;
s >> path;
MemoryStream::SmartPoolObjectPtr readStreamPtr = MemoryStream::createSmartPoolObj();
WatcherPaths::root().readWatchers(path, readStreamPtr.get()->get());
MemoryStream::SmartPoolObjectPtr readStreamPtr1 = MemoryStream::createSmartPoolObj();
WatcherPaths::root().readChildPaths(path, path, readStreamPtr1.get()->get());
Mercury::Bundle bundle;
ConsoleInterface::ConsoleWatcherCBMessageHandler msgHandler;
bundle.newMessage(msgHandler);
uint8 type = 0;
bundle << type;
bundle.append(readStreamPtr.get()->get());
bundle.send(getNetworkInterface(), pChannel);
Mercury::Bundle bundle1;
bundle1.newMessage(msgHandler);
type = 1;
bundle1 << type;
bundle1.append(readStreamPtr1.get()->get());
bundle1.send(getNetworkInterface(), pChannel);
}
示例8: onChannelDeregister
//-------------------------------------------------------------------------------------
void Loginapp::onChannelDeregister(Mercury::Channel * pChannel)
{
// 如果是外部通道则处理
if(!pChannel->isInternal())
{
const std::string& extra = pChannel->extra();
// 通知billing从队列中清除他的请求, 避免拥塞
if(extra.size() > 0)
{
Components::COMPONENTS& cts = Components::getSingleton().getComponents(DBMGR_TYPE);
Components::ComponentInfos* dbmgrinfos = NULL;
if(cts.size() > 0)
dbmgrinfos = &(*cts.begin());
if(dbmgrinfos == NULL || dbmgrinfos->pChannel == NULL || dbmgrinfos->cid == 0)
{
}
else
{
Mercury::Bundle bundle;
bundle.newMessage(DbmgrInterface::eraseClientReq);
bundle << extra;
bundle.send(this->getNetworkInterface(), dbmgrinfos->pChannel);
}
}
}
ServerApp::onChannelDeregister(pChannel);
}
示例9: onReqCreateAccountResult
//-------------------------------------------------------------------------------------
void Loginapp::onReqCreateAccountResult(Mercury::Channel* pChannel, MemoryStream& s)
{
SERVER_ERROR_CODE failedcode;
std::string accountName;
std::string password;
std::string retdatas = "";
s >> failedcode >> accountName >> password;
s.readBlob(retdatas);
DEBUG_MSG(boost::format("Loginapp::onReqCreateAccountResult: accountName=%1%, failedcode=%2%.\n") %
accountName.c_str() % failedcode);
PendingLoginMgr::PLInfos* ptinfos = pendingCreateMgr_.remove(accountName);
if(ptinfos == NULL)
return;
Mercury::Channel* pClientChannel = this->getNetworkInterface().findChannel(ptinfos->addr);
if(pClientChannel == NULL)
return;
pClientChannel->extra("");
Mercury::Bundle bundle;
bundle.newMessage(ClientInterface::onCreateAccountResult);
bundle << failedcode;
bundle.appendBlob(retdatas);
bundle.send(this->getNetworkInterface(), pClientChannel);
SAFE_RELEASE(ptinfos);
}
示例10: sendTick
//-------------------------------------------------------------------------------------
void ClientObject::sendTick()
{
// 向服务器发送tick
uint64 check = uint64( Mercury::g_channelExternalTimeout * stampsPerSecond() ) / 2;
if (timestamp() - lastSentActiveTickTime_ > check)
{
lastSentActiveTickTime_ = timestamp();
Mercury::Bundle bundle;
if(connectedGateway_)
bundle.newMessage(BaseappInterface::onClientActiveTick);
else
bundle.newMessage(LoginappInterface::onClientActiveTick);
bundle.send(*pChannel_->endpoint());
}
}
示例11: createInNewSpace
//-------------------------------------------------------------------------------------
void Baseapp::createInNewSpace(Base* base, PyObject* cell)
{
ENTITY_ID id = base->getID();
std::string entityType = base->ob_type->tp_name;
std::string strCellData = script::Pickler::pickle(base->getCellData());
uint32 cellDataLength = strCellData.length();
Mercury::Bundle bundle;
bundle.newMessage(CellappmgrInterface::reqCreateInNewSpace);
bundle << entityType;
bundle << id;
bundle << componentID_;
bundle << cellDataLength;
if(cellDataLength > 0)
bundle.append(strCellData.data(), cellDataLength);
Components::COMPONENTS& components = Components::getSingleton().getComponents(CELLAPPMGR_TYPE);
Components::COMPONENTS::iterator iter = components.begin();
if(iter != components.end())
{
bundle.send(this->getNetworkInterface(), (*iter).pChannel);
return;
}
ERROR_MSG("Baseapp::createInNewSpace: not found cellappmgr.\n");
}
示例12: onGetEntityAppFromDbmgr
//-------------------------------------------------------------------------------------
void Baseapp::onGetEntityAppFromDbmgr(Mercury::Channel* pChannel, int32 uid, std::string& username,
int8 componentType, uint64 componentID,
uint32 intaddr, uint16 intport, uint32 extaddr, uint16 extport)
{
if(pChannel->isExternal())
return;
EntityApp<Base>::onRegisterNewApp(pChannel, uid, username, componentType, componentID,
intaddr, intport, extaddr, extport);
KBEngine::COMPONENT_TYPE tcomponentType = (KBEngine::COMPONENT_TYPE)componentType;
Components::COMPONENTS cts = Componentbridge::getComponents().getComponents(DBMGR_TYPE);
KBE_ASSERT(cts.size() >= 1);
Components::ComponentInfos* cinfos = Componentbridge::getComponents().findComponent(tcomponentType, uid, componentID);
cinfos->pChannel = NULL;
int ret = Components::getSingleton().connectComponent(tcomponentType, uid, componentID);
KBE_ASSERT(ret != -1);
Mercury::Bundle bundle;
switch(tcomponentType)
{
case BASEAPP_TYPE:
bundle.newMessage(BaseappInterface::onRegisterNewApp);
BaseappInterface::onRegisterNewAppArgs8::staticAddToBundle(bundle, getUserUID(), getUsername(), BASEAPP_TYPE, componentID_,
this->getNetworkInterface().intaddr().ip, this->getNetworkInterface().intaddr().port,
this->getNetworkInterface().extaddr().ip, this->getNetworkInterface().extaddr().port);
break;
case CELLAPP_TYPE:
bundle.newMessage(CellappInterface::onRegisterNewApp);
CellappInterface::onRegisterNewAppArgs8::staticAddToBundle(bundle, getUserUID(), getUsername(), BASEAPP_TYPE, componentID_,
this->getNetworkInterface().intaddr().ip, this->getNetworkInterface().intaddr().port,
this->getNetworkInterface().extaddr().ip, this->getNetworkInterface().extaddr().port);
break;
default:
KBE_ASSERT(false && "no support!\n");
break;
};
bundle.send(this->getNetworkInterface(), cinfos->pChannel);
}
示例13: loginGateWay
//-------------------------------------------------------------------------------------
bool ClientObject::loginGateWay()
{
// 请求登录网关
Mercury::Bundle bundle;
bundle.newMessage(BaseappInterface::loginGateway);
bundle << name_;
bundle << password_;
bundle.send(*pChannel_->endpoint());
return true;
}
示例14: onClientEntityEnterWorld
//-------------------------------------------------------------------------------------
void Baseapp::onClientEntityEnterWorld(Proxy* base)
{
base->initClientCellPropertys();
Mercury::Bundle bundle;
bundle.newMessage(ClientInterface::onEntityEnterWorld);
bundle << base->getID();
bundle << base->getSpaceID();
base->getClientMailbox()->postMail(bundle);
}
示例15: createAccount
//-------------------------------------------------------------------------------------
bool ClientObject::createAccount()
{
// 创建账号
Mercury::Bundle bundle;
bundle.newMessage(LoginappInterface::reqCreateAccount);
bundle << name_;
bundle << password_;
bundle.send(*pChannel_->endpoint());
return true;
}