// START SOCKET void SocketIOClient::parseJsonData(char *data) { //int datain = Sizeof(data); char rootjson[DATA_BUFFER_LEN]; strcpy(rootjson, data); StaticJsonBuffer<DATA_BUFFER_LEN> rootBuffer; JsonObject& root = rootBuffer.parseObject(rootjson); if (!root.success()) { Serial.print("Data Arrived: "); Serial.println(data); Serial.println("root: parseObject() failed"); return; } char argjson[DATA_BUFFER_LEN]; StaticJsonBuffer<DATA_BUFFER_LEN - HEADER_SIZE> argsBuffer; strcpy(argjson, root["args"][0]); Serial.print("Data: "); Serial.println(data); JsonObject& args = argsBuffer.parseObject(argjson); if (!args.success()) { Serial.print("Data Arrived: "); Serial.println(argjson); Serial.println("args: parseObject() failed"); return; } const char* name = root["name"]; if (dataArrivedDelegate != NULL) { dataArrivedDelegate(*this,name, args); } }
void SocketIOClient::monitor() { *databuffer = 0; if (!client.connected()) { if (!client.connect(hostname, port)) return; } if (!client.available()) return; char which; while (client.available()) { readLine(); dataptr = databuffer; switch (databuffer[0]) { case '1': // connect: [] which = 6; break; case '2': // heartbeat: [2::] client.print((char)0); client.print("2::"); client.print((char)255); continue; case '5': // event: [5:::{"name":"ls"}] which = 4; break; default: Serial.print("Drop "); Serial.println(dataptr); continue; } findColon(which); dataptr += 2; // handle backslash-delimited escapes char *optr = databuffer; while (*dataptr && (*dataptr != '"')) { if (*dataptr == '\\') { ++dataptr; // todo: this just handles "; handle \r, \n, \t, \xdd } *optr++ = *dataptr++; } *optr = 0; Serial.print("["); Serial.print(databuffer); Serial.print("]"); if (dataArrivedDelegate != NULL) { dataArrivedDelegate(*this, databuffer); } } }