Beispiel #1
0
TSocketObj*	CIocpServer::GetFreeSocketObj()
{
	CCriSecLock locallock(m_csFreeSocket);

	TSocketObj* pSocketObj = NULL;
	if(m_lsFreeSocket.size() > 0)
	{
		pSocketObj = m_lsFreeSocket.front();
		m_lsFreeSocket.pop_front();
	}
	else
		pSocketObj = CreateSocketObj();

	return pSocketObj;
}
Beispiel #2
0
TSocketObj*	CTcpServer::GetFreeSocketObj(CONNID dwConnID, SOCKET soClient)
{
	DWORD dwIndex;
	TSocketObj* pSocketObj = nullptr;

	if(m_lsFreeSocket.TryLock(&pSocketObj, dwIndex))
	{
		if(::GetTimeGap32(pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime)
			m_lsFreeSocket.ReleaseLock(nullptr, dwIndex);
		else
		{
			m_lsFreeSocket.ReleaseLock(pSocketObj, dwIndex);
			pSocketObj = nullptr;
		}
	}

	if(!pSocketObj) pSocketObj = CreateSocketObj();
	pSocketObj->Reset(dwConnID, soClient);

	return pSocketObj;
}
Beispiel #3
0
TSocketObj*	CTcpAgent::GetFreeSocketObj(CONNID dwConnID, SOCKET soClient)
{
	TSocketObj* pSocketObj = nullptr;

	if(m_lsFreeSocket.size() > 0)
	{
		CCriSecLock locallock(m_csFreeSocket);

		if(m_lsFreeSocket.size() > 0)
		{
			pSocketObj = m_lsFreeSocket.front();

			if(::GetTimeGap32(pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime)
				m_lsFreeSocket.pop_front();
			else
				pSocketObj = nullptr;
		}
	}

	if(!pSocketObj) pSocketObj = CreateSocketObj();
	pSocketObj->Reset(dwConnID, soClient);

	return pSocketObj;
}
Beispiel #4
0
TUdpSocketObj*	CUdpServer::GetFreeSocketObj()
{
	TUdpSocketObj* pSocketObj = nullptr;

	if(m_lsFreeSocket.size() > 0)
	{
		CCriSecLock locallock(m_csFreeSocket);

		if(m_lsFreeSocket.size() > 0)
		{
			pSocketObj = m_lsFreeSocket.front();

			if(::GetTimeGap32(pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime)
				m_lsFreeSocket.pop_front();
			else
				pSocketObj = nullptr;
		}
	}

	if(!pSocketObj) pSocketObj	= CreateSocketObj();
	pSocketObj->extra			= nullptr;

	return pSocketObj;
}
Beispiel #5
0
void LoopGMServer()
{

	HandleDataBuf(OnDispatchMessage);
	int nRet = WaitForSingleObject(ListenEvent, 100);
	if (nRet == WAIT_FAILED)
	{
		//printf("WaitForSingleObject Failed!\n");
		//break;
	}
	else if (nRet == WSA_WAIT_TIMEOUT)	//定时显示连接数
	{
		//printf("当前套接字连接数:%d\n", g_nCurrentConnections);
	}
	else	//有新的连接请求
	{
		ResetEvent(ListenEvent);
		while (true)
		{
			SOCKADDR_IN ClientAddr;
			int AddrLen = sizeof(ClientAddr);
			char sAct[64];
			SOCKET AcceptSock = accept(ServerSock, (LPSOCKADDR)&ClientAddr, &AddrLen);
			if (AcceptSock == SOCKET_ERROR)
			{
				break;
			}
			sprintf(sAct, "IP地址(%s)连接了区域服的GM服务\n", inet_ntoa(ClientAddr.sin_addr));
			AddInfo(sAct);
			LPSOCKET_OBJ pSockObj = CreateSocketObj(AcceptSock);
			pSockObj->m_clientaddr = ClientAddr;
			WSAEventSelect(pSockObj->m_socket, pSockObj->m_event, FD_READ | FD_WRITE | FD_CLOSE);
			AssignToFreeThread(pSockObj);
		}
	}
}