Beispiel #1
0
EnIocpAction CUdpServer::CheckIocpCommand(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey)
{
	EnIocpAction action = IOCP_ACT_GOON;

	if(pOverlapped == nullptr)
	{
		if(dwBytes == IOCP_CMD_SEND)
		{
			DoSend((CONNID)ulCompKey);
			action = IOCP_ACT_CONTINUE;
		}
		else if(dwBytes == IOCP_CMD_ACCEPT)
		{
			DoAccept();
			action = IOCP_ACT_CONTINUE;
		}
		else if(dwBytes == IOCP_CMD_DISCONNECT)
		{
			ForceDisconnect((CONNID)ulCompKey);
			action = IOCP_ACT_CONTINUE;
		}
		else if(dwBytes == IOCP_CMD_EXIT && ulCompKey == 0)
			action = IOCP_ACT_BREAK;
		else
			VERIFY(FALSE);
	}

	return action;
}
Beispiel #2
0
TazanServer::TazanServer(boost::asio::io_service& io_service, short port)
: Acceptor(io_service, tcp::endpoint(tcp::v4(), port)),
AcceptedSocket(io_service)
{
	InitLockSource(lockSource);

	option_nodelay = boost::asio::ip::tcp::no_delay(true);

	Acceptor.set_option(option_nodelay);

	DoAccept();
}
Beispiel #3
0
void TazanServer::DoAccept()
{
	Acceptor.async_accept(AcceptedSocket,
		[this](boost::system::error_code ec)
	{
		if (!ec)
		{
			Lock lock(lockSource);

			AcceptedSocket.set_option(option_nodelay);
			
			std::make_shared<Client>(std::move(AcceptedSocket))->OnConnected((TazanServer*)this);
			printf("A Client Connected, Count : %d\n", GetClientCount());
		}

		DoAccept();
	});
}
Beispiel #4
0
EnIocpAction CTcpServer::CheckIocpCommand(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey)
{
	ASSERT(pOverlapped == nullptr);

	EnIocpAction action = IOCP_ACT_CONTINUE;
	CONNID dwConnID		= (CONNID)ulCompKey;

	switch(dwBytes)
	{
	case IOCP_CMD_SEND		: DoSend(dwConnID)			; break;
	case IOCP_CMD_ACCEPT	: DoAccept()				; break;
	case IOCP_CMD_DISCONNECT: ForceDisconnect(dwConnID)	; break;
	case IOCP_CMD_EXIT		: action = IOCP_ACT_BREAK	; break;
	default					: CheckError(FindSocketObj(dwConnID), SO_CLOSE, (int)dwBytes);
	}

	return action;
}
Beispiel #5
0
	dword ServerTask()
	{
		CScopedLock _lock;

		_lock.unlock();

		wcout(_T("ServerTask"));

		for ( ;; )
		{
			if ( TestAccept(100) )
			{
				_current = OK_NEW_OPERATOR CTcpClient();
				DoAccept(_current);
				break;
			}
			else
			{
				_lock.lock();
				if ( _bExit )
					return 1;
				_lock.unlock();
			}
		}

		_lock.lock();

		CAbstractThreadCallback* pCallback = 
			OK_NEW_OPERATOR CThreadCallback<CTestTCPServerKeepAlive>(this, &CTestTCPServerKeepAlive::ClientTask);

		_tcpclients.Append(_current);
		_current = NULL;
		//pCallback->addRef();
		_callback.Append(pCallback);
		_threadpool.AddTask(pCallback);
		return 0;
	}
Beispiel #6
0
int CTcpServer::CheckSpecialIndative(OVERLAPPED* pOverlapped, DWORD dwBytes, TSocketObj* pSocketObj)
{
	int indative = 0;

	if(pOverlapped == nullptr)
	{
		if(dwBytes == IOCP_SI_ACCEPT)
		{
			DoAccept();
			indative = IOCP_SI_RS_CONTINUE;
		}
		else if(dwBytes == IOCP_SI_DISCONNECT)
		{
			ForceDisconnect((CONNID)pSocketObj);
			indative = IOCP_SI_RS_CONTINUE;
		}
		else if(dwBytes == IOCP_SI_EXIT && pSocketObj == nullptr)
			indative = IOCP_SI_RS_BREAK;
		else
			VERIFY(FALSE);
	}

	return indative;
}
Beispiel #7
0
int CUdpServer::CheckSpecialIndative(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey)
{
	int indative = IOCP_SI_RS_GONO;

	if(pOverlapped == nullptr)
	{
		if(dwBytes == IOCP_SI_ACCEPT)
		{
			DoAccept();
			indative = IOCP_SI_RS_CONTINUE;
		}
		else if(dwBytes == IOCP_SI_DISCONNECT)
		{
			ForceDisconnect((CONNID)ulCompKey);
			indative = IOCP_SI_RS_CONTINUE;
		}
		else if(dwBytes == IOCP_SI_EXIT && ulCompKey == 0)
			indative = IOCP_SI_RS_BREAK;
		else
			VERIFY(FALSE);
	}

	return indative;
}
void QCustomDialog::accept() {
    SaveWindowState();  // Save Window size and position
    if (DoAccept())     // call overloaded function
        done(0);        // Close dialog
}