CppServer  1.0.0.0
C++ Server Library
server.h
Go to the documentation of this file.
1 
9 #ifndef CPPSERVER_NANOMSG_SERVER_H
10 #define CPPSERVER_NANOMSG_SERVER_H
11 
12 #include "socket.h"
13 
14 #include "threads/thread.h"
15 
16 #include <atomic>
17 #include <thread>
18 
19 namespace CppServer {
20 namespace Nanomsg {
21 
23 
29 class Server
30 {
31 public:
33 
39  explicit Server(Domain domain, Protocol protocol, const std::string& address, bool threading = true);
40  Server(const Server&) = delete;
41  Server(Server&&) = default;
42  virtual ~Server();
43 
44  Server& operator=(const Server&) = delete;
45  Server& operator=(Server&&) = default;
46 
48  Socket& socket() noexcept { return _socket; }
49 
51  bool IsStarted() const noexcept { return _socket.IsOpened() && _socket.IsConnected(); }
52 
54 
57  bool Start();
59 
62  bool Stop();
64 
67  bool Restart();
68 
70 
75  size_t Send(const void* buffer, size_t size);
77 
81  size_t Send(const std::string& text) { return Send(text.data(), text.size()); }
83 
87  size_t Send(const Message& message) { return Send(message.buffer(), message.size()); }
88 
90 
95  size_t TrySend(const void* buffer, size_t size);
97 
101  size_t TrySend(const std::string& text) { return TrySend(text.data(), text.size()); }
103 
107  size_t TrySend(const Message& message) { return TrySend(message.buffer(), message.size()); }
108 
110 
114  size_t Receive(Message& message);
115 
117 
121  size_t TryReceive(Message& message);
122 
123 protected:
125 
128  virtual void onThreadInitialize() {}
130 
133  virtual void onThreadCleanup() {}
134 
136  virtual void onStarted() {}
138  virtual void onStopped() {}
139 
141  virtual void onIdle() { CppCommon::Thread::Yield(); }
142 
144 
147  virtual void onReceived(Message& message) {}
148 
150 
154  virtual void onError(int error, const std::string& message) {}
155 
156 private:
157  // Nanomsg endpoint address
158  std::string _address;
159  // Nanomsg socket
160  Socket _socket;
161  std::atomic<bool> _connected;
162  // Nanomsg server thread
163  bool _threading;
164  std::thread _thread;
165  std::atomic<bool> _joining;
166  std::atomic<bool> _receiving;
167 
169  void ServerLoop();
170 };
171 
172 } // namespace Nanomsg
173 } // namespace CppServer
174 
175 #endif // CPPSERVER_NANOMSG_SERVER_H
Nanomsg server.
Definition: server.h:29
size_t TrySend(const std::string &text)
Try to send a text string to the client in non-blocking mode.
Definition: server.h:101
virtual void onStarted()
Handle server started notification.
Definition: server.h:136
size_t Send(const void *buffer, size_t size)
Send data to the client.
Definition: server.cpp:157
Nanomsg message.
Definition: message.h:29
bool Start()
Start the server.
Definition: server.cpp:46
size_t size() const noexcept
Get the message size.
Definition: message.h:71
size_t TryReceive(Message &message)
Try to receive a message from the client in non-blocking mode.
Definition: server.cpp:211
Socket & socket() noexcept
Get the Nanomsg socket.
Definition: server.h:48
C++ Server project definitions.
Definition: asio.h:24
bool Restart()
Restart the server.
Definition: server.cpp:100
bool Stop()
Stop the server.
Definition: server.cpp:73
virtual void onThreadCleanup()
Cleanup thread handler.
Definition: server.h:133
virtual void onIdle()
Handle server idle notification.
Definition: server.h:141
virtual void onThreadInitialize()
Initialize thread handler.
Definition: server.h:128
Nanomsg socket.
Definition: socket.h:29
Server(Domain domain, Protocol protocol, const std::string &address, bool threading=true)
Initialize server with a given domain, protocol and endpoint address.
Definition: server.cpp:19
size_t Send(const std::string &text)
Send a text string to the client.
Definition: server.h:81
uint8_t * buffer() noexcept
Get the message buffer.
Definition: message.h:67
Server & operator=(const Server &)=delete
virtual void onReceived(Message &message)
Handle message received notification.
Definition: server.h:147
bool IsStarted() const noexcept
Is the server started?
Definition: server.h:51
bool IsConnected() const noexcept
Is socket connected?
Definition: socket.h:84
size_t Send(const Message &message)
Send a message to the client.
Definition: server.h:87
Protocol
Nanomsg protocol.
Definition: nanomsg.h:56
Domain
Nanomsg domain.
Definition: nanomsg.h:41
size_t Receive(Message &message)
Receive a message from the client.
Definition: server.cpp:189
virtual void onError(int error, const std::string &message)
Handle error notification.
Definition: server.h:154
Nanomsg socket definition.
size_t TrySend(const void *buffer, size_t size)
Try to send data to the client in non-blocking mode.
Definition: server.cpp:173
bool IsOpened() const noexcept
Is socket opened?
Definition: socket.h:82
size_t TrySend(const Message &message)
Try to send a message to the client in non-blocking mode.
Definition: server.h:107
virtual void onStopped()
Handle server stopped notification.
Definition: server.h:138