//------------------------------------------------------------------------------------- Mercury::Channel* ClientObjectBase::initBaseappChannel() { Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObjectBase::initBaseappChannel: couldn't create a socket\n"); delete pEndpoint; return false; } u_int32_t address; pEndpoint->convertAddress(ip_.c_str(), address); if(pEndpoint->connect(htons(port_), address) == -1) { ERROR_MSG(boost::format("ClientObjectBase::initBaseappChannel: connect server is error(%1%)!\n") % kbe_strerror()); delete pEndpoint; return NULL; } Mercury::Address addr(ip_.c_str(), port_); pEndpoint->addr(addr); pServerChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); connectedGateway_ = true; return pServerChannel_; }
//------------------------------------------------------------------------------------- Mercury::Channel* ClientObjectBase::initLoginappChannel(std::string accountName, std::string passwd, std::string ip, KBEngine::uint32 port) { Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObjectBase::initLoginappChannel: couldn't create a socket\n"); delete pEndpoint; return NULL; } u_int32_t address; pEndpoint->convertAddress(ip.c_str(), address); if(pEndpoint->connect(htons(port), address) == -1) { ERROR_MSG(boost::format("ClientObjectBase::initLoginappChannel: connect server is error(%1%)!\n") % kbe_strerror()); delete pEndpoint; return NULL; } Mercury::Address addr(ip.c_str(), port); pEndpoint->addr(addr); pServerChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); password_ = passwd; name_ = accountName; return pServerChannel_; }
//------------------------------------------------------------------------------------- bool ClientObject::initCreate() { Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObject::initNetwork: couldn't create a socket\n"); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } ENGINE_COMPONENT_INFO& infos = g_kbeSrvConfig.getBots(); u_int32_t address; pEndpoint->convertAddress(infos.login_ip, address); if(pEndpoint->connect(htons(infos.login_port), address) == -1) { ERROR_MSG(boost::format("ClientObject::initNetwork(%2%): connect server(%3%:%4%) is error(%1%)!\n") % kbe_strerror() % name_ % infos.login_ip % infos.login_port); delete pEndpoint; // error_ = C_ERROR_INIT_NETWORK_FAILED; state_ = C_STATE_INIT; return false; } Mercury::Address addr(infos.login_ip, infos.login_port); pEndpoint->addr(addr); pServerChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); pServerChannel_->pMsgHandlers(&ClientInterface::messageHandlers); Bots::getSingleton().pEventPoller()->registerForRead((*pEndpoint), this); Mercury::Bundle* pBundle = Mercury::Bundle::ObjPool().createObject(); (*pBundle).newMessage(LoginappInterface::hello); (*pBundle) << KBEVersion::versionString() << KBEVersion::scriptVersionString(); if(Mercury::g_channelExternalEncryptType == 1) { pBlowfishFilter_ = new Mercury::BlowfishFilter(); (*pBundle).appendBlob(pBlowfishFilter_->key()); } else { std::string key = ""; (*pBundle).appendBlob(key); } pServerChannel_->pushBundle(pBundle); this->pEndpoint_ = pEndpoint; return true; }
//------------------------------------------------------------------------------------- bool ClientObject::initLoginGateWay() { Bots::getSingleton().pEventPoller()->deregisterForRead(*pServerChannel_->endpoint()); Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObject::initLogin: couldn't create a socket\n"); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } u_int32_t address; pEndpoint->convertAddress(ip_.c_str(), address); if(pEndpoint->connect(htons(port_), address) == -1) { ERROR_MSG(boost::format("ClientObject::initLogin(%2%): connect server is error(%1%)!\n") % kbe_strerror() % name_); delete pEndpoint; // error_ = C_ERROR_INIT_NETWORK_FAILED; state_ = C_STATE_LOGIN_GATEWAY_CREATE; return false; } Mercury::Address addr(ip_.c_str(), port_); pEndpoint->addr(addr); pServerChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); Bots::getSingleton().pEventPoller()->registerForRead((*pEndpoint), this); connectedGateway_ = true; Mercury::Bundle* pBundle = Mercury::Bundle::ObjPool().createObject(); (*pBundle).newMessage(BaseappInterface::hello); (*pBundle) << KBEVersion::versionString() << KBEVersion::scriptVersionString(); if(Mercury::g_channelExternalEncryptType == 1) { pBlowfishFilter_ = new Mercury::BlowfishFilter(); (*pBundle).appendBlob(pBlowfishFilter_->key()); pServerChannel_->pFilter(NULL); } else { std::string key = ""; (*pBundle).appendBlob(key); } pServerChannel_->pushBundle(pBundle); return true; }
//------------------------------------------------------------------------------------- bool ClientObject::initCreate() { Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObject::initNetwork: couldn't create a socket\n"); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } ENGINE_COMPONENT_INFO& infos = g_kbeSrvConfig.getBots(); u_int32_t address; pEndpoint->convertAddress(infos.login_ip, address); if(pEndpoint->connect(htons(infos.login_port), address) == -1) { ERROR_MSG(boost::format("ClientObject::initNetwork: connect server is error(%1%)!\n") % kbe_strerror()); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } Mercury::Address addr(infos.login_ip, infos.login_port); pEndpoint->addr(addr); pChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); pChannel_->pMsgHandlers(&ClientInterface::messageHandlers); Bots::getSingleton().pEventPoller()->registerForRead((*pEndpoint), this); return true; }
//------------------------------------------------------------------------------------- bool ClientObject::initLoginGateWay() { Bots::getSingleton().pEventPoller()->deregisterForRead(*pChannel_->endpoint()); Mercury::EndPoint* pEndpoint = new Mercury::EndPoint(); pEndpoint->socket(SOCK_STREAM); if (!pEndpoint->good()) { ERROR_MSG("ClientObject::initLogin: couldn't create a socket\n"); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } u_int32_t address; pEndpoint->convertAddress(ip_.c_str(), address); if(pEndpoint->connect(htons(port_), address) == -1) { ERROR_MSG(boost::format("ClientObject::initLogin: connect server is error(%1%)!\n") % kbe_strerror()); delete pEndpoint; error_ = C_ERROR_INIT_NETWORK_FAILED; return false; } Mercury::Address addr(ip_.c_str(), port_); pEndpoint->addr(addr); pChannel_->endpoint(pEndpoint); pEndpoint->setnonblocking(true); pEndpoint->setnodelay(true); Bots::getSingleton().pEventPoller()->registerForRead((*pEndpoint), this); connectedGateway_ = true; return true; }