zeus 3110 / Mbed 2 deprecated NetworkThermometer

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers EnvServer.cpp Source File

EnvServer.cpp

00001 #include "EnvServer.h"
00002 #include "Sensor.h"
00003 
00004 Select select;
00005 tcp::Socket server;
00006 tcp::Socket client[MAX_CLIENTS];
00007 tcp::Socket *socket = NULL;
00008 
00009 void EnvServer(void const *arg)
00010 {
00011     int result = 0;
00012     int index = 0;
00013     int num=0;
00014     char SendBuf[16];
00015     network::Buffer buffer(256);
00016     //std::string message("Hello world!");
00017 
00018     // Configure the server socket (assume everty thing works)
00019     server.open();
00020     server.bind(WAIT_PORT);
00021     server.listen(MAX_CLIENTS);
00022     printf("Start waiting ...\r\n");
00023     
00024     // Add sockets to the select api
00025     select.set(&server, Select::Read);
00026     for (index = 0; index < MAX_CLIENTS; index++) {
00027         select.set(&client[index], Select::Read);
00028     }
00029 
00030     do {
00031         // Wait for activity
00032         result = select.wait();
00033         if (result < -1) {
00034             printf("Failed to select\n\r");
00035             break;
00036         }
00037 
00038         // Get the first socket
00039         socket = (tcp::Socket *)select.getReadable();
00040 
00041         for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
00042             // Check if there was a connection request.
00043             if (socket->getHandle() == server.getHandle()) {
00044                 // Find an unused client
00045                 for (index = 0; index < MAX_CLIENTS; index++) {
00046                     if (client[index].getStatus() == network::Socket::Closed) {
00047                         break;
00048                     }
00049                 }
00050 
00051                 // Maximum connections reached
00052                 if (index == MAX_CLIENTS) {
00053                     printf("Maximum connections reached\n\r");
00054                     continue;
00055                 }
00056 
00057                 // Accept the client
00058                 socket->accept(client[index]);
00059                 printf("Client connected %s:%d\n\r",
00060                        client[index].getRemoteEndpoint().getAddress().toString().c_str(),
00061                        client[index].getRemoteEndpoint().getPort());
00062 
00063                 // Send a nice message to the client
00064                 //client[index].write((void *)message.data(), message.size());
00065                 continue;
00066             }
00067 
00068             // It was not the server socket, so it must be a client talking to us.
00069             num=socket->read(buffer);
00070             switch (num) {
00071                 case 0:
00072                     // Remote end disconnected
00073                     printf("Client disconnected %s:%d\n\r",
00074                            socket->getRemoteEndpoint().getAddress().toString().c_str(),
00075                            socket->getRemoteEndpoint().getPort());
00076 
00077                     // Close socket
00078                     socket->close();
00079                     break;
00080 
00081                 case -1:
00082                     printf("Error while reading data from socket\n\r");
00083                     socket->close();
00084                     break;
00085 
00086                 default:
00087                     printf("Message from %s:%d\n\r",
00088                            socket->getRemoteEndpoint().getAddress().toString().c_str(),
00089                            socket->getRemoteEndpoint().getPort());
00090 
00091                     //command
00092                     if(strcmp((char *)buffer.data(),TEMP_CMD)==0) {
00093                         printf("Temperature:\r\n");
00094                         sprintf(SendBuf,"%2.2f",pSensor->getTemperature());
00095                     } else if(strcmp((char *)buffer.data(),HUMIDITY_CMD)==0) {
00096                         printf("Humidity:\r\n");
00097                         sprintf(SendBuf,"%3.2f",pSensor->getHumidity());
00098                     } else if(strcmp((char *)buffer.data(),PRESSURE_CMD)==0) {
00099                         printf("Pressure:\r\n");
00100                         sprintf(SendBuf,"%4.2f",pSensor->getPressure());
00101                     } else if(strcmp((char *)buffer.data(),ILLUM_CMD)==0) {
00102                         printf("Illuminance:\r\n");
00103                         sprintf(SendBuf,"%5.2f",pLumSensor->getLux());
00104                     } else {
00105                         printf("Unknown command:\r\n");
00106                         sprintf(SendBuf,"NG");
00107                     }
00108 
00109                     socket->write((void *)SendBuf,strlen(SendBuf));
00110 
00111                     printf("Command:%s Result:%s\n\r", (char *)buffer.data(),SendBuf);
00112             }
00113         }
00114 
00115     } while (server.getStatus() == network::Socket::Listening);
00116 }