mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 00:41:41 +00:00
FS-9683: Pass call recovery status to Verto
Previously, users implementing a Verto workflow where both user login and placing a new call are automated (eg., visiting a URL, and the videoconference loads automatically) faced the challenge of not having a reliable way to know that a page load will result in Verto's call recovery mechanism reconnecting an existing detached call or not. This adds a verto.clientReady JSON-RPC message, emitted after all calls are re-attached, which contains a 'reattached_sessions' array, containing the sess_id of any reattached session. Client side, this can be caught in the onMessage handler, under the $.verto.enum.message.clientReady key.
This commit is contained in:
parent
07d4d093b0
commit
34e491ffa1
@ -159,6 +159,9 @@ var callbacks = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case $.verto.enum.message.clientReady:
|
||||||
|
// console.error("clientReady", data);
|
||||||
|
break;
|
||||||
case $.verto.enum.message.info:
|
case $.verto.enum.message.info:
|
||||||
var body = data.body;
|
var body = data.body;
|
||||||
|
|
||||||
|
@ -606,6 +606,11 @@
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'verto.clientReady':
|
||||||
|
verto.callbacks.onMessage(verto, null, $.verto.enum.message.clientReady, data.params);
|
||||||
|
console.debug("CLIENT READY", data.params);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.error("INVALID METHOD OR NON-EXISTANT CALL REFERENCE IGNORED", data.method);
|
console.error("INVALID METHOD OR NON-EXISTANT CALL REFERENCE IGNORED", data.method);
|
||||||
break;
|
break;
|
||||||
@ -2686,7 +2691,7 @@
|
|||||||
|
|
||||||
$.verto.enum.state = $.verto.ENUM("new requesting trying recovering ringing answering early active held hangup destroy purge");
|
$.verto.enum.state = $.verto.ENUM("new requesting trying recovering ringing answering early active held hangup destroy purge");
|
||||||
$.verto.enum.direction = $.verto.ENUM("inbound outbound");
|
$.verto.enum.direction = $.verto.ENUM("inbound outbound");
|
||||||
$.verto.enum.message = $.verto.ENUM("display info pvtEvent");
|
$.verto.enum.message = $.verto.ENUM("display info pvtEvent clientReady");
|
||||||
|
|
||||||
$.verto.enum = Object.freeze($.verto.enum);
|
$.verto.enum = Object.freeze($.verto.enum);
|
||||||
|
|
||||||
|
@ -632,6 +632,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
|
|||||||
case $.verto.enum.message.display:
|
case $.verto.enum.message.display:
|
||||||
$rootScope.$apply(function() {});
|
$rootScope.$apply(function() {});
|
||||||
break;
|
break;
|
||||||
|
case $.verto.enum.message.clientReady:
|
||||||
|
$rootScope.$emit('clientReady', {
|
||||||
|
reattached_sessions: params.reattached_sessions,
|
||||||
|
});
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.warn('Got a not implemented message:', msg, dialog, params);
|
console.warn('Got a not implemented message:', msg, dialog, params);
|
||||||
break;
|
break;
|
||||||
|
@ -750,6 +750,9 @@ var callbacks = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case $.verto.enum.message.clientReady:
|
||||||
|
// console.error("clientReady", data);
|
||||||
|
break;
|
||||||
case $.verto.enum.message.info:
|
case $.verto.enum.message.info:
|
||||||
if (data.msg) {
|
if (data.msg) {
|
||||||
data = data.msg;
|
data = data.msg;
|
||||||
|
@ -441,6 +441,9 @@ var callbacks = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case $.verto.enum.message.clientReady:
|
||||||
|
// console.error("clientReady", data);
|
||||||
|
break;
|
||||||
case $.verto.enum.message.info:
|
case $.verto.enum.message.info:
|
||||||
if (data.msg) {
|
if (data.msg) {
|
||||||
data = data.msg;
|
data = data.msg;
|
||||||
|
@ -1232,6 +1232,11 @@ static void drop_detached(void)
|
|||||||
static void attach_calls(jsock_t *jsock)
|
static void attach_calls(jsock_t *jsock)
|
||||||
{
|
{
|
||||||
verto_pvt_t *tech_pvt;
|
verto_pvt_t *tech_pvt;
|
||||||
|
cJSON *msg = NULL;
|
||||||
|
cJSON *params = NULL;
|
||||||
|
cJSON *reattached_sessions = NULL;
|
||||||
|
|
||||||
|
reattached_sessions = cJSON_CreateArray();
|
||||||
|
|
||||||
switch_thread_rwlock_rdlock(verto_globals.tech_rwlock);
|
switch_thread_rwlock_rdlock(verto_globals.tech_rwlock);
|
||||||
for(tech_pvt = verto_globals.tech_head; tech_pvt; tech_pvt = tech_pvt->next) {
|
for(tech_pvt = verto_globals.tech_head; tech_pvt; tech_pvt = tech_pvt->next) {
|
||||||
@ -1241,9 +1246,14 @@ static void attach_calls(jsock_t *jsock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tech_reattach(tech_pvt, jsock);
|
tech_reattach(tech_pvt, jsock);
|
||||||
|
cJSON_AddItemToArray(reattached_sessions, cJSON_CreateString(jsock->uuid_str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch_thread_rwlock_unlock(verto_globals.tech_rwlock);
|
switch_thread_rwlock_unlock(verto_globals.tech_rwlock);
|
||||||
|
|
||||||
|
msg = jrpc_new_req("verto.clientReady", NULL, ¶ms);
|
||||||
|
cJSON_AddItemToObject(params, "reattached_sessions", reattached_sessions);
|
||||||
|
jsock_queue_event(jsock, &msg, SWITCH_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void detach_calls(jsock_t *jsock)
|
static void detach_calls(jsock_t *jsock)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user