本文整理汇总了C++中MemoryStream类的典型用法代码示例。如果您正苦于以下问题:C++ MemoryStream类的具体用法?C++ MemoryStream怎么用?C++ MemoryStream使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MemoryStream类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: staticAddToStream
static void staticAddToStream(MemoryStream& s,
std::string init_strarg)
{
s.appendBlob(init_strarg);
}
示例2: getDescription
//-------------------------------------------------------------------------------------
PyObject* RealEntityMethod::callmethod(PyObject* args, PyObject* kwds)
{
MethodDescription* methodDescription = getDescription();
if(methodDescription->checkArgs(args))
{
MemoryStream* mstream = MemoryStream::ObjPool().createObject();
methodDescription->addToStream(mstream, args);
Network::Bundle* pForwardBundle = Network::Bundle::ObjPool().createObject();
(*pForwardBundle).newMessage(CellappInterface::onRemoteRealMethodCall);
(*pForwardBundle) << ghostEntityID_;
if(mstream->wpos() > 0)
(*pForwardBundle).append(mstream->data(), mstream->wpos());
if(Network::g_trace_packet > 0)
{
if(Network::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger("packetlogs");
DEBUG_MSG(fmt::format("RealEntityMethod::callmethod: pushUpdateData: CellappInterface::onRemoteRealMethodCall({2}({0})::{1})\n",
ghostEntityID_, methodDescription->getName(), scriptName_));
switch(Network::g_trace_packet)
{
case 1:
mstream->hexlike();
break;
case 2:
mstream->textlike();
break;
default:
mstream->print_storage();
break;
};
if(Network::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger(COMPONENT_NAME_EX(g_componentType));
}
// 记录这个事件产生的数据量大小
g_publicCellEventHistoryStats.trackEvent(scriptName_,
methodDescription->getName(),
pForwardBundle->currMsgLength(),
"::");
MemoryStream::ObjPool().reclaimObject(mstream);
GhostManager* gm = Cellapp::getSingleton().pGhostManager();
if(gm)
{
gm->pushMessage(realCell_, pForwardBundle);
}
else
{
Network::Bundle::ObjPool().reclaimObject(pForwardBundle);
}
}
S_Return;
}
示例3: inet_addr
void wme_c::processData(char* ip,WORD port)
{
Buffer* lpBuf = m_buf;
SOCKET skt = sys->createSocket(SOCK_STREAM);
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( ip);
clientService.sin_port = htons( port);
DWORD e;
if(connect(skt,(SOCKADDR*) &clientService,sizeof(clientService))==SOCKET_ERROR)
{
e=GetLastError();
return ;
}
MemoryStream *stream =new MemoryStream(2048);
memset(stream->buf,0,1024);
stream->write(HTTP_REQ_CMD, static_cast<int>(strlen(HTTP_REQ_CMD) ));
stream->write(HTTP_REQ_AGENT,static_cast<int>(strlen(HTTP_REQ_AGENT) ) );
stream->write(HTTP_REQ_PRAGMA2,static_cast<int>(strlen(HTTP_REQ_PRAGMA2)) ); //第二次请求
stream->writeChar('\r');
stream->writeChar('\n');
if(send(skt,stream->buf,static_cast<int>(strlen(stream->buf)),0)==SOCKET_ERROR)
{
e = GetLastError();
return ;
}
delete stream;
//处理数据
const int BUF_SIZE = 64*1024 +12 ;// 8192; //64KB
char buf[BUF_SIZE];
int iGet = 0;
Sleep(10);
iGet = recv(skt,buf,17,0); //读取状态行
if(0 == iGet)
{
e = GetLastError();
return;
}
buf[18]='\0';
if(strstr(buf,"OK")==NULL) // not got HTTP/1.x 200 OK
{
return;
}
iGet = recv(skt,buf,BUF_SIZE,0); //跳过头
if(iGet == 0)
{
iGet = recv(skt,buf,BUF_SIZE,0); //跳过头
}
char* lpLoc = strstr(buf,"\r\n\r\n");
if(lpLoc != NULL)
lpLoc += 4;
memcpy(buf,lpLoc,iGet - (lpLoc - buf )); //移动数据,覆盖http头部
iGet -= (lpLoc - buf );
WORD len;
memcpy(&len,buf+2,2); //get asf header len
//跳过第二次传来的头数据
while(len + 4 > iGet) //数据不够时,读取数据
{
int i = recv(skt,buf + iGet,BUF_SIZE - iGet,0);
if(i == SOCKET_ERROR)
{
e = GetLastError();
return;
}
if(0 == i)
{
e = GetLastError();
return;//连接已断开
}
iGet +=i;
}
memcpy(buf,buf + len,iGet - (len +4)); //跳过asf 头 +4 = http streaming 's header
iGet -= (len +4);
len = 0;
int iPos = 0;
static int cSeqID = 0 ;//从第三秒开始 。用以缓冲。 //TODO:可以从BM中得到当前ID然后加一个缓冲时间
byte cSeq = 0; //live show packet 中的序号
int iAsf = len; //当前asf chunk大小
char buf_t [PACKET_DATA_SIZE];
int iOffset_t = 0;
int iNeedData = 0 ; //当前数据包需要的数据
cSeq=0;
assert(cSeq == 0);
int iPadLen = 0;// Padding data length
while(true) //接收循环
{
while(iPos < iGet) //数据处理循环.iPos当前数据处理指针,iGet,当前可用数据长度
{
int iAvailable = iGet - iPos; //接收缓冲中可用数据
//.........这里部分代码省略.........
示例4: reqCreateInNewSpace
//-------------------------------------------------------------------------------------
void Cellappmgr::reqCreateInNewSpace(Network::Channel* pChannel, MemoryStream& s)
{
std::string entityType;
ENTITY_ID id;
COMPONENT_ID componentID;
bool hasClient;
// 如果cellappIndex为0,则代表不强制指定cellapp
// 非0的情况下,选择的cellapp可以用1,2,3,4来代替
// 假如预期有4个cellapp, 假如不够4个, 只有3个, 那么4代表1
uint32 cellappIndex = 0;
s >> entityType;
s >> id;
s >> cellappIndex;
s >> componentID;
s >> hasClient;
static SPACE_ID spaceID = 1;
Network::Bundle* pBundle = Network::Bundle::createPoolObject();
(*pBundle).newMessage(CellappInterface::onCreateInNewSpaceFromBaseapp);
(*pBundle) << entityType;
(*pBundle) << id;
(*pBundle) << spaceID++;
(*pBundle) << componentID;
(*pBundle) << hasClient;
(*pBundle).append(&s);
s.done();
uint32 cellappSize = cellapp_cids_.size();
if (cellappSize > 0)
{
updateBestCellapp();
// 选择特定的cellapp创建space
if (cellappIndex > 0)
{
uint32 index = (cellappIndex - 1) % cellappSize;
bestCellappID_ = cellapp_cids_[index];
}
else if (bestCellappID_ == 0 && numLoadBalancingApp() == 0)
{
ERROR_MSG(fmt::format("Cellappmgr::reqCreateInNewSpace: Unable to allocate cellapp for load balancing! entityType={}, entityID={}, componentID={}, cellappSize={}.\n",
entityType, id, componentID, cellappSize));
}
}
Components::ComponentInfos* cinfos = NULL;
if (bestCellappID_ > 0)
cinfos = Components::getSingleton().findComponent(CELLAPP_TYPE, bestCellappID_);
if (cinfos == NULL || cinfos->pChannel == NULL || cinfos->state != COMPONENT_STATE_RUN)
{
WARNING_MSG("Cellappmgr::reqCreateInNewSpace: not found cellapp, message is buffered.\n");
ForwardItem* pFI = new AppForwardItem();
pFI->pHandler = NULL;
pFI->pBundle = pBundle;
if (cellappIndex == 0 || bestCellappID_ == 0)
forward_anywhere_cellapp_messagebuffer_.push(pFI);
else
forward_cellapp_messagebuffer_.push(bestCellappID_, pFI);
return;
}
else
{
cinfos->pChannel->send(pBundle);
}
std::map< COMPONENT_ID, Cellapp >::iterator cellapp_iter = cellapps_.find(bestCellappID_);
DEBUG_MSG(fmt::format("Cellappmgr::reqCreateInNewSpace: entityType={}, entityID={}, componentID={}, cellapp(cid={}, load={}, numEntities={}).\n",
entityType, id, componentID, bestCellappID_, cellapp_iter->second.load(), cellapp_iter->second.numEntities()));
// 预先将实体数量增加
if (cellapp_iter != cellapps_.end())
{
cellapp_iter->second.incNumEntities();
}
}
示例5: DEBUG_MSG
//-------------------------------------------------------------------------------------
PyObject* EntityRemoteMethod::tp_call(PyObject* self, PyObject* args,
PyObject* kwds)
{
EntityRemoteMethod* rmethod = static_cast<EntityRemoteMethod*>(self);
MethodDescription* methodDescription = rmethod->getDescription();
EntityMailboxAbstract* mailbox = rmethod->getMailbox();
if(!mailbox->isClient())
{
return RemoteEntityMethod::tp_call(self, args, kwds);
}
Entity* pEntity = Cellapp::getSingleton().findEntity(mailbox->id());
if(pEntity == NULL || pEntity->pWitness() == NULL)
{
//WARNING_MSG(fmt::format("EntityRemoteMethod::callClientMethod: not found entity({}).\n",
// mailbox->id()));
return RemoteEntityMethod::tp_call(self, args, kwds);
}
// 如果是调用客户端方法, 我们记录事件并且记录带宽
if(methodDescription->checkArgs(args))
{
Mercury::Bundle* pBundle = Mercury::Bundle::ObjPool().createObject();
mailbox->newMail((*pBundle));
MemoryStream* mstream = MemoryStream::ObjPool().createObject();
methodDescription->addToStream(mstream, args);
if(mstream->wpos() > 0)
(*pBundle).append(mstream->data(), mstream->wpos());
if(Mercury::g_trace_packet > 0)
{
if(Mercury::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger("packetlogs");
DEBUG_MSG(fmt::format("EntityRemoteMethod::tp_call: pushUpdateData: ClientInterface::onRemoteMethodCall({}::{})\n",
pEntity->scriptName(), methodDescription->getName()));
switch(Mercury::g_trace_packet)
{
case 1:
mstream->hexlike();
break;
case 2:
mstream->textlike();
break;
default:
mstream->print_storage();
break;
};
if(Mercury::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger(COMPONENT_NAME_EX(g_componentType));
}
//mailbox->postMail((*pBundle));
pEntity->pWitness()->sendToClient(ClientInterface::onRemoteMethodCall, pBundle);
//Mercury::Bundle::ObjPool().reclaimObject(pBundle);
MemoryStream::ObjPool().reclaimObject(mstream);
// 记录这个事件产生的数据量大小
g_privateClientEventHistoryStats.trackEvent(pEntity->scriptName(),
methodDescription->getName(),
pBundle->currMsgLength(),
"::");
}
S_Return;
}
示例6: login
//-------------------------------------------------------------------------------------
void Loginapp::login(Mercury::Channel* pChannel, MemoryStream& s)
{
COMPONENT_CLIENT_TYPE ctype;
CLIENT_CTYPE tctype = UNKNOWN_CLIENT_COMPONENT_TYPE;
std::string loginName;
std::string password;
std::string datas;
// 前端类别
s >> tctype;
ctype = static_cast<COMPONENT_CLIENT_TYPE>(tctype);
// 附带数据
s.readBlob(datas);
// 帐号登录名
s >> loginName;
// 密码
s >> password;
loginName = KBEngine::strutil::kbe_trim(loginName);
if(loginName.size() == 0)
{
ERROR_MSG("Loginapp::login: loginName is NULL.\n");
return;
}
if(loginName.size() > ACCOUNT_NAME_MAX_LENGTH)
{
ERROR_MSG(boost::format("Loginapp::login: loginName too big, size=%1%, limit=%2%.\n") %
loginName.size() % ACCOUNT_NAME_MAX_LENGTH);
return;
}
if(password.size() > ACCOUNT_PASSWD_MAX_LENGTH)
{
ERROR_MSG(boost::format("Loginapp::login: password too big, size=%1%, limit=%2%.\n") %
password.size() % ACCOUNT_PASSWD_MAX_LENGTH);
return;
}
if(datas.size() > ACCOUNT_DATA_MAX_LENGTH)
{
ERROR_MSG(boost::format("Loginapp::login: bindatas too big, size=%1%, limit=%2%.\n") %
datas.size() % ACCOUNT_DATA_MAX_LENGTH);
return;
}
if(!g_kbeSrvConfig.getDBMgr().allowEmptyDigest && ctype != CLIENT_TYPE_BROWSER)
{
std::string clientDigest;
if(s.opsize() > 0)
s >> clientDigest;
if(clientDigest != digest_)
{
ERROR_MSG(boost::format("Loginapp::login: loginName(%1%), digest not match. curr(%2%) != dbmgr(%3%)\n") %
loginName % clientDigest % digest_);
datas = "";
_loginFailed(pChannel, loginName, SERVER_ERR_DIGEST, datas, true);
return;
}
}
示例7: ERROR_MSG
//-------------------------------------------------------------------------------------
bool CreateAccountTask::process()
{
if(!enable)
{
return false;
}
// 如果没有设置第三方服务地址则我们默认为成功
if(strlen(serviceAddr()) == 0)
{
success = true;
getDatas = postDatas;
return false;
}
Mercury::EndPoint endpoint;
endpoint.socket(SOCK_STREAM);
if (!endpoint.good())
{
ERROR_MSG("BillingTask::process: couldn't create a socket\n");
return false;
}
if(postDatas.size() == 0)
{
ERROR_MSG(boost::format("BillingTask::process: %1% postData is NULL.\n") % commitName);
return false;
}
u_int32_t addr;
KBEngine::Mercury::EndPoint::convertAddress(serviceAddr(), addr);
if(endpoint.connect(htons(servicePort()), addr) == -1)
{
ERROR_MSG(boost::format("BillingTask::process: connect billingserver(%1%:%2%) is error(%3%)!\n") %
serviceAddr() % servicePort() % kbe_strerror());
endpoint.close();
return false;
}
endpoint.setnonblocking(true);
endpoint.setnodelay(true);
Mercury::Bundle::SmartPoolObjectPtr bundle = Mercury::Bundle::createSmartPoolObj();
(*(*bundle)).append(postDatas.data(), postDatas.size());
(*(*bundle)).send(endpoint);
Mercury::TCPPacket packet;
packet.resize(1024);
fd_set frds;
struct timeval tv = { 0, 5000000 }; // 5000ms
FD_ZERO( &frds );
FD_SET((int)endpoint, &frds);
int selgot = select(endpoint+1, &frds, NULL, NULL, &tv);
if(selgot <= 0)
{
ERROR_MSG(boost::format("BillingTask::process: %1% send(%2%).\n") % commitName % postDatas);
ERROR_MSG(boost::format("BillingTask::process: %1% recv is error(%2%).\n") % commitName % KBEngine::kbe_strerror());
endpoint.close();
return false;
}
int len = endpoint.recv(packet.data(), 1024);
if(len <= 0)
{
ERROR_MSG(boost::format("BillingTask::process: %1% recv is size<= 0.\n===>postdatas=%2%\n") % commitName % postDatas);
endpoint.close();
return false;
}
packet.wpos(len);
getDatas.assign((const char *)(packet.data() + packet.rpos()), packet.opsize());
try
{
std::string::size_type fi = getDatas.find("\r\n\r\n");
if(fi != std::string::npos)
{
fi += 4;
MemoryStream s;
s.append(getDatas.data() + fi, getDatas.size() - fi);
while(s.opsize() > 0)
{
int32 type, len;
s >> type >> len;
EndianConvertReverse<int32>(type);
EndianConvertReverse<int32>(len);
int32 error = 0;
switch(type)
{
//.........这里部分代码省略.........
示例8: getDescription
//-------------------------------------------------------------------------------------
PyObject* ClientsRemoteEntityMethod::callmethod(PyObject* args, PyObject* kwds)
{
// 获取entityAOI范围内其他entity
// 向这些entity的client推送这个方法的调用
MethodDescription* methodDescription = getDescription();
Entity* pEntity = Cellapp::getSingleton().findEntity(id_);
if(pEntity == NULL || /*pEntity->pWitness() == NULL ||*/
pEntity->isDestroyed() /*|| pEntity->clientMailbox() == NULL*/)
{
//WARNING_MSG(fmt::format("EntityRemoteMethod::callClientMethod: not found entity({}).\n",
// mailbox->id()));
S_Return;
}
const std::list<ENTITY_ID>& entities = pEntity->witnesses();
if(otherClients_)
{
if(pEntity->witnessesSize() == 0)
S_Return;
}
// 先发给自己
if(methodDescription->checkArgs(args))
{
MemoryStream* mstream = MemoryStream::ObjPool().createObject();
methodDescription->addToStream(mstream, args);
if((!otherClients_ && (pEntity->pWitness() || (pEntity->clientMailbox()))))
{
Network::Bundle* pBundle = Network::Bundle::ObjPool().createObject();
pEntity->clientMailbox()->newMail((*pBundle));
if(mstream->wpos() > 0)
(*pBundle).append(mstream->data(), mstream->wpos());
if(Network::g_trace_packet > 0)
{
if(Network::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger("packetlogs");
DEBUG_MSG(fmt::format("ClientsRemoteEntityMethod::callmethod: pushUpdateData: ClientInterface::onRemoteMethodCall({}::{})\n",
pEntity->scriptName(), methodDescription->getName()));
switch(Network::g_trace_packet)
{
case 1:
mstream->hexlike();
break;
case 2:
mstream->textlike();
break;
default:
mstream->print_storage();
break;
};
if(Network::g_trace_packet_use_logfile)
DebugHelper::getSingleton().changeLogger(COMPONENT_NAME_EX(g_componentType));
}
//mailbox->postMail((*pBundle));
pEntity->pWitness()->sendToClient(ClientInterface::onRemoteMethodCall, pBundle);
// 记录这个事件产生的数据量大小
g_publicClientEventHistoryStats.trackEvent(pEntity->scriptName(),
methodDescription->getName(),
pBundle->currMsgLength(),
"::");
}
// 广播给其他人
std::list<ENTITY_ID>::const_iterator iter = entities.begin();
for(; iter != entities.end(); ++iter)
{
Entity* pAoiEntity = Cellapp::getSingleton().findEntity((*iter));
if(pAoiEntity == NULL || pAoiEntity->pWitness() == NULL || pAoiEntity->isDestroyed())
continue;
EntityMailbox* mailbox = pAoiEntity->clientMailbox();
if(mailbox == NULL)
continue;
Network::Channel* pChannel = mailbox->getChannel();
if(pChannel == NULL)
continue;
if(!pAoiEntity->pWitness()->entityInAOI(pEntity->id()))
continue;
Network::Bundle* pSendBundle = Network::Bundle::ObjPool().createObject();
Network::Bundle* pForwardBundle = Network::Bundle::ObjPool().createObject();
pAoiEntity->pWitness()->addSmartAOIEntityMessageToBundle(pForwardBundle, ClientInterface::onRemoteMethodCall,
ClientInterface::onRemoteMethodCallOptimized, pEntity->id());
if(mstream->wpos() > 0)
//.........这里部分代码省略.........
示例9: ogg_tell_func
long ogg_tell_func(void *datasource)
{
MemoryStream* oggStream = (MemoryStream*)datasource;
return (long)oggStream->Position();
}
示例10: KBE_ASSERT
//-------------------------------------------------------------------------------------
void Bundle::debugCurrentMessages(MessageID currMsgID, const Network::MessageHandler* pCurrMsgHandler,
Network::Packet* pCurrPacket, Network::Bundle::Packets& packets, Network::MessageLength1 currMsgLength,
Network::Channel* pChannel)
{
if (currMsgID == 0)
return;
if (!pCurrMsgHandler || currMsgID != pCurrMsgHandler->msgID || !pCurrMsgHandler->pMessageHandlers)
return;
if (pCurrMsgHandler->msgLen == NETWORK_VARIABLE_MESSAGE)
{
// 因为Bundle::finiMessage等地方遇到可变参数消息时将长度去掉了消息头部,这里要还原消息就要加回来
currMsgLength += NETWORK_MESSAGE_ID_SIZE;
currMsgLength += NETWORK_MESSAGE_LENGTH_SIZE;
if (currMsgLength - NETWORK_MESSAGE_ID_SIZE - NETWORK_MESSAGE_LENGTH_SIZE >= NETWORK_MESSAGE_MAX_SIZE)
currMsgLength += NETWORK_MESSAGE_LENGTH1_SIZE;
}
MemoryStream* pMemoryStream = MemoryStream::createPoolObject();
// 通过消息长度找到消息头,然后将消息内容输出
int msglen = currMsgLength;
if(pCurrPacket)
{
// 如果当前消息所有内容都在当前包中,直接输出内容即可
msglen -= pCurrPacket->length();
if(msglen <= 0)
{
pMemoryStream->append(pCurrPacket->data() + pCurrPacket->wpos() - currMsgLength, currMsgLength);
}
else
{
int idx = 0;
Network::Bundle::Packets::reverse_iterator packiter = packets.rbegin();
for (; packiter != packets.rend(); ++packiter)
{
++idx;
Network::Packet* pPacket = (*packiter);
// 当前包可能已经计算过
if (pCurrPacket == pPacket)
continue;
// 如果所有内容都在包中
if((int)pPacket->length() >= msglen)
{
int wpos = pPacket->length() - msglen;
pMemoryStream->append(pPacket->data() + wpos, msglen);
for(size_t i = packets.size() - idx; i < packets.size(); ++i)
{
Network::Packet* pPacket1 = packets[i];
// 这个包已经在上面处理过了
if (pPacket1 == pPacket || pCurrPacket == pPacket1)
continue;
// 期间的包内容全部加入
pMemoryStream->append(pPacket1->data() + pPacket1->rpos(), pPacket1->length());
}
// 把当前的包内容全部加进去
pMemoryStream->append(pCurrPacket->data() + pCurrPacket->rpos(), pCurrPacket->length());
break;
}
else
{
msglen -= pPacket->length();
}
}
}
}
// 一些sendto操作的包导致, 这类包也不需要追踪
if(pMemoryStream->length() < NETWORK_MESSAGE_ID_SIZE)
{
MemoryStream::reclaimPoolObject(pMemoryStream);
return;
}
KBE_ASSERT(currMsgLength == pMemoryStream->length());
TRACE_MESSAGE_PACKET(false, pMemoryStream, pCurrMsgHandler, pMemoryStream->length(),
(pChannel != NULL ? pChannel->c_str() : "None"), false);
MemoryStream::reclaimPoolObject(pMemoryStream);
}
示例11: createFromStream
virtual void createFromStream(MemoryStream& s)
{
s.readBlob(strarg);
}
示例12: addToStream
virtual void addToStream(MemoryStream& s)
{
s.appendBlob(strarg);
}
示例13: onReqCreateMailAccountResult
//-------------------------------------------------------------------------------------
void Loginapp::onReqCreateMailAccountResult(Network::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(fmt::format("Loginapp::onReqCreateMailAccountResult: accountName={}, failedcode={}.\n",
accountName.c_str(), failedcode));
if(failedcode == SERVER_SUCCESS)
{
Components::COMPONENTS& loginapps = Components::getSingleton().getComponents(LOGINAPP_TYPE);
std::string http_host = "localhost";
if(startGroupOrder_ == 1)
{
if(strlen((const char*)&g_kbeSrvConfig.getLoginApp().externalAddress) > 0)
http_host = g_kbeSrvConfig.getBaseApp().externalAddress;
else
http_host = inet_ntoa((struct in_addr&)Loginapp::getSingleton().networkInterface().extaddr().ip);
}
else
{
Components::COMPONENTS::iterator iter = loginapps.begin();
for(; iter != loginapps.end(); ++iter)
{
if((*iter).groupOrderid == 1)
{
if(strlen((const char*)&(*iter).externalAddressEx) > 0)
http_host = (*iter).externalAddressEx;
else
http_host = inet_ntoa((struct in_addr&)(*iter).pExtAddr->ip);
}
}
}
threadPool_.addTask(new SendActivateEMailTask(accountName, retdatas,
http_host,
g_kbeSrvConfig.getLoginApp().http_cbport));
}
PendingLoginMgr::PLInfos* ptinfos = pendingCreateMgr_.remove(accountName);
if(ptinfos == NULL)
return;
Network::Channel* pClientChannel = this->networkInterface().findChannel(ptinfos->addr);
if(pClientChannel == NULL)
return;
pClientChannel->extra("");
retdatas = "";
Network::Bundle* pBundle = Network::Bundle::createPoolObject();
(*pBundle).newMessage(ClientInterface::onCreateAccountResult);
(*pBundle) << failedcode;
(*pBundle).appendBlob(retdatas);
pClientChannel->send(pBundle);
SAFE_RELEASE(ptinfos);
}
示例14: getFileSystem
/** 找开文件
@param pszFileName:文件名
@param
@return
*/
bool CCsvReader::Open(const char* pszFileName, bool bEncrypt)
{
if(pszFileName == NULL)
{
return false;
}
m_curStrName = pszFileName;
// 取得文件系统
FileSystem * pFileSystem = getFileSystem();
if(pFileSystem == NULL)
{
return false;
}
// 读取文件
Stream * pStream = pFileSystem->open(pszFileName);
if(pStream == NULL)
{
return false;
}
// 解密文件
char * pFileBuffer = NULL;
MemoryStream memorystream;
if(bEncrypt)
{
int nFileLength = pStream->getLength();
pFileBuffer = new char [nFileLength + 1];
if(!pStream->read(pFileBuffer, nFileLength))
{
return false;
}
pStream->close();
pStream->release();
if(!makeMap((uchar *)pFileBuffer, nFileLength, 'LAND'))
{
return false;
}
memorystream.attach((uchar *)pFileBuffer, nFileLength);
pStream = &memorystream;
}
// 解析
if(!_Open(pStream))
{
if(pFileBuffer != NULL)
{
delete [] pFileBuffer;
pFileBuffer = NULL;
}
// 关闭文件
pStream->close();
pStream->release();
return false;
}
// 关闭文件
pStream->close();
pStream->release();
if(pFileBuffer != NULL)
{
delete [] pFileBuffer;
pFileBuffer = NULL;
}
return true;
}
示例15: login
//-------------------------------------------------------------------------------------
void Loginapp::login(Network::Channel* pChannel, MemoryStream& s)
{
AUTO_SCOPED_PROFILE("login");
COMPONENT_CLIENT_TYPE ctype;
CLIENT_CTYPE tctype = UNKNOWN_CLIENT_COMPONENT_TYPE;
std::string loginName;
std::string password;
std::string datas;
// 前端类别
s >> tctype;
ctype = static_cast<COMPONENT_CLIENT_TYPE>(tctype);
// 附带数据
s.readBlob(datas);
// 帐号登录名
s >> loginName;
// 密码
s >> password;
loginName = KBEngine::strutil::kbe_trim(loginName);
if(loginName.size() == 0)
{
INFO_MSG("Loginapp::login: loginName is NULL.\n");
_loginFailed(pChannel, loginName, SERVER_ERR_NAME, datas, true);
s.done();
return;
}
if(loginName.size() > ACCOUNT_NAME_MAX_LENGTH)
{
INFO_MSG(fmt::format("Loginapp::login: loginName is too long, size={}, limit={}.\n",
loginName.size(), ACCOUNT_NAME_MAX_LENGTH));
_loginFailed(pChannel, loginName, SERVER_ERR_NAME, datas, true);
s.done();
return;
}
if(password.size() > ACCOUNT_PASSWD_MAX_LENGTH)
{
INFO_MSG(fmt::format("Loginapp::login: password is too long, size={}, limit={}.\n",
password.size(), ACCOUNT_PASSWD_MAX_LENGTH));
_loginFailed(pChannel, loginName, SERVER_ERR_PASSWORD, datas, true);
s.done();
return;
}
if(datas.size() > ACCOUNT_DATA_MAX_LENGTH)
{
INFO_MSG(fmt::format("Loginapp::login: bindatas is too long, size={}, limit={}.\n",
datas.size(), ACCOUNT_DATA_MAX_LENGTH));
_loginFailed(pChannel, loginName, SERVER_ERR_OP_FAILED, datas, true);
s.done();
return;
}
// 首先必须baseappmgr和dbmgr都已经准备完毕了。
Components::ComponentInfos* baseappmgrinfos = Components::getSingleton().getBaseappmgr();
if(baseappmgrinfos == NULL || baseappmgrinfos->pChannel == NULL || baseappmgrinfos->cid == 0)
{
datas = "";
_loginFailed(pChannel, loginName, SERVER_ERR_SRV_NO_READY, datas, true);
s.done();
return;
}
Components::ComponentInfos* dbmgrinfos = Components::getSingleton().getDbmgr();
if(dbmgrinfos == NULL || dbmgrinfos->pChannel == NULL || dbmgrinfos->cid == 0)
{
datas = "";
_loginFailed(pChannel, loginName, SERVER_ERR_SRV_NO_READY, datas, true);
s.done();
return;
}
if(!g_kbeSrvConfig.getDBMgr().allowEmptyDigest)
{
std::string clientDigest;
if(s.length() > 0)
s >> clientDigest;
if(clientDigest.size() > 0)
{
if(clientDigest != digest_)
{
INFO_MSG(fmt::format("Loginapp::login: loginName({}), digest not match. curr({}) != dbmgr({})\n",
loginName, clientDigest, digest_));
datas = "";
_loginFailed(pChannel, loginName, SERVER_ERR_ENTITYDEFS_NOT_MATCH, datas, true);
return;
}
//.........这里部分代码省略.........