Example #1
0
	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();
	}
Example #2
0
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;
}
Example #3
0
	INT32 CoCreate(void ** pCoID, coroutine_func pFunc, void * pArg)
	{
		*pCoID = CreateFiber(0, pFunc, pArg);
		if (*pCoID == NULL)
		{
			gErrorStream("create fiber failed.\n");
		}

		return 0;
	}
Example #4
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;
	}