-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathServer.hpp
136 lines (112 loc) · 2.56 KB
/
Server.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#pragma once
#include <nstd/String.hpp>
class Socket;
class Server
{
public:
class Client
{
public:
class ICallback
{
public:
virtual void onRead() = 0;
virtual void onWrite() = 0;
virtual void onClosed() = 0;
protected:
ICallback() {}
~ICallback() {}
};
public:
bool write(const byte *data, usize size, usize *postponed = 0);
bool read(byte *buffer, usize maxSize, usize &size);
void suspend();
void resume();
bool isSuspended() const;
usize getSendBufferSize() const;
Socket& getSocket();
private:
Client(const Client &);
Client &operator=(const Client &);
Client();
~Client();
};
class Listener
{
public:
class ICallback
{
public:
virtual Client::ICallback *onAccepted(Client &client, uint32 ip, uint16 port) = 0;
protected:
ICallback() {}
~ICallback() {}
};
private:
Listener(const Listener &);
Listener &operator=(const Listener &);
Listener();
~Listener();
};
class Establisher
{
public:
class ICallback
{
public:
virtual Client::ICallback *onConnected(Client &client) = 0;
virtual void onAbolished() = 0;
protected:
ICallback() {}
~ICallback() {}
};
private:
Establisher(const Establisher &);
Establisher &operator=(const Establisher &);
Establisher();
~Establisher();
};
class Timer
{
public:
class ICallback
{
public:
virtual void onActivated() = 0;
protected:
ICallback() {}
~ICallback() {}
};
private:
Timer(const Timer &);
Timer &operator=(const Timer &);
Timer();
~Timer();
};
public:
Server();
~Server();
void setKeepAlive(bool enable = true);
void setNoDelay(bool enable = true);
void setSendBufferSize(int size);
void setReceiveBufferSize(int size);
void setReuseAddress(bool enable);
Listener *listen(uint32 addr, uint16 port, Listener::ICallback &callback);
Establisher *connect(uint32 addr, uint16 port, Establisher::ICallback &callback);
Establisher *connect(const String &host, uint16 port, Establisher::ICallback &callback);
Timer *time(int64 interval, Timer::ICallback &callback);
Client *pair(Client::ICallback &callback, Socket &socket);
void remove(Client &client);
void remove(Listener &listener);
void remove(Establisher &establisher);
void remove(Timer &timer);
void run();
void interrupt();
void clear();
private:
Server(const Server &);
Server &operator=(const Server &);
private:
class Private;
Private *_p;
};