PingPong

Dependencies:   EthernetInterface_pm mbed-rtos mbed

Revision:
0:c8f056a185d0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Codes/CommTCP.cpp	Thu Mar 27 17:39:23 2014 +0000
@@ -0,0 +1,135 @@
+/*
+ * CommTCP.cpp
+ *
+ *  Created on: 01/09/2013
+ *      Author: Rebonatto
+ */
+#include "CommTCP.h"
+
+static int countCnt = 0;
+static int countSnd = 0;
+static int cont = 0;
+
+int CommTCP::getCountCnt() { return countCnt; };
+int CommTCP::getCountSnd() { return countSnd; };
+int CommTCP::getCont()    { return cont; };
+
+void CommTCP::CommTCP_Thread(void const *arg)
+{
+    char buffer[50];
+    int r, i, c = 0;    
+    
+    TCPSocketServer ServerSocket;    
+        
+    ServerSocket.bind(TCPPORT);    
+    ServerSocket.listen();        
+    ServerSocket.set_blocking(true, 500);
+    printf("TCP Thread starting... listen on %s:%d\r\n", MEUIP, TCPPORT);    
+//    printf("ServerSocket %s:%d\n", get_address(), get_port());    
+        
+    while(1)
+    {        
+        TCPSocketConnection sock;
+        
+        for(i=0; i < MAXTRIES; i++){       
+            //printf("Aguarda Conexao\n"); 
+            r = ServerSocket.accept(sock);             
+            if (r < 0){
+                if (i == 0)
+                    countCnt++;
+                printf("Error %d Unable to receive connect Try %d\n", countCnt, i);
+                //wait(0.5);
+            }
+            else
+               break;
+        } 
+        if (r == 0){
+            //printf("Conected %d at %s\n", r, sock.get_address());
+            for(i=0; i < MAXTRIES; i++){
+                r = sock.receive(buffer, sizeof(buffer));            
+                if (r <= 0){
+                    if (i == 0)
+                        countSnd++;
+                    printf("Erro %d ao Receber no socket TCP!! conect %d Try %d\n", countSnd, r, i);
+                    wait_ms(DELAYTRY);
+                }            
+                else{
+                     buffer[r] = '\0';
+                    //if (cont % 60 == 0)
+                     cont++;
+                     if (cont >= FINAL-1)
+                        printf("Recebida conexao %d msg TCP: %d chars: *%s*\n", cont, r, buffer);
+                     break;
+                }
+            }            
+         }
+         wait_ms(DELAY);
+        
+        //printf("Received %d chars:\n*%s*\n", ret, buffer);
+        sock.close();               
+        if (++c == FINAL) {
+            printf("Vai acabar Thread TCP |||\n");
+            wait(3);
+            break;
+        }
+    }
+}
+
+/*
+
+void CommTCP::RequestAcom(){
+    // Metodo para solicitar os acompanhamentos
+    char msg[] = "3;-1";
+    TCPSocketConnection s[NEIGHBORS];
+    int escritos, i;
+    //TCPSocketConnection s[NEIGHBORS];
+*/        
+    /*    
+        Formato das mensagens de requisicao
+        Tipo ; Tomada
+        Tipos: 1 Solicitacao de fase
+               2 Solicitacao de diferencial
+               3 Acompanhamento (manda fase e diferencial)
+        Tomada: Numero da tomada
+                -1 (zero) quando de todas as tomadas
+    */    
+    /*Timer t;
+    //t.start();
+
+    for(i=0;i<Settings::get_NumNeighbors();i++){
+        s[i].connect(Settings::get_Neighbor(i), Settings::get_PortTCP());   
+    }          
+    //t.stop();
+    //printf("The time taken in connection was %d useconds\n", t.read_us());
+    *
+    for(i=0; i< Settings::get_NumNeighbors(); i++){    
+        //talvez verificar se o socket est conectado. Se no estiver, destruir objeto e conectar
+        TCPSocketConnection sock;
+        sock.connect(Settings::get_Neighbor(i), Settings::get_PortTCP());        
+        //escritos = Settings::get_Socket(i).send_all(msg, sizeof(msg)-1);
+        //printf("Socket %d\n",s[i].is_connected());
+        //Timer t1;
+        //t1.start();
+        escritos = sock.send_all(msg, strlen(msg));
+        wait_ms(100);
+        if(escritos != strlen(msg)){
+            printf("Erro ao enviar mensagem para vizinho\n");
+            break;
+        }
+        //t1.stop();
+        //printf("The time taken in send was %d useconds\n", t1.read_us());
+
+        sock.close();        
+        
+    }                    
+}
+
+void CommTCP::SendAcom(int tipo,int tomada){
+    // Aqui chama a funço para enviar um acompanhamento
+    for(int i=0;i<Settings::get_MaxChannels();i++)
+    {
+        EventDetector::get_Detector(i).ExternalTrigger();
+    }
+}
+*/
+