]> AND Private Git Repository - Cipher_code.git/blob - Arduino/libraries/Firmata/utility/WiFiServerStream.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
aze
[Cipher_code.git] / Arduino / libraries / Firmata / utility / WiFiServerStream.h
1 /*
2   WiFiServerStream.h
3
4   An Arduino Stream extension for a WiFiClient or WiFiServer to be used
5   with legacy Arduino WiFi shield and other boards and shields that
6   are compatible with the Arduino WiFi library.
7
8   Copyright (C) 2016 Jens B. All rights reserved.
9
10   This library is free software; you can redistribute it and/or
11   modify it under the terms of the GNU Lesser General Public
12   License as published by the Free Software Foundation; either
13   version 2.1 of the License, or (at your option) any later version.
14
15   See file LICENSE.txt for further informations on licensing terms.
16
17   Parts of this class are based on
18
19   - WiFiStream - Copyright (C) 2015-2016 Jesse Frush. All rights reserved.
20
21   published under the same license.
22
23   Last updated April 23rd, 2016
24  */
25
26 #ifndef WIFI_SERVER_STREAM_H
27 #define WIFI_SERVER_STREAM_H
28
29 #include "WiFiStream.h"
30
31 class WiFiServerStream : public WiFiStream
32 {
33 protected:
34   WiFiServer _server = WiFiServer(3030);
35   bool _listening = false;
36
37   /**
38    * check if TCP client is connected
39    * @return true if connected
40    */
41   virtual inline bool connect_client()
42   {
43     if ( _connected )
44     {
45       if ( _client && _client.connected() ) return true;
46       stop();
47     }
48
49     // passive TCP connect (accept)
50     WiFiClient newClient = _server.available();
51     if ( !newClient ) return false;
52     _client = newClient;
53     _connected = true;
54     if ( _currentHostConnectionCallback )
55     {
56       (*_currentHostConnectionCallback)(HOST_CONNECTION_CONNECTED);
57     }
58
59     return true;
60   }
61
62 public:
63   /**
64    * create a WiFi stream with a TCP server
65    */
66   WiFiServerStream(uint16_t server_port) : WiFiStream(server_port) {}
67
68   /**
69    * maintain WiFi and TCP connection
70    * @return true if WiFi and TCP connection are established
71    */
72   virtual inline bool maintain()
73   {
74     if ( connect_client() ) return true;
75
76     stop();
77
78     if ( !_listening && WiFi.status() == WL_CONNECTED )
79     {
80       // start TCP server after first WiFi connect
81       _server = WiFiServer(_port);
82       _server.begin();
83       _listening = true;
84     }
85
86     return false;
87   }
88
89   /**
90    * stop client connection
91    */
92   virtual inline void stop()
93   {
94     if ( _client)
95     {
96       _client.stop();
97       if ( _currentHostConnectionCallback )
98       {
99         (*_currentHostConnectionCallback)(HOST_CONNECTION_DISCONNECTED);
100       }
101     }
102     _connected = false;
103   }
104
105 };
106
107 #endif //WIFI_SERVER_STREAM_H