WebSocket client library
Diff: Websocket.cpp
- Revision:
- 15:79bfbc0ad6bc
- Parent:
- 14:c5ac3e26998f
- Child:
- 16:d4518b50f653
--- a/Websocket.cpp Tue Aug 30 11:47:56 2011 +0000 +++ b/Websocket.cpp Tue Sep 06 16:44:56 2011 +0000 @@ -32,10 +32,10 @@ server_ip = dr.resolveName(ip_domain); printf("\r\nserver with dns=%i.%i.%i.%i\r\n",server_ip[0],server_ip[1],server_ip[2],server_ip[3]); } - + IpAddr ipt = eth.getIp(); printf("\r\nmbed IP Address is %d.%d.%d.%d\r\n", ipt[0], ipt[1], ipt[2], ipt[3]); - + sock.setOnEvent(this, &Websocket::onTCPSocketEvent); } @@ -116,7 +116,7 @@ //open the connection sprintf(cmd, "open %s %s\r\n", ip_domain, port); - if (!wifi->Send(cmd, "OPEN")) { + if (!wifi->Send(cmd, "OPEN*")) { printf("Websocket::connect cannot open\r\n"); return false; } @@ -155,14 +155,14 @@ Timer tmr; tmr.start(); - + Timer stop; stop.start(); int i = 0; while (true) { Net::poll(); - if(stop.read() > 3) + if (stop.read() > 3) return false; if (tmr.read() > 0.01) { tmr.reset(); @@ -245,21 +245,32 @@ int i = 0; if (wifi_use) { - char char_read; - if (!wifi->readable()) { + + wifi->read(message); + //printf("msg: %s strlen: %d\r\n", message + 1, strlen(message + 1) - 1); + + //we check if the first byte is 0x00 + if (message == NULL || message[0] != 0x00) { + message = NULL; + return false; + } + + while(message[i + 1] != 0xff && i < strlen(message + 1)) + i++; + + if(message[i+1] == 0xff) + { + message[i+1] = 0; + memcpy(message, message + 1, strlen(message + 1) + 1); + } + else + { message = NULL; return false; } - if (wifi->getc() != 0x00) { - message = NULL; - return false; - } - - while ( (char_read = wifi->getc()) != 0xff) - message[i++] = char_read; - message[i] = 0; } else if (eth_use) { + Net::poll(); if (eth_rx[0] != 0x00) { message = NULL; @@ -305,8 +316,7 @@ } wait(0.25); - wifi->Send("show c\r\n", "NO"); - wifi->read(str); + wifi->Send("show c\r\n", "NO", str); if (str[3] == '1') { if (!wifi->exit()) {