BeeeOn Gateway  v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
TCPConsole.h
1 #pragma once
2 
3 #include <iosfwd>
4 
5 #include <Poco/Mutex.h>
6 #include <Poco/Semaphore.h>
7 #include <Poco/SharedPtr.h>
8 #include <Poco/Timespan.h>
9 
10 #include <Poco/Net/IPAddress.h>
11 #include <Poco/Net/Socket.h>
12 #include <Poco/Net/SocketAddress.h>
13 #include <Poco/Net/SocketStream.h>
14 
15 #include "io/Console.h"
16 #include "ssl/SSLServer.h"
17 #include "util/Loggable.h"
18 
19 namespace Poco {
20 namespace Net {
21 
22 class ServerSocket;
23 
24 }
25 }
26 
27 namespace BeeeOn {
28 
30 public:
31  typedef Poco::SharedPtr<TCPConsoleSessionImpl> Ptr;
32 
33  TCPConsoleSessionImpl(Poco::Net::Socket &socket);
35 
36  std::string readUntil(const char c) override;
37  std::string readBytes(const unsigned int length) override;
38  void print(const std::string &text, bool newline = true) override;
39  bool eof() override;
40 
41 private:
42  Poco::Net::Socket m_socket;
43  Poco::Net::SocketAddress m_peerAddress;
44  Poco::Net::SocketInputStream m_input;
45  Poco::Net::SocketOutputStream m_output;
46 };
47 
52 class TCPConsole : public Console, protected Loggable {
53 public:
54  TCPConsole();
55  ~TCPConsole();
56 
57  enum {
58  DEFAULT_PORT = 6000,
59  DEFAULT_BACKLOG = 64,
60  DEFAULT_TIMEOUT_MS = 500,
61  };
62 
63  void setAddress(const std::string &address);
64  void setPort(int port);
65  void setSendTimeout(const Poco::Timespan &timeout);
66  void setRecvTimeout(const Poco::Timespan &timeout);
67  void setPollTimeout(const Poco::Timespan &timeout);
68  void setBacklog(int backlog);
69  void setSSLConfig(SSLServer::Ptr config);
70 
71  void startListen();
72  void close() override;
73 
74 protected:
75  ConsoleSessionImpl::Ptr openSession() override;
76  void startListenUnlocked();
77 
78 private:
79  Poco::Net::IPAddress m_address;
80  unsigned int m_port;
81  Poco::Timespan m_sendTimeout;
82  Poco::Timespan m_recvTimeout;
83  Poco::Timespan m_pollTimeout;
84  unsigned int m_backlog;
85  Poco::SharedPtr<Poco::Net::ServerSocket> m_serverSocket;
86  SSLServer::Ptr m_sslConfig;
87  Poco::FastMutex m_lock;
88  Poco::AtomicCounter m_close;
89 };
90 
91 }
Definition: TCPConsole.h:29
Definition: Console.h:16
std::string readBytes(const unsigned int length) override
Definition: TCPConsole.cpp:59
Definition: TCPConsole.h:52
bool eof() override
Definition: TCPConsole.cpp:69
std::string readUntil(const char c) override
Definition: TCPConsole.cpp:54
Definition: Loggable.h:19
Definition: Console.h:109
void print(const std::string &text, bool newline=true) override
Definition: TCPConsole.cpp:64