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
22 {
23 namespace Transport
24 {
25 class TcpServerTransport : public TcpTransport
26 {
27 public:
29 
31  {
32  server.setClientReceiveHandler(TcpClientDataDelegate(&TcpServerTransport::process, this));
33  }
34 
35 protected:
36  bool process(TcpClient& client, char* data, int size) override
37  {
38  auto key = &client;
39 
40  TcpClientStream* stream = map.find(key);
41  if(stream == nullptr) {
42  map[key] = stream = new TcpClientStream(client);
44  stream = map[key];
45  }
46 
47  if(!stream->push(reinterpret_cast<const uint8_t*>(data), size)) {
48  return false;
49  }
50 
51  return handler(*stream);
52  }
53 
54 private:
55  ClientMap map;
56 };
57 
58 } // namespace Transport
59 
60 } // namespace Hosted
V * find(const K &key) const
Find the value for a given key, if it exists.
Definition: ObjectMap.h:235
Server server
Definition: TcpClient.h:45
Definition: Components/Hosted/include/Hosted/Client.h:31
void setReceiveDelegate(TcpClientDataDelegate receiveCb=nullptr)
Set or clear the callback for received data.
Definition: TcpClient.h:89
DataHandler handler
Definition: BaseTransport.h:71
Definition: TcpServer.h:30
void size_t const void * key
Definition: blake2s.h:33
TcpServerTransport(TcpServer &server)
Definition: TcpServerTransport.h:63
bool process(TcpClient &client, char *data, int size) override
Definition: TcpServerTransport.h:69
ObjectMap< TcpClient *, TcpClientStream > ClientMap
Definition: TcpServerTransport.h:61
Delegate< bool(TcpClient &client, char *data, int size)> TcpClientDataDelegate
Definition: TcpClient.h:26