CErrno NetThread::StartupServer(const std::string & strNetNodeName , const std::string & strType , const std::string & strAddress , INT32 nPort , BOOL bResueAddr) { m_usServerPort = nPort; m_strNetNodeName = strNetNodeName; m_strAddress = strAddress; m_strRpcType = strType; if (nPort == -1) { m_usServerPort = NetHelper::GetUnusedPort(); } Net::ISession * pSeesion = new Net::ServerSession(strAddress.c_str() , m_usServerPort , m_strNetNodeName); NetHandlerListenerPtr pListener(new NetHandlerListener(m_pNetReactor , pSeesion)); if (CErrno::Failure() == pListener->Init(strAddress.c_str(), m_usServerPort , bResueAddr)) { gErrorStream("NetHandlerListener init failure:" << m_strNetNodeName << ":address=" << strAddress << ":port=" << m_usServerPort); return CErrno::Failure(); } if (m_pNetReactor->GetReactorType() == REACTOR_TYPE_EPOLLEX) { if (!(m_pNetReactor->AddNetHandler(pListener, (ENetHandlerFuncMask)(NET_FUNC_EXCEPT | NET_FUNC_ACCEPT | NET_FUNC_TIMEOUT)).IsSuccess())) { gErrorStream("StartupRPCServer AddNetHandler failure:" << strNetNodeName << ":address=" << strAddress << ":port=" << m_usServerPort); return CErrno::Failure(); } #ifdef _LINUX EpollexCoTask * pTask = (EpollexCoTask*)(pSeesion->GetContext()); if (pTask) { pTask->pNetHandler = pListener; pTask->fd = pSeesion->GetSocket(); } #endif } else { if (!(m_pNetReactor->AddNetHandler(pListener, Net::NET_FUNC_ACCEPT_DEFAULT)).IsSuccess()) { gErrorStream("StartupRPCServer AddNetHandler failure:" << strNetNodeName << ":address=" << strAddress << ":port=" << m_usServerPort); return CErrno::Failure(); } } gDebugStream("StartupRPCServer success:" << strNetNodeName << ":address=" << strAddress << ":port=" << m_usServerPort); return CErrno::Success(); }
bool DataBlockHelper::ParseHead() { //---------------------------------------------------- //分析列数和类型 vector< char > vLineBuf; vLineBuf.resize(MAX_LINE_BYTES, 0); char* szLine = &(vLineBuf[0]); //读第一行,解析字段名 pMemory = const_cast<char*>(_GetLineFromMemory(szLine, MAX_LINE_BYTES, pMemory, pEnd)); if(NULL == pMemory) return false; _ConvertStringToVector(szLine, vTitle, "\t", true, true); if(vTitle.empty()) return false; //建立字段类型列表 vector<std::string> tmp; pMemory = const_cast<char*>(_GetLineFromMemory(szLine, MAX_LINE_BYTES, pMemory, pEnd)); if(NULL == pMemory) return false; _ConvertStringToVector(szLine, tmp, "\t", true, true); if(tmp.empty()) return false; if (vTitle.size() != tmp.size()) { return false; } uint32 nFieldsNum = vTitle.size(); vFieldsType.resize(nFieldsNum); for(uint32 i = 0; i<nFieldsNum; i++) { transform(tmp[i].begin(), tmp[i].end(), tmp[i].begin(), ::toupper); if(tmp[i] == string("INT")) { vFieldsType[i] = Field_Type::T_INT; } else if((tmp[i] == string("FLOAT")) || (tmp[i] == string("DOUBLE"))) { vFieldsType[i] = Field_Type::T_FLOAT; } else if(tmp[i] == string("STRING")) { vFieldsType[i] = Field_Type::T_STRING; } else if((tmp[i] == string("BOOL")) || (tmp[i] == string("BOOLEAN"))) { vFieldsType[i] = Field_Type::T_BOOL; } else { return false; } } //读出注释行,按照这个方式是从第四行开始就是数据,如果有变化可以在此处修改 pMemory = const_cast<char*>(_GetLineFromMemory(szLine, MAX_LINE_BYTES, pMemory, pEnd)); if(NULL == pMemory) { gErrorStream("Table file with out any content."); return false; } return true; }
INT32 CoCreate(void ** pCoID, coroutine_func pFunc, void * pArg) { *pCoID = CreateFiber(0, pFunc, pArg); if (*pCoID == NULL) { gErrorStream("create fiber failed.\n"); } return 0; }
INetHandlerPtr NetThread::CreateClientHandler(std::string strNodeName, std::string strUUID, const char * pAddress, UINT16 usPort, Net::NetSocket socket /*= 0*/, void * context/* = NULL*/) { if (!pAddress) { gErrorStream("createClientHandler error."); return NULL; } if (strUUID == "") { char buf[256] = { 0 }; CUtil::GenerateUUIDBySys(buf); strUUID = buf; } Net::ClientSession * pSession = new Net::ClientSession(pAddress, usPort, strNodeName.c_str()); NetHandlerClientPtr pNetHandler(new NetHandlerClient(m_pNetReactor, pSession)); pSession->SetPeerUUID(strUUID.c_str()); CErrno nResult = pNetHandler->Init(); // if (nResult.IsSuccess()) { m_pNetReactor->AddNetHandler(pNetHandler); } SPeerKey objCreateInfo; objCreateInfo.strAddress = pAddress; objCreateInfo.strNodeName = strNodeName; objCreateInfo.strUUID = strUUID; objCreateInfo.usPort = usPort; SPeerInfo objPeer; objPeer.nSessionID = pSession->GetSessionID(); objPeer.nPeerSessionID = -1; objPeer.usPeerPort = usPort; objPeer.nState = PING_STATE_PINGING; objPeer.strAddress = pAddress; objPeer.strCurNodeName = strNodeName; objPeer.bConected = false; objPeer.bReconnectState = pSession->GetReconnectState(); AddPeerSession(objCreateInfo , objPeer); return pNetHandler; }