From f104855427583aa06451980479cd4c234410f8e0 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Fri, 20 Jul 2018 14:52:34 +0000 Subject: [PATCH] added tcpsvr02.cpp --- qse/samples/si/tcpsvr02.cpp | 165 ++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 qse/samples/si/tcpsvr02.cpp diff --git a/qse/samples/si/tcpsvr02.cpp b/qse/samples/si/tcpsvr02.cpp new file mode 100644 index 00000000..f675f888 --- /dev/null +++ b/qse/samples/si/tcpsvr02.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#if defined(_WIN32) +# include +#endif + +#include +#include +#include + +QSE::Mutex g_prt_mutex; + +#if defined(QSE_LANG_CPP11) +QSE::TcpServerL* g_server; +#else + +class ClientHandler +{ +public: + int operator() (QSE::TcpServer* server, QSE::TcpServer::Worker* worker) + { + qse_char_t addrbuf[128]; + qse_uint8_t bb[256]; + qse_ssize_t n; + + worker->address.toStrBuf(addrbuf, QSE_COUNTOF(addrbuf)); + g_prt_mutex.lock(); + qse_printf (QSE_T("hello word..from %s[%zu]\n"), addrbuf, worker->getWid()); + g_prt_mutex.unlock(); + + QSE::Sttp sttp (&worker->socket); + QSE::SttpCmd cmd; + while (!server->isStopRequested()) + { + int n = sttp.receiveCmd(cmd); + if (n <= -1) + { + qse_printf (QSE_T("%s[%zu] -> got error\n"), addrbuf, worker->getWid()); + break; + } + else if (n == 0) break; + + g_prt_mutex.lock(); + qse_printf (QSE_T("received command %s\n"), cmd.name); + g_prt_mutex.unlock(); + } + + g_prt_mutex.lock(); + qse_printf (QSE_T("byte to %s -> wid %zu\n"), addrbuf, worker->getWid()); + g_prt_mutex.unlock(); + return 0; + } +}; + +static QSE::TcpServerF* g_server; +#endif + + +static int test1 (void) +{ + QSE::HeapMmgr heap_mmgr (QSE::Mmgr::getDFL(), 30000); + +#if defined(QSE_LANG_CPP11) + QSE::TcpServerL server ( + + // workload by lambda + ([&server](QSE::TcpServer::Worker* worker) { + qse_char_t addrbuf[128]; + qse_uint8_t bb[256]; + qse_ssize_t n; + + worker->address.toStrBuf(addrbuf, QSE_COUNTOF(addrbuf)); + g_prt_mutex.lock(); + qse_printf (QSE_T("hello word..from %s --> wid %zu\n"), addrbuf, worker->getWid()); + g_prt_mutex.unlock(); + + QSE::Sttp sttp (&worker->socket); + QSE::SttpCmd cmd; + while (!server.isStopRequested()) + { + int n = sttp.receiveCmd(&cmd); + if (n <= -1) + { + qse_printf (QSE_T("%s<%zu> --> got error\n"), addrbuf, worker->getWid()); + break; + } + else if (n == 0) break; + + if (cmd.name == QSE_T("quit")) + { + break; + } + + g_prt_mutex.lock(); + qse_printf (QSE_T("%s<%zu> --> received command %s\n"), addrbuf, worker->getWid(), cmd.name.getBuffer()); + g_prt_mutex.unlock(); + sttp.sendCmd(cmd); + } + + g_prt_mutex.lock(); + qse_printf (QSE_T("byte to %s -> wid %zu\n"), addrbuf, worker->getWid()); + g_prt_mutex.unlock(); + return 0; + }), + + &heap_mmgr + + ); +#else + QSE::TcpServerF server (&heap_mmgr); +#endif + + server.setThreadStackSize (256000); + g_server = &server; + //server.start (QSE_T("0.0.0.0:9998")); + server.start (QSE_T("[::]:9998,0.0.0.0:9998")); + //server.start (QSE_T("[fe80::1c4:a90d:a0f0:d52%wlan0]:9998,0.0.0.0:9998")); + g_server = QSE_NULL; + return 0; +} + +static void handle_sigint (int sig) +{ + if (g_server) g_server->stop (); +} + +int main () +{ +#if defined(_WIN32) + char locale[100]; + UINT codepage = GetConsoleOutputCP(); + if (codepage == CP_UTF8) + { + /*SetConsoleOUtputCP (CP_UTF8);*/ + qse_setdflcmgrbyid (QSE_CMGR_UTF8); + } + else + { + sprintf (locale, ".%u", (unsigned int)codepage); + setlocale (LC_ALL, locale); + /*qse_setdflcmgrbyid (QSE_CMGR_SLMB);*/ + } +#else + setlocale (LC_ALL, ""); + /*qse_setdflcmgrbyid (QSE_CMGR_SLMB);*/ +#endif + + qse_open_stdsios (); + + QSE::App::setSignalHandler (SIGINT, handle_sigint); + test1(); + QSE::App::unsetSignalHandler (SIGINT); + + qse_close_stdsios (); + + return 0; +}