TcpServerTransport.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * TcpServerTransport.h
8  *
9  * @author 2021 Slavey Karadzhov <slav@attachix.com>
10  *
11  *
12  ****/
13 
14 #pragma once
15 
16 #include <Network/TcpServer.h>
17 #include <Data/ObjectMap.h>
18 #include "TcpTransport.h"
19 #include "TcpClientStream.h"
20 
21 namespace Hosted::Transport
22 {
24 {
25 public:
27  {
28  server.setClientReceiveHandler(TcpClientDataDelegate(&TcpServerTransport::process, this));
29  }
30 
31 protected:
32  bool process(TcpClient& client, char* data, int size) override
33  {
34  auto key = &client;
35 
36  TcpClientStream* stream = map.find(key);
37  if(stream == nullptr) {
38  map[key] = stream = new TcpClientStream(client);
40  }
41 
42  if(!stream->push(reinterpret_cast<const uint8_t*>(data), size)) {
43  return false;
44  }
45 
46  return handler(*stream);
47  }
48 
49 private:
51 
52  ClientMap map;
53 };
54 
55 } // namespace Hosted::Transport
void size_t const void * key
Definition: blake2s.h:33
DataHandler handler
Definition: BaseTransport.h:36
Definition: TcpClientStream.h:22
bool push(const uint8_t *buffer, size_t size)
Definition: TcpClientStream.h:35
Definition: TcpServerTransport.h:24
TcpServerTransport(TcpServer &server)
Definition: TcpServerTransport.h:26
bool process(TcpClient &client, char *data, int size) override
Definition: TcpServerTransport.h:32
Definition: TcpTransport.h:22
V * find(const K &key) const
Find the value for a given key, if it exists.
Definition: ObjectMap.h:225
Definition: TcpClient.h:46
void setReceiveDelegate(TcpClientDataDelegate receiveCb=nullptr)
Set or clear the callback for received data.
Definition: TcpClient.h:89
Definition: TcpServer.h:31
Delegate< bool(TcpClient &client, char *data, int size)> TcpClientDataDelegate
Definition: TcpClient.h:26
Definition: BaseTransport.h:20
Server server