sendMessage method

dynamic sendMessage (
  1. int handleId,
  2. Callbacks callbacks
)

Implementation

sendMessage(int handleId, Callbacks callbacks) {
  if (!this.connected) {
    Janus.warn("Is the server down? (connected=false)");
    callbacks.error("Is the server down? (connected=false)");
    return;
  }
  Plugin pluginHandle = this.pluginHandles[handleId.toString()];
  if (pluginHandle == null) {
    Janus.warn("Invalid handle");
    callbacks.error("Invalid handle");
    return;
  }

  Map<String, dynamic> message = callbacks.message;
  var jsep = callbacks.jsep;
  String transaction = Janus.randomString(12);
  Map<String, dynamic> request = {
    "janus": "message",
    "body": message,
    "transaction": transaction
  };
  if (pluginHandle.handleToken != null)
    request["token"] = pluginHandle.handleToken;
  if (this.apiSecret != null) request["apisecret"] = this.apiSecret;
  if (jsep != null) request["jsep"] = jsep;
  Janus.debug(
      "Sending message to plugin (handle=" + handleId.toString() + "):");
  Janus.debug(request);
  if (this.websockets) {
    request["session_id"] = this.sessionId;
    request["handle_id"] = handleId;
    this.transactions[transaction] = (json) {
      Janus.debug("Message sent!");
      Janus.debug(json);
      if (json["janus"] == "success") {
        // We got a success, must have been a synchronous transaction
        var plugindata = json["plugindata"];
        if (!plugindata) {
          Janus.warn("Request succeeded, but missing plugindata...");
          callbacks.success();
          return;
        }
        Janus.log("Synchronous transaction successful (" +
            plugindata["plugin"] +
            ")");
        var data = plugindata["data"];
        Janus.debug(data);
        if (callbacks.success != null) callbacks.success(data);
        return;
      } else if (json["janus"] != "ack") {
        // Not a success and not an ack, must be an error
        if (json["error"]) {
          Janus.error("Ooops: " +
              json["error"]["code"].toString() +
              " " +
              json["error"]["reason"]);
          callbacks.error(json["error"]["code"].toString() +
              " " +
              json["error"]["reason"]);
        } else {
          Janus.error("Unknown error"); // FIXME
          callbacks.error("Unknown error");
        }
        return;
      }
      // If we got here, the plugin decided to handle the request asynchronously
      callbacks.success();
    };
    this.ws.send(jsonEncode(request));
    return;
  }

  GatewayCallbacks httpCallbacks = GatewayCallbacks();

  httpCallbacks.success = (json) {
    Janus.debug("Message sent!");
    Janus.debug(json);
    if (json["janus"] == "success") {
      // We got a success, must have been a synchronous transaction
      var plugindata = json["plugindata"];
      if (plugindata == null) {
        Janus.warn("Request succeeded, but missing plugindata...");
        callbacks.success();
        return;
      }
      Janus.log("Synchronous transaction successful (" +
          plugindata["plugin"] +
          ")");
      var data = plugindata["data"];
      Janus.debug(data);
      callbacks.success(data);
      return;
    } else if (json["janus"] != "ack") {
      // Not a success and not an ack, must be an error
      if (json["error"]) {
        Janus.error("Ooops: " +
            json["error"]["code"].toString() +
            " " +
            json["error"]["reason"]);
        callbacks.error(
            json["error"]["code"].toString() + " " + json["error"]["reason"]);
      } else {
        Janus.error("Unknown error"); // FIXME
        callbacks.error("Unknown error");
      }
      return;
    }
    // If we got here, the plugin decided to handle the request asynchronously
    if (callbacks.success is Function) callbacks.success();
  };

  httpCallbacks.error = (textStatus, errorThrown) {
    Janus.error(textStatus + ":" + errorThrown); // FIXME
    callbacks.error(textStatus + ": " + errorThrown);
  };

  Janus.httpAPICall(
      this.server +
          "/" +
          this.sessionId.toString() +
          "/" +
          handleId.toString(),
      {
        'verb': 'POST',
        'withCredentials': this.withCredentials,
        'body': request
      },
      httpCallbacks);
}