networking library files

Dependents:   ELEC350_Project2

Networking.cpp

Committer:
Swabey89
Date:
2018-12-19
Revision:
6:31a5f28336e8
Parent:
5:b1f83bdeae79
Child:
7:946d879143bf

File content as of revision 6:31a5f28336e8:

#include "sample_hardware.hpp"
#include "Networking.hpp"

//Network thread - responsible for listening for connectinos and responding with updated tempature values
void network()
{
    EthernetInterface eth;
    eth.set_network(IP, NETMASK, GATEWAY);
    eth.connect();
    printlock.lock();
    pc->printf("The target IP address is '%s'\n\n\n\r", eth.get_ip_address());
    printlock.unlock();
    
    //Now setup a web server
    TCPServer srv;           //TCP/IP Server
    TCPSocket clt_sock;      //Socket for communication
    SocketAddress clt_addr;  //Address of incoming connection
    
    /* Open the server on ethernet stack */
    srv.open(&eth);
    
    /* Bind the HTTP port (TCP 80) to the server */
    srv.bind(eth.get_ip_address(), 80);
    
    /* Can handle 5 simultaneous connections */
    srv.listen(5);
    
   while(true)
   {
        //Block and wait on an incoming connection
        srv.accept(&clt_sock, &clt_addr);
        printlock.lock();
        pc->printf("Incoming connection accepted on %s:%d\n\r", clt_addr.get_ip_address(), clt_addr.get_port());
        printlock.unlock();
        
        //Uses a C++ string to make it easier to concatinate
        {
            string response;
            char temp_str[10];
            char press_str[10];
            char light_str[10];
            
            bufferLock.lock();
            double temp = buffer[newestIndex].gettemp();
            double press = buffer[newestIndex].getpress();
            float light  = buffer[newestIndex].getlight()*100;
            string time_str = buffer[newestIndex].getTime();        
            bufferLock.unlock();        
            
            //Convert to a C String
            printlock.lock();
            sprintf(temp_str, "%5.2f", temp);
            sprintf(press_str, "%5.2f", press);
            sprintf(light_str, "%5.2f", light);
            
            
            //Build the C++ string response
            response = HTTP_RESPONSE;
            
            response += HTTP_MESSAGE_TIME;
            response += time_str;
            
            response += HTTP_MESSAGE_TEMP;
            response += temp_str;
            
            response += HTTP_MESSAGE_PRESSURE;
            response += press_str;
            
            response += HTTP_MESSAGE_LIGHT;
            response += light_str;
            
            response += HTTP_MESSAGE_FOOT;
            
            response += "\r\n"; 
            printlock.unlock();
                    
            //Send static HTML response (as a C string)
            clt_sock.send(response.c_str(), response.size());  
        }  
    }
}