// 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);
	}
  }
Example #2
0
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);
		}
	}
}