Пример #1
0
bool KsCardMsg::ParseMsg(const std::string &msg)
{
	Json::Value root;
	Json::Reader reader;
	msgtype_="";

	msg_field_.clear();

	if(!reader.parse(msg,root))
	{
		wxLogError(wxT("数据格式错误"));
		return false;
	}
	std::string value;
	value = root.get("msgtype","None").asString();
	msgtype_ = value;
	if(msgtype_.length() == 0)
	{
		wxLogError(wxT("数据格式错误,没有消息类型"));
		return false;
	}
	parseLevel_ = 0;
	bool rc = parseJsonData("",root);
	if(!rc)
		msg_field_.clear();
	return rc;
}
Пример #2
0
bool KsCardMsg::parseJsonData(const std::string& rootname,Json::Value &root)
{
	size_t i;
	Json::Value::Members mbs = root.getMemberNames();
	++parseLevel_;
	if(parseLevel_>2)
		return false;
	for(i = 0;i < mbs.size(); ++i)
	{
		Json::Value& clt = root[mbs[i]];
		std::string fullname = rootname;
		if(rootname.length() > 0)
			 fullname += ".";
		fullname += mbs[i];
		if(clt.isArray() || clt.isObject())
		{
			if(!parseJsonData(fullname,clt))
				return false;
		}
		else
		{
			msg_field_.insert(PARA_MAP_TYPE::value_type(fullname,root.get(mbs[i],"").asString()));
		}
	}
	return true;
}
void SocketIOClient::monitor() {

	*databuffer = 0;

	if (!client.connected()) {
		Serial.println("Connecting...");
		if (!connect(ID, hostname, port)){
			Serial.println("Connection Failed.");
      delay(1000);
			return;
		}
	}

	if (!client.available()) return;

	char which;
	while (client.available()) {
		readmsg();
		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 = 3;
			break;

		default:
		if (debug) {
			Serial.print("Drop ");
			Serial.println(dataptr);
		}
			continue;
		}

		findColon(which);
		dataptr += 1;

		// handle backslash-delimited escapes
		char *optr = databuffer;
		/*
		while (*dataptr && (*dataptr != '"')) {
			if (*dataptr == '\\') {
				++dataptr;		// todo: this just handles "; handle \r, \n, \t, \xdd
			}
			*optr++ = *dataptr++;
		}*/
		while (*dataptr) {
			if (*dataptr == '\\') {
				// Do not remove escapes for json parsing
				//Serial.println("\\");
				//++dataptr;		// todo: this just handles "; handle \r, \n, \t, \xdd
			}
			*optr++ = *dataptr++;
		}
		*optr = 0;
		if (debug) {
			Serial.print("[");
			Serial.print(databuffer);
			Serial.println("]");
		}
		parseJsonData(databuffer);
	}
}