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

EnvServer.cpp

Committer:
zeus3110
Date:
2015-09-27
Revision:
12:12369ee344ab

File content as of revision 12:12369ee344ab:

#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);
}