BOOL OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc; if(WSAGETSELECTERROR(lParam)!=0) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[1]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } int acc_sin_len = sizeof(acc_sin); rab_socket = accept(srv_socket,(LPSOCKADDR) &acc_sin,(int FAR*) &acc_sin_len); if(rab_socket == INVALID_SOCKET) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[2]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } rc = WSAAsyncSelect(rab_socket,hWnd,WSA_NETEVENT,FD_READ|FD_CLOSE); if(rc>0) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[3]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } TCHAR wtmp[255]; wsprintf(wtmp,TEXT("[%lu] Хост %lu подключён"), clock(), acc_sin.sin_addr.s_addr); SendMessage(hLst,LB_ADDSTRING,0,(LPARAM)wtmp); }
static void SigHandler(int sig) { string str = "Received signal "; if (sig == SIGINT) { str += "SIGINT"; } else if (sig == SIGTERM) { str += "SIGTERM"; } else if (sig == SIGQUIT) { str += "SIGQUIT"; } else if (sig == SIGHUP) { str += "SIGHUP"; } else { str += Util::toString(sig); } str += " ending...\n"; fprintf(stdout,"%s",str.c_str()); fflush(stdout); if (!bDaemon) { Log(str); } else { logging(true, str); } bIsClose = true; ServerStop(); // restore to default... struct sigaction sigact; sigact.sa_handler = SIG_DFL; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; sigaction(sig, &sigact, NULL); }
// Oбрабатывает сообщения в главном окне. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Разобрать выбор в меню: switch (wmId) { case IDM_START: ServerStart(hWnd); break; case IDM_STOP: ServerStop(hWnd); break; case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_OPTIONS: DialogBox(hInst, MAKEINTRESOURCE(IDD_OPTIONS), hWnd, Options); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: добавьте любой код отрисовки... EndPaint(hWnd, &ps); break; case WM_CREATE: OnCreate(); break; case WM_SIZE: MoveWindow(hLst,0,0,LOWORD(lParam),HIWORD(lParam),TRUE); break; case WSA_ACCEPT: OnWSAAccept(hWnd,message,wParam,lParam); break; case WSA_NETEVENT: OnWSANetEvent(hWnd,message,wParam,lParam); break; case WM_DESTROY: WSACleanup(); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void ServerRestart(HWND hWnd, HWND hCaller, UINT uMsg) { if(!gServer.hProcess) ServerStart(hWnd, hCaller, uMsg); else { ServerStop(hWnd, hCaller, uMsg); ServerStart(hWnd, hCaller, uMsg); } }
static void WINAPI CtrlHandler(DWORD dwCtrl) { switch(dwCtrl) { case SERVICE_CONTROL_SHUTDOWN: case SERVICE_CONTROL_STOP: ss.dwCurrentState = SERVICE_STOP_PENDING; bIsClose = true; ServerStop(); case SERVICE_CONTROL_INTERROGATE: // Fall through to send current status. break; default: break; } if(SetServiceStatus(ssh, &ss) == false) { AppendLog("CtrlHandler::SetServiceStatus failed ("+string((uint32_t)GetLastError())+")!"); } }
MainWidget::MainWidget(QWidget *parent) : QWidget(parent) { //Window Settings this->setWindowTitle(tr("Test Chat Server")); this->resize(600,250); //Layout LayMain = new QVBoxLayout(this); EdtDisplay = new QTextEdit(); EdtDisplay->setReadOnly(true); EdtDisplay->setFontFamily("courier"); EdtDisplay->setFontPointSize(10); LayMain->addWidget(EdtDisplay); LayConfig = new QHBoxLayout(); LayMain->addLayout(LayConfig); LblPort = new QLabel(tr("Port:")); LayConfig->addWidget(LblPort); BoxPort = new QSpinBox(); BoxPort->setMinimum(1024); BoxPort->setMaximum(49151); BoxPort->setValue(2342); LayConfig->addWidget(BoxPort); LayConfig->addStretch(); LayButtons = new QHBoxLayout(); LayMain->addLayout(LayButtons); BtnStart = new QPushButton(tr("Server Starten")); BtnStop = new QPushButton(tr("Server Stoppen")); BtnQuit = new QPushButton(tr("Beenden")); LayButtons->addWidget(BtnStart); LayButtons->addWidget(BtnStop); LayButtons->addStretch(); LayButtons->addWidget(BtnQuit); connect(BtnQuit, SIGNAL(clicked()), this, SLOT(close())); connect(BtnStart, SIGNAL(clicked()), this, SLOT(ServerStart())); connect(BtnStop, SIGNAL(clicked()), this, SLOT(ServerStop())); Server = new ChatServer(); connect(Server, SIGNAL(newLog(QString)), this, SLOT(handleLog(QString))); handleLog(tr("Programm gestartet, Server läuft nicht.")); handleLog(tr("Klicke auf Start um den Server zu starten.")); }
StepManiaLanServer::~StepManiaLanServer() { ServerStop(); }
void AgentClose(HWND hWnd, HWND hCaller, UINT uMsg) { ServerStop(hWnd, hCaller, uMsg); ShowWindow(hWnd, SW_HIDE); DestroyWindow(hWnd); }