zeek/auxil/libunistd/portable/ipc/BsdSocketServer.h
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

69 lines
1.4 KiB
C++

// portable/BsdSocketServer.h
// Created by Robin Rowe on 11/27/2015
// Copyright (c) 2015 Robin.Rowe@CinePaint.org
// License open source MIT
#ifndef BsdSocketServer_h
#define BsdSocketServer_h
#include "PacketSocket.h"
#include "BsdSocketPool.h"
namespace portable
{
class BsdSocketServer
: public PacketSocket
{
protected:
std::thread listenWorker;
BsdSocketPool pool;
const unsigned bufsize;
bool isPacketRun;
SOCKET ListenAccept();
static void ListenMain(BsdSocketServer* self)
{ self->ListenRun();
}
static void PacketMain(BsdSocketServer* self)
{ self->PacketRun();
}
public:
virtual ~BsdSocketServer()
{}
BsdSocketServer(unsigned bufsize)
: bufsize(bufsize)
, isPacketRun(true)
{ SetAsyncMode();
}
unsigned GetConnectionCount() const
{ return pool.GetCount();
}
bool Open(int serverPort,int maxStreams,bool isPacketRun=true);
void Close() override
{ Stop();
PacketSocket::Close();
}
virtual bool Login(SOCKET fd)
{ (void)fd;
return false;// nobody can login, override function to set true
}
void Start() override
{ listenWorker=std::thread(ListenMain,this);
listenWorker.detach();
if(isPacketRun)
{ packetWorker=std::thread(PacketMain,this);
packetWorker.detach();
} }
virtual void ListenRun();
virtual void OnConnect(SOCKET sock) const
{ (void) sock;
}
virtual void OnDisonnect(SOCKET sock) const
{ (void)sock;
}
virtual void PacketRun();
};
}
#endif