summaryrefslogtreecommitdiffhomepage
path: root/NetEx
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-03-28 22:30:38 +0200
committerAki <please@ignore.pl>2022-03-28 22:30:38 +0200
commitb9304640ae7a85d55d7dbc498f7cd875a2f1e215 (patch)
tree97ef029d3a893ca484bc48b7fa4096e233580079 /NetEx
parenta8c5ec05320d58347ed434964e05818b082f00b4 (diff)
downloadstarshatter-b9304640ae7a85d55d7dbc498f7cd875a2f1e215.zip
starshatter-b9304640ae7a85d55d7dbc498f7cd875a2f1e215.tar.gz
starshatter-b9304640ae7a85d55d7dbc498f7cd875a2f1e215.tar.bz2
Removed windows headers and moved NetServer a bit closer to standard
Diffstat (limited to 'NetEx')
-rw-r--r--NetEx/NetServer.cpp102
-rw-r--r--NetEx/NetServer.h21
2 files changed, 39 insertions, 84 deletions
diff --git a/NetEx/NetServer.cpp b/NetEx/NetServer.cpp
index 665b69b..7357928 100644
--- a/NetEx/NetServer.cpp
+++ b/NetEx/NetServer.cpp
@@ -3,34 +3,29 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Network Server Pump for HTTP Server
+ OVERVIEW
+ ========
+ Network Server Pump for HTTP Server
*/
#include "NetServer.h"
-#include "NetHost.h"
-#include "NetLayer.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <mmsystem.h>
-
-// +-------------------------------------------------------------------+
+#include <chrono>
+#include <cstdint>
+#include <cstring>
+#include <thread>
-DWORD WINAPI NetServerListenerProc(LPVOID link);
-DWORD WINAPI NetServerReaderProc(LPVOID link);
-
-struct PoolItem { NetServer* server; int thread_index; };
+#include "NetHost.h"
+#include "NetLayer.h"
// +-------------------------------------------------------------------+
-NetServer::NetServer(WORD port, int nthreads)
- : sock(true), pool(0), conn(0), poolsize(nthreads), err(0),
- server_shutdown(false), hreader(0)
+NetServer::NetServer(std::uint16_t port, int nthreads)
+ : sock(true), pool(nullptr), conn(nullptr), poolsize(nthreads), err(0),
+ server_shutdown(false)
{
NetHost host;
addr = NetAddr(host.Address().IPAddr(), port);
@@ -40,27 +35,19 @@ NetServer::NetServer(WORD port, int nthreads)
if (poolsize < 1) poolsize = 1;
- pool = new HANDLE[poolsize];
+ pool = new std::thread[poolsize];
conn = new NetSock*[poolsize];
clients = new NetAddr[poolsize];
if (pool && conn && clients) {
- ZeroMemory(pool, poolsize * sizeof(HANDLE));
- ZeroMemory(conn, poolsize * sizeof(NetSock*));
-
- DWORD thread_id = 0;
+ std::memset(pool, 0, poolsize * sizeof(std::thread));
+ std::memset(conn, 0, poolsize * sizeof(NetSock*));
for (int i = 0; i < poolsize; i++) {
- thread_id = 0;
- PoolItem* item = new PoolItem;
- item->server = this;
- item->thread_index = i;
-
- pool[i] = CreateThread(0, 4096, NetServerReaderProc, (LPVOID) item, 0, &thread_id);
+ pool[i] = std::thread([=]{ Reader(i); });
}
- thread_id = 0;
- hreader = CreateThread(0, 4096, NetServerListenerProc, (LPVOID) this, 0, &thread_id);
+ hreader = std::thread([&]{ Listener(); });
}
}
@@ -71,17 +58,17 @@ NetServer::~NetServer()
sock.close();
}
- if (hreader) {
- WaitForSingleObject(hreader, 1000);
- CloseHandle(hreader);
+ if (hreader.joinable()) {
+ hreader.join();
}
if (pool && poolsize) {
for (int i = 0; i < poolsize; i++) {
- WaitForSingleObject(pool[i], 1000);
- CloseHandle(pool[i]);
+ if (pool[i].joinable()) {
+ pool[i].join();
+ }
delete conn[i];
- conn[i] = 0;
+ conn[i] = nullptr;
}
delete [] pool;
@@ -100,17 +87,7 @@ NetServer::Shutdown()
// +--------------------------------------------------------------------+
-DWORD WINAPI NetServerListenerProc(LPVOID link)
-{
- NetServer* net_server = (NetServer*) link;
-
- if (net_server)
- return net_server->Listener();
-
- return (DWORD) E_POINTER;
-}
-
-DWORD
+void
NetServer::Listener()
{
while (!server_shutdown) {
@@ -132,37 +109,16 @@ NetServer::Listener()
// wait for a thread to become not busy
if (s)
- Sleep(10);
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
-
- return 0;
}
// +--------------------------------------------------------------------+
-DWORD WINAPI NetServerReaderProc(LPVOID link)
-{
- if (!link) return (DWORD) E_POINTER;
-
- PoolItem* item = (PoolItem*) link;
- NetServer* net_server = item->server;
- int index = item->thread_index;
-
- delete item;
-
- if (net_server)
- return net_server->Reader(index);
-
- return (DWORD) E_POINTER;
-}
-
-DWORD
+void
NetServer::Reader(int index)
{
- // init random seed for this thread:
- srand(timeGetTime());
-
while (!server_shutdown) {
sync.lock();
NetSock* s = conn[index];
@@ -208,11 +164,9 @@ NetServer::Reader(int index)
sync.unlock();
}
else {
- Sleep(5);
+ std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}
-
- return 0;
}
// +--------------------------------------------------------------------+
diff --git a/NetEx/NetServer.h b/NetEx/NetServer.h
index 0869f2a..1fcc938 100644
--- a/NetEx/NetServer.h
+++ b/NetEx/NetServer.h
@@ -3,21 +3,22 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Network Server Pump for HTTP Server
+ OVERVIEW
+ ========
+ Network Server Pump for HTTP Server
*/
#ifndef NetServer_h
#define NetServer_h
+#include <cstdint>
#include <mutex>
+#include <thread>
-#include <windows.h>
#include "NetAddr.h"
#include "NetGram.h"
#include "NetSock.h"
@@ -30,14 +31,14 @@ class NetServer
public:
static const char* TYPENAME() { return "NetServer"; }
- NetServer(WORD port, int poolsize=1);
+ NetServer(std::uint16_t port, int poolsize=1);
virtual ~NetServer();
int operator == (const NetServer& l) const { return addr == l.addr; }
virtual void Shutdown();
- virtual DWORD Listener();
- virtual DWORD Reader(int index);
+ virtual void Listener();
+ virtual void Reader(int index);
virtual Text ProcessRequest(Text request, const NetAddr& addr);
virtual Text DefaultResponse();
@@ -52,8 +53,8 @@ protected:
NetAddr client_addr;
int poolsize;
- HANDLE hreader;
- HANDLE* pool;
+ std::thread hreader;
+ std::thread* pool;
NetSock** conn;
NetAddr* clients;
int err;