Thermometer connected to internet

Dependencies:   BME280 EthernetInterface FXOS8700Q HTTPClient-wolfSSL NTPClient NetworkAPI OAuth4Tw TSL2561_I2C eCompass_FPU_Lib mbed-rtos mbed wolfSSL

Fork of TCP_Server_Example by Roy van Dam

Revision:
12:12369ee344ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EnvServer.cpp	Sun Sep 27 11:04:54 2015 +0000
@@ -0,0 +1,116 @@
+#include "EnvServer.h"
+#include "Sensor.h"
+
+Select select;
+tcp::Socket server;
+tcp::Socket client[MAX_CLIENTS];
+tcp::Socket *socket = NULL;
+
+void EnvServer(void const *arg)
+{
+    int result = 0;
+    int index = 0;
+    int num=0;
+    char SendBuf[16];
+    network::Buffer buffer(256);
+    //std::string message("Hello world!");
+
+    // Configure the server socket (assume everty thing works)
+    server.open();
+    server.bind(WAIT_PORT);
+    server.listen(MAX_CLIENTS);
+    printf("Start waiting ...\r\n");
+    
+    // Add sockets to the select api
+    select.set(&server, Select::Read);
+    for (index = 0; index < MAX_CLIENTS; index++) {
+        select.set(&client[index], Select::Read);
+    }
+
+    do {
+        // Wait for activity
+        result = select.wait();
+        if (result < -1) {
+            printf("Failed to select\n\r");
+            break;
+        }
+
+        // Get the first socket
+        socket = (tcp::Socket *)select.getReadable();
+
+        for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
+            // Check if there was a connection request.
+            if (socket->getHandle() == server.getHandle()) {
+                // Find an unused client
+                for (index = 0; index < MAX_CLIENTS; index++) {
+                    if (client[index].getStatus() == network::Socket::Closed) {
+                        break;
+                    }
+                }
+
+                // Maximum connections reached
+                if (index == MAX_CLIENTS) {
+                    printf("Maximum connections reached\n\r");
+                    continue;
+                }
+
+                // Accept the client
+                socket->accept(client[index]);
+                printf("Client connected %s:%d\n\r",
+                       client[index].getRemoteEndpoint().getAddress().toString().c_str(),
+                       client[index].getRemoteEndpoint().getPort());
+
+                // Send a nice message to the client
+                //client[index].write((void *)message.data(), message.size());
+                continue;
+            }
+
+            // It was not the server socket, so it must be a client talking to us.
+            num=socket->read(buffer);
+            switch (num) {
+                case 0:
+                    // Remote end disconnected
+                    printf("Client disconnected %s:%d\n\r",
+                           socket->getRemoteEndpoint().getAddress().toString().c_str(),
+                           socket->getRemoteEndpoint().getPort());
+
+                    // Close socket
+                    socket->close();
+                    break;
+
+                case -1:
+                    printf("Error while reading data from socket\n\r");
+                    socket->close();
+                    break;
+
+                default:
+                    printf("Message from %s:%d\n\r",
+                           socket->getRemoteEndpoint().getAddress().toString().c_str(),
+                           socket->getRemoteEndpoint().getPort());
+
+                    //command
+                    if(strcmp((char *)buffer.data(),TEMP_CMD)==0) {
+                        printf("Temperature:\r\n");
+                        sprintf(SendBuf,"%2.2f",pSensor->getTemperature());
+                    } else if(strcmp((char *)buffer.data(),HUMIDITY_CMD)==0) {
+                        printf("Humidity:\r\n");
+                        sprintf(SendBuf,"%3.2f",pSensor->getHumidity());
+                    } else if(strcmp((char *)buffer.data(),PRESSURE_CMD)==0) {
+                        printf("Pressure:\r\n");
+                        sprintf(SendBuf,"%4.2f",pSensor->getPressure());
+                    } else if(strcmp((char *)buffer.data(),ILLUM_CMD)==0) {
+                        printf("Illuminance:\r\n");
+                        sprintf(SendBuf,"%5.2f",pLumSensor->getLux());
+                    } else {
+                        printf("Unknown command:\r\n");
+                        sprintf(SendBuf,"NG");
+                    }
+
+                    socket->write((void *)SendBuf,strlen(SendBuf));
+
+                    printf("Command:%s Result:%s\n\r", (char *)buffer.data(),SendBuf);
+            }
+        }
+
+    } while (server.getStatus() == network::Socket::Listening);
+}