Machine Vision Status TCP Server

Dependencies:   C12832 EthernetInterface mbed-rtos mbed ConfigFile

Revision:
3:254a2671a8e3
Parent:
2:a8eebf64cd3e
Child:
4:339a85b66476
--- a/TcpDaemon.cpp	Thu Mar 05 15:32:22 2015 +0000
+++ b/TcpDaemon.cpp	Fri Mar 06 08:20:56 2015 +0000
@@ -10,11 +10,12 @@
      *
      * @server_port the port the daemon will be listening on
      */
-    TcpDaemon::TcpDaemon(int server_port, PinName receive_led_pin)
-         : receive_led(receive_led_pin) {
+    TcpDaemon::TcpDaemon(int server_port, PinName accept_led_pin, PinName receive_led_pin)
+         : receive_led(receive_led_pin), accept_led(accept_led_pin) {
         this->server_port = server_port;
         this->keepListening = true;
         this->receive_led = 0;
+        this->accept_led = 0;
     }
 
     /*
@@ -37,6 +38,7 @@
             return false;
         } else {
             Log::d("Bind ok\r\n");
+            server.set_blocking(false, TCP_ACCEPT_TIMEOUT);     // Set tot non-blocking
             return true;
         }
     }
@@ -52,13 +54,14 @@
             return;
         }
         
+        Log::d("Listening for incoming connection ...\r\n");
         while (this->keepListening) {
-            Log::d("Listening for incoming connection ...\r\n");
+            
+            // Visual indication
+            accept_led = !accept_led;
             
             // Accept connection from an incoming client
-            if (server.accept(client) < 0) {
-                Log::w("Client accept failed\r\n");
-            } else {
+            if (server.accept(client) >= 0) {
                 Log::d("Client connected: %s\r\n", client.get_address());
                 
                 // Set non-blocking
@@ -95,15 +98,18 @@
                         } else if (total_read_size > 0) {       // Increment i_read (max timeouts for message)
                             i_read++;
                         }
-                    } while (total_read_size < BUFFER_SIZE && end == NULL && i_read < MAX_READ_TIMEOUTS);
+                    } while (client.is_connected() && total_read_size < BUFFER_SIZE && end == NULL && i_read < MAX_READ_TIMEOUTS);
 
-                    if (total_read_size > 0 && i_read < MAX_READ_TIMEOUTS) {
-                        if (end == NULL) {
+                    if (end == NULL) {
+                        if (total_read_size >= BUFFER_SIZE) {
                             Log::w("Buffer full\r\n");
-                        } else {                           
-                            // Full string received, lets do our thing
-                            Log::v("Received: %s\r\n", buffer);
+                        } else if (i_read == MAX_READ_TIMEOUTS) {
+                            Log::w("Partial message received. MAX_READ_TIMEOUTS reached.\r\n");
                         }
+                        
+                    } else {                           
+                        // Full string received, lets do our thing
+                        Log::v("Received: %s\r\n", buffer);
                     }
                 }