66 lines
1.3 KiB
C++
66 lines
1.3 KiB
C++
|
/*
|
|||
|
* server.hpp
|
|||
|
*
|
|||
|
* Created on: 5 сент. 2022 г.
|
|||
|
* Author: alexander
|
|||
|
*/
|
|||
|
|
|||
|
#pragma once
|
|||
|
|
|||
|
//#include <algorithm>
|
|||
|
|
|||
|
#include <socket.hpp>
|
|||
|
#include <address.hpp>
|
|||
|
#include <memory>
|
|||
|
#include <vector>
|
|||
|
#include <string>
|
|||
|
|
|||
|
namespace zh
|
|||
|
{
|
|||
|
|
|||
|
class Server // @suppress("Class has a virtual method and non-virtual destructor")
|
|||
|
{
|
|||
|
protected:
|
|||
|
std::unique_ptr<Socket> _socket;
|
|||
|
std::unique_ptr<Address> _local, _client;
|
|||
|
unsigned int _sizeClient;
|
|||
|
const unsigned short int _port;
|
|||
|
int _connfd;
|
|||
|
public:
|
|||
|
Server(const unsigned short int port);
|
|||
|
virtual void bind() = 0;
|
|||
|
virtual void listen() = 0;
|
|||
|
};
|
|||
|
|
|||
|
typedef void (*hook)(std::string buffer, Server &s);
|
|||
|
|
|||
|
class ServerTCP: public Server // @suppress("Class has a virtual method and non-virtual destructor")
|
|||
|
{
|
|||
|
private:
|
|||
|
bool _bind;
|
|||
|
const unsigned short int _sizeBuffer;
|
|||
|
std::unique_ptr<char[]> _buffer;
|
|||
|
|
|||
|
class Hook
|
|||
|
{
|
|||
|
private:
|
|||
|
std::string _command;
|
|||
|
hook _handler;
|
|||
|
public:
|
|||
|
Hook(std::string command, hook handler);
|
|||
|
void execute(std::string buffer, Server &s);
|
|||
|
};
|
|||
|
|
|||
|
std::vector<Hook> _hooks;
|
|||
|
|
|||
|
void chat();
|
|||
|
public:
|
|||
|
ServerTCP(const unsigned short int port, const unsigned short int sizeBuffer = 1024);
|
|||
|
void bind();
|
|||
|
void listen();
|
|||
|
void registerHook(std::string command, hook handler);
|
|||
|
};
|
|||
|
|
|||
|
}
|
|||
|
|