![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Versão atual 13-12-2013.
Dependencies: EthernetInterface mbed-rtos mbed
Codes/CommTCP.cpp@0:65c41a68b49a, 2013-12-13 (annotated)
- Committer:
- rebonatto
- Date:
- Fri Dec 13 11:42:59 2013 +0000
- Revision:
- 0:65c41a68b49a
Versao atual 13-12-2013.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:65c41a68b49a | 1 | /* |
rebonatto | 0:65c41a68b49a | 2 | * CommTCP.cpp |
rebonatto | 0:65c41a68b49a | 3 | * |
rebonatto | 0:65c41a68b49a | 4 | * Created on: 07/07/2013 |
rebonatto | 0:65c41a68b49a | 5 | * Author: Rebonatto |
rebonatto | 0:65c41a68b49a | 6 | */ |
rebonatto | 0:65c41a68b49a | 7 | #include "CommTCP.h" |
rebonatto | 0:65c41a68b49a | 8 | #include "EventDetector.h" |
rebonatto | 0:65c41a68b49a | 9 | |
rebonatto | 0:65c41a68b49a | 10 | void CommTCP::CommTCP_Thread(void const *arg) |
rebonatto | 0:65c41a68b49a | 11 | { |
rebonatto | 0:65c41a68b49a | 12 | char buffer[5]; |
rebonatto | 0:65c41a68b49a | 13 | int ret,i, r; |
rebonatto | 0:65c41a68b49a | 14 | int cont = 0; |
rebonatto | 0:65c41a68b49a | 15 | TCPSocketServer ServerSocket; |
rebonatto | 0:65c41a68b49a | 16 | |
rebonatto | 0:65c41a68b49a | 17 | ServerSocket.bind(Settings::get_PortTCP()); |
rebonatto | 0:65c41a68b49a | 18 | ServerSocket.listen(); |
rebonatto | 0:65c41a68b49a | 19 | printf("TCP Thread starting...\r\n"); |
rebonatto | 0:65c41a68b49a | 20 | // printf("ServerSocket %s:%d\n", get_address(), get_port()); |
rebonatto | 0:65c41a68b49a | 21 | |
rebonatto | 0:65c41a68b49a | 22 | while(1){ |
rebonatto | 0:65c41a68b49a | 23 | TCPSocketConnection sock; |
rebonatto | 0:65c41a68b49a | 24 | for(i=0; i < Settings::get_MaxTries(); i++){ |
rebonatto | 0:65c41a68b49a | 25 | printf("Aguarda Conexao\n"); |
rebonatto | 0:65c41a68b49a | 26 | r = ServerSocket.accept(sock); |
rebonatto | 0:65c41a68b49a | 27 | if (r == 0) //Accept Ok |
rebonatto | 0:65c41a68b49a | 28 | break; |
rebonatto | 0:65c41a68b49a | 29 | else{ |
rebonatto | 0:65c41a68b49a | 30 | printf("Error in Acceppt\n"); |
rebonatto | 0:65c41a68b49a | 31 | wait_ms(Settings::get_DelayTry()); |
rebonatto | 0:65c41a68b49a | 32 | } |
rebonatto | 0:65c41a68b49a | 33 | } |
rebonatto | 0:65c41a68b49a | 34 | //sock.set_blocking(true, 1500); |
rebonatto | 0:65c41a68b49a | 35 | |
rebonatto | 0:65c41a68b49a | 36 | //printf("Conected %d at %s\n", r, sock.get_address()); |
rebonatto | 0:65c41a68b49a | 37 | for(i=0; i < Settings::get_MaxTries(); i++){ |
rebonatto | 0:65c41a68b49a | 38 | r = sock.receive(buffer, sizeof(buffer)); |
rebonatto | 0:65c41a68b49a | 39 | if (r != -1) // Receive Ok |
rebonatto | 0:65c41a68b49a | 40 | break; |
rebonatto | 0:65c41a68b49a | 41 | else{ |
rebonatto | 0:65c41a68b49a | 42 | printf("Erro na recepcao do Socket TCP\n"); |
rebonatto | 0:65c41a68b49a | 43 | wait_ms(Settings::get_DelayTry()); |
rebonatto | 0:65c41a68b49a | 44 | } |
rebonatto | 0:65c41a68b49a | 45 | buffer[ret] = '\0'; |
rebonatto | 0:65c41a68b49a | 46 | } |
rebonatto | 0:65c41a68b49a | 47 | if (cont % 60 == 0) |
rebonatto | 0:65c41a68b49a | 48 | printf("Recebida conexao %d msg TCP: %d chars: *%s*\n", cont++, ret, buffer); |
rebonatto | 0:65c41a68b49a | 49 | |
rebonatto | 0:65c41a68b49a | 50 | //printf("Received %d chars:\n*%s*\n", ret, buffer); |
rebonatto | 0:65c41a68b49a | 51 | sock.close(); |
rebonatto | 0:65c41a68b49a | 52 | SendAcom(0,0); |
rebonatto | 0:65c41a68b49a | 53 | |
rebonatto | 0:65c41a68b49a | 54 | } |
rebonatto | 0:65c41a68b49a | 55 | } |
rebonatto | 0:65c41a68b49a | 56 | |
rebonatto | 0:65c41a68b49a | 57 | void CommTCP::RequestAcom(){ |
rebonatto | 0:65c41a68b49a | 58 | // Metodo para solicitar os acompanhamentos |
rebonatto | 0:65c41a68b49a | 59 | char msg[] = "3;-1"; |
rebonatto | 0:65c41a68b49a | 60 | TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:65c41a68b49a | 61 | int escritos, i; |
rebonatto | 0:65c41a68b49a | 62 | //TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:65c41a68b49a | 63 | |
rebonatto | 0:65c41a68b49a | 64 | /* |
rebonatto | 0:65c41a68b49a | 65 | Formato das mensagens de requisicao |
rebonatto | 0:65c41a68b49a | 66 | Tipo ; Tomada |
rebonatto | 0:65c41a68b49a | 67 | Tipos: 1 Solicitacao de fase |
rebonatto | 0:65c41a68b49a | 68 | 2 Solicitacao de diferencial |
rebonatto | 0:65c41a68b49a | 69 | 3 Acompanhamento (manda fase e diferencial) |
rebonatto | 0:65c41a68b49a | 70 | Tomada: Numero da tomada |
rebonatto | 0:65c41a68b49a | 71 | -1 (zero) quando de todas as tomadas |
rebonatto | 0:65c41a68b49a | 72 | */ |
rebonatto | 0:65c41a68b49a | 73 | /*Timer t; |
rebonatto | 0:65c41a68b49a | 74 | //t.start(); |
rebonatto | 0:65c41a68b49a | 75 | |
rebonatto | 0:65c41a68b49a | 76 | for(i=0;i<Settings::get_NumNeighbors();i++){ |
rebonatto | 0:65c41a68b49a | 77 | s[i].connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:65c41a68b49a | 78 | } |
rebonatto | 0:65c41a68b49a | 79 | //t.stop(); |
rebonatto | 0:65c41a68b49a | 80 | //printf("The time taken in connection was %d useconds\n", t.read_us()); |
rebonatto | 0:65c41a68b49a | 81 | */ |
rebonatto | 0:65c41a68b49a | 82 | for(i=0; i< Settings::get_NumNeighbors(); i++){ |
rebonatto | 0:65c41a68b49a | 83 | //talvez verificar se o socket est conectado. Se no estiver, destruir objeto e conectar |
rebonatto | 0:65c41a68b49a | 84 | TCPSocketConnection sock; |
rebonatto | 0:65c41a68b49a | 85 | sock.connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:65c41a68b49a | 86 | //escritos = Settings::get_Socket(i).send_all(msg, sizeof(msg)-1); |
rebonatto | 0:65c41a68b49a | 87 | //printf("Socket %d\n",s[i].is_connected()); |
rebonatto | 0:65c41a68b49a | 88 | //Timer t1; |
rebonatto | 0:65c41a68b49a | 89 | //t1.start(); |
rebonatto | 0:65c41a68b49a | 90 | escritos = sock.send_all(msg, strlen(msg)); |
rebonatto | 0:65c41a68b49a | 91 | wait_ms(100); |
rebonatto | 0:65c41a68b49a | 92 | if(escritos != strlen(msg)){ |
rebonatto | 0:65c41a68b49a | 93 | printf("Erro ao enviar mensagem para vizinho\n"); |
rebonatto | 0:65c41a68b49a | 94 | break; |
rebonatto | 0:65c41a68b49a | 95 | } |
rebonatto | 0:65c41a68b49a | 96 | //t1.stop(); |
rebonatto | 0:65c41a68b49a | 97 | //printf("The time taken in send was %d useconds\n", t1.read_us()); |
rebonatto | 0:65c41a68b49a | 98 | |
rebonatto | 0:65c41a68b49a | 99 | sock.close(); |
rebonatto | 0:65c41a68b49a | 100 | |
rebonatto | 0:65c41a68b49a | 101 | } |
rebonatto | 0:65c41a68b49a | 102 | } |
rebonatto | 0:65c41a68b49a | 103 | |
rebonatto | 0:65c41a68b49a | 104 | void CommTCP::SendAcom(int tipo,int tomada){ |
rebonatto | 0:65c41a68b49a | 105 | // Aqui chama a funço para enviar um acompanhamento |
rebonatto | 0:65c41a68b49a | 106 | for(int i=0;i<Settings::get_MaxChannels();i++) |
rebonatto | 0:65c41a68b49a | 107 | { |
rebonatto | 0:65c41a68b49a | 108 | EventDetector::get_Detector(i).ExternalTrigger(); |
rebonatto | 0:65c41a68b49a | 109 | } |
rebonatto | 0:65c41a68b49a | 110 | } |
rebonatto | 0:65c41a68b49a | 111 |