PingPong
Dependencies: EthernetInterface_pm mbed-rtos mbed
Codes/CommTCP.cpp@0:c8f056a185d0, 2014-03-27 (annotated)
- Committer:
- rebonatto
- Date:
- Thu Mar 27 17:39:23 2014 +0000
- Revision:
- 0:c8f056a185d0
Para testar a rede.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:c8f056a185d0 | 1 | /* |
rebonatto | 0:c8f056a185d0 | 2 | * CommTCP.cpp |
rebonatto | 0:c8f056a185d0 | 3 | * |
rebonatto | 0:c8f056a185d0 | 4 | * Created on: 01/09/2013 |
rebonatto | 0:c8f056a185d0 | 5 | * Author: Rebonatto |
rebonatto | 0:c8f056a185d0 | 6 | */ |
rebonatto | 0:c8f056a185d0 | 7 | #include "CommTCP.h" |
rebonatto | 0:c8f056a185d0 | 8 | |
rebonatto | 0:c8f056a185d0 | 9 | static int countCnt = 0; |
rebonatto | 0:c8f056a185d0 | 10 | static int countSnd = 0; |
rebonatto | 0:c8f056a185d0 | 11 | static int cont = 0; |
rebonatto | 0:c8f056a185d0 | 12 | |
rebonatto | 0:c8f056a185d0 | 13 | int CommTCP::getCountCnt() { return countCnt; }; |
rebonatto | 0:c8f056a185d0 | 14 | int CommTCP::getCountSnd() { return countSnd; }; |
rebonatto | 0:c8f056a185d0 | 15 | int CommTCP::getCont() { return cont; }; |
rebonatto | 0:c8f056a185d0 | 16 | |
rebonatto | 0:c8f056a185d0 | 17 | void CommTCP::CommTCP_Thread(void const *arg) |
rebonatto | 0:c8f056a185d0 | 18 | { |
rebonatto | 0:c8f056a185d0 | 19 | char buffer[50]; |
rebonatto | 0:c8f056a185d0 | 20 | int r, i, c = 0; |
rebonatto | 0:c8f056a185d0 | 21 | |
rebonatto | 0:c8f056a185d0 | 22 | TCPSocketServer ServerSocket; |
rebonatto | 0:c8f056a185d0 | 23 | |
rebonatto | 0:c8f056a185d0 | 24 | ServerSocket.bind(TCPPORT); |
rebonatto | 0:c8f056a185d0 | 25 | ServerSocket.listen(); |
rebonatto | 0:c8f056a185d0 | 26 | ServerSocket.set_blocking(true, 500); |
rebonatto | 0:c8f056a185d0 | 27 | printf("TCP Thread starting... listen on %s:%d\r\n", MEUIP, TCPPORT); |
rebonatto | 0:c8f056a185d0 | 28 | // printf("ServerSocket %s:%d\n", get_address(), get_port()); |
rebonatto | 0:c8f056a185d0 | 29 | |
rebonatto | 0:c8f056a185d0 | 30 | while(1) |
rebonatto | 0:c8f056a185d0 | 31 | { |
rebonatto | 0:c8f056a185d0 | 32 | TCPSocketConnection sock; |
rebonatto | 0:c8f056a185d0 | 33 | |
rebonatto | 0:c8f056a185d0 | 34 | for(i=0; i < MAXTRIES; i++){ |
rebonatto | 0:c8f056a185d0 | 35 | //printf("Aguarda Conexao\n"); |
rebonatto | 0:c8f056a185d0 | 36 | r = ServerSocket.accept(sock); |
rebonatto | 0:c8f056a185d0 | 37 | if (r < 0){ |
rebonatto | 0:c8f056a185d0 | 38 | if (i == 0) |
rebonatto | 0:c8f056a185d0 | 39 | countCnt++; |
rebonatto | 0:c8f056a185d0 | 40 | printf("Error %d Unable to receive connect Try %d\n", countCnt, i); |
rebonatto | 0:c8f056a185d0 | 41 | //wait(0.5); |
rebonatto | 0:c8f056a185d0 | 42 | } |
rebonatto | 0:c8f056a185d0 | 43 | else |
rebonatto | 0:c8f056a185d0 | 44 | break; |
rebonatto | 0:c8f056a185d0 | 45 | } |
rebonatto | 0:c8f056a185d0 | 46 | if (r == 0){ |
rebonatto | 0:c8f056a185d0 | 47 | //printf("Conected %d at %s\n", r, sock.get_address()); |
rebonatto | 0:c8f056a185d0 | 48 | for(i=0; i < MAXTRIES; i++){ |
rebonatto | 0:c8f056a185d0 | 49 | r = sock.receive(buffer, sizeof(buffer)); |
rebonatto | 0:c8f056a185d0 | 50 | if (r <= 0){ |
rebonatto | 0:c8f056a185d0 | 51 | if (i == 0) |
rebonatto | 0:c8f056a185d0 | 52 | countSnd++; |
rebonatto | 0:c8f056a185d0 | 53 | printf("Erro %d ao Receber no socket TCP!! conect %d Try %d\n", countSnd, r, i); |
rebonatto | 0:c8f056a185d0 | 54 | wait_ms(DELAYTRY); |
rebonatto | 0:c8f056a185d0 | 55 | } |
rebonatto | 0:c8f056a185d0 | 56 | else{ |
rebonatto | 0:c8f056a185d0 | 57 | buffer[r] = '\0'; |
rebonatto | 0:c8f056a185d0 | 58 | //if (cont % 60 == 0) |
rebonatto | 0:c8f056a185d0 | 59 | cont++; |
rebonatto | 0:c8f056a185d0 | 60 | if (cont >= FINAL-1) |
rebonatto | 0:c8f056a185d0 | 61 | printf("Recebida conexao %d msg TCP: %d chars: *%s*\n", cont, r, buffer); |
rebonatto | 0:c8f056a185d0 | 62 | break; |
rebonatto | 0:c8f056a185d0 | 63 | } |
rebonatto | 0:c8f056a185d0 | 64 | } |
rebonatto | 0:c8f056a185d0 | 65 | } |
rebonatto | 0:c8f056a185d0 | 66 | wait_ms(DELAY); |
rebonatto | 0:c8f056a185d0 | 67 | |
rebonatto | 0:c8f056a185d0 | 68 | //printf("Received %d chars:\n*%s*\n", ret, buffer); |
rebonatto | 0:c8f056a185d0 | 69 | sock.close(); |
rebonatto | 0:c8f056a185d0 | 70 | if (++c == FINAL) { |
rebonatto | 0:c8f056a185d0 | 71 | printf("Vai acabar Thread TCP |||\n"); |
rebonatto | 0:c8f056a185d0 | 72 | wait(3); |
rebonatto | 0:c8f056a185d0 | 73 | break; |
rebonatto | 0:c8f056a185d0 | 74 | } |
rebonatto | 0:c8f056a185d0 | 75 | } |
rebonatto | 0:c8f056a185d0 | 76 | } |
rebonatto | 0:c8f056a185d0 | 77 | |
rebonatto | 0:c8f056a185d0 | 78 | /* |
rebonatto | 0:c8f056a185d0 | 79 | |
rebonatto | 0:c8f056a185d0 | 80 | void CommTCP::RequestAcom(){ |
rebonatto | 0:c8f056a185d0 | 81 | // Metodo para solicitar os acompanhamentos |
rebonatto | 0:c8f056a185d0 | 82 | char msg[] = "3;-1"; |
rebonatto | 0:c8f056a185d0 | 83 | TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:c8f056a185d0 | 84 | int escritos, i; |
rebonatto | 0:c8f056a185d0 | 85 | //TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:c8f056a185d0 | 86 | */ |
rebonatto | 0:c8f056a185d0 | 87 | /* |
rebonatto | 0:c8f056a185d0 | 88 | Formato das mensagens de requisicao |
rebonatto | 0:c8f056a185d0 | 89 | Tipo ; Tomada |
rebonatto | 0:c8f056a185d0 | 90 | Tipos: 1 Solicitacao de fase |
rebonatto | 0:c8f056a185d0 | 91 | 2 Solicitacao de diferencial |
rebonatto | 0:c8f056a185d0 | 92 | 3 Acompanhamento (manda fase e diferencial) |
rebonatto | 0:c8f056a185d0 | 93 | Tomada: Numero da tomada |
rebonatto | 0:c8f056a185d0 | 94 | -1 (zero) quando de todas as tomadas |
rebonatto | 0:c8f056a185d0 | 95 | */ |
rebonatto | 0:c8f056a185d0 | 96 | /*Timer t; |
rebonatto | 0:c8f056a185d0 | 97 | //t.start(); |
rebonatto | 0:c8f056a185d0 | 98 | |
rebonatto | 0:c8f056a185d0 | 99 | for(i=0;i<Settings::get_NumNeighbors();i++){ |
rebonatto | 0:c8f056a185d0 | 100 | s[i].connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:c8f056a185d0 | 101 | } |
rebonatto | 0:c8f056a185d0 | 102 | //t.stop(); |
rebonatto | 0:c8f056a185d0 | 103 | //printf("The time taken in connection was %d useconds\n", t.read_us()); |
rebonatto | 0:c8f056a185d0 | 104 | * |
rebonatto | 0:c8f056a185d0 | 105 | for(i=0; i< Settings::get_NumNeighbors(); i++){ |
rebonatto | 0:c8f056a185d0 | 106 | //talvez verificar se o socket est conectado. Se no estiver, destruir objeto e conectar |
rebonatto | 0:c8f056a185d0 | 107 | TCPSocketConnection sock; |
rebonatto | 0:c8f056a185d0 | 108 | sock.connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:c8f056a185d0 | 109 | //escritos = Settings::get_Socket(i).send_all(msg, sizeof(msg)-1); |
rebonatto | 0:c8f056a185d0 | 110 | //printf("Socket %d\n",s[i].is_connected()); |
rebonatto | 0:c8f056a185d0 | 111 | //Timer t1; |
rebonatto | 0:c8f056a185d0 | 112 | //t1.start(); |
rebonatto | 0:c8f056a185d0 | 113 | escritos = sock.send_all(msg, strlen(msg)); |
rebonatto | 0:c8f056a185d0 | 114 | wait_ms(100); |
rebonatto | 0:c8f056a185d0 | 115 | if(escritos != strlen(msg)){ |
rebonatto | 0:c8f056a185d0 | 116 | printf("Erro ao enviar mensagem para vizinho\n"); |
rebonatto | 0:c8f056a185d0 | 117 | break; |
rebonatto | 0:c8f056a185d0 | 118 | } |
rebonatto | 0:c8f056a185d0 | 119 | //t1.stop(); |
rebonatto | 0:c8f056a185d0 | 120 | //printf("The time taken in send was %d useconds\n", t1.read_us()); |
rebonatto | 0:c8f056a185d0 | 121 | |
rebonatto | 0:c8f056a185d0 | 122 | sock.close(); |
rebonatto | 0:c8f056a185d0 | 123 | |
rebonatto | 0:c8f056a185d0 | 124 | } |
rebonatto | 0:c8f056a185d0 | 125 | } |
rebonatto | 0:c8f056a185d0 | 126 | |
rebonatto | 0:c8f056a185d0 | 127 | void CommTCP::SendAcom(int tipo,int tomada){ |
rebonatto | 0:c8f056a185d0 | 128 | // Aqui chama a funço para enviar um acompanhamento |
rebonatto | 0:c8f056a185d0 | 129 | for(int i=0;i<Settings::get_MaxChannels();i++) |
rebonatto | 0:c8f056a185d0 | 130 | { |
rebonatto | 0:c8f056a185d0 | 131 | EventDetector::get_Detector(i).ExternalTrigger(); |
rebonatto | 0:c8f056a185d0 | 132 | } |
rebonatto | 0:c8f056a185d0 | 133 | } |
rebonatto | 0:c8f056a185d0 | 134 | */ |
rebonatto | 0:c8f056a185d0 | 135 |