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; }
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(); }
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(); }); }
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; }
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; }
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; }
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 }