public void request(Object... args) {
		if (args.length < 2 || args.length > 3) {
			throw new RuntimeException("the request arguments is error.");
		}
		// first argument must be string
		if (!(args[0] instanceof String)) {
			throw new RuntimeException("the route of request is error.");
		}

		String route = args[0].toString();
		JSONObject msg = null;
		DataCallBack cb = null;

		if (args.length == 2) {
			if (args[1] instanceof JSONObject)
				msg = (JSONObject) args[1];
			else if (args[1] instanceof DataCallBack)
				cb = (DataCallBack) args[1];
		} else {
			msg = (JSONObject) args[1];
			cb = (DataCallBack) args[2];
		}
		msg = filter(msg);
		reqId++;
		cbs.put(reqId, cb);
		sendMessage(reqId, route, msg);
	}