69 lines
1.4 KiB
C++
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
|