sendMessage method
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);
}