- Make cdk available as js module - Provide a store that reflects all events of a call - Integrate the call globally in the vue.js stack - Register on all global events (client.onConnected, client.onDisconnected, network.onConnect, network.onDisconnect) to get the connection state with RTC:engine Change-Id: I40b61dd4c82ef6bd0974b693328740ab088df5a4changes/69/16369/2
parent
24d73971f8
commit
15729c0144
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
import Vue from 'vue';
|
||||||
|
import { getJsonBody } from './utils';
|
||||||
|
|
||||||
|
export function create() {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
Vue.http.post('/api/rtcsessions/').then((res)=>{
|
||||||
|
resolve(res);
|
||||||
|
}).catch((err)=>{
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getByUrl(url) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
Vue.http.get(url).then((res)=>{
|
||||||
|
resolve(getJsonBody(res.body));
|
||||||
|
}).catch((err)=>{
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createSession() {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
Promise.resolve().then(()=>{
|
||||||
|
return create();
|
||||||
|
}).then((res)=>{
|
||||||
|
return getByUrl(res.headers.get('Location'));
|
||||||
|
}).then((res)=>{
|
||||||
|
resolve(res);
|
||||||
|
}).catch((err)=>{
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createSessionToken() {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
createSession().then((res)=>{
|
||||||
|
resolve(res.rtc_browser_token);
|
||||||
|
}).catch((err)=>{
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
import loadScript from 'load-script'
|
||||||
|
|
||||||
|
var scriptId = 'cdk';
|
||||||
|
var scriptPath = '/rtc/files/dist/cdk-prod.js';
|
||||||
|
var webSocketPath = '/rtc/api';
|
||||||
|
var webSocketUrl = 'wss://' + window.location.host + webSocketPath;
|
||||||
|
|
||||||
|
export function loadCdkLib() {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
if(!document.getElementById(scriptId)) {
|
||||||
|
loadScript(scriptPath, {
|
||||||
|
attrs: {
|
||||||
|
id: scriptId
|
||||||
|
}
|
||||||
|
}, function(err, script){
|
||||||
|
if(err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(script);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function connectCdkClient(session) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
var client = new cdk.Client({
|
||||||
|
url: webSocketUrl,
|
||||||
|
userSession: session
|
||||||
|
});
|
||||||
|
client.onConnect(()=>{
|
||||||
|
resolve(client);
|
||||||
|
});
|
||||||
|
client.onDisconnect(()=>{
|
||||||
|
reject(new Error(client.disconnectReason));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function connectCdkNetwork(session, networkTag) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
Promise.resolve().then(()=>{
|
||||||
|
return connectCdkClient(session);
|
||||||
|
}).then((client)=>{
|
||||||
|
return new Promise(($resolve, $reject)=>{
|
||||||
|
var network = client.getNetworkByTag(networkTag);
|
||||||
|
network.onConnect(()=>{
|
||||||
|
$resolve(network);
|
||||||
|
});
|
||||||
|
network.onDisconnect(()=>{
|
||||||
|
$reject(new Error(network.disconnectReason));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}).then((network)=>{
|
||||||
|
resolve(network);
|
||||||
|
}).catch((err)=>{
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function connectDefaultCdkNetwork(session) {
|
||||||
|
return connectCdkNetwork(session, 'sip');
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
import { loadCdkLib, connectDefaultCdkNetwork } from '../helpers/cdk-lib';
|
||||||
|
import { createSessionToken } from '../api/rtcsession';
|
||||||
|
|
||||||
|
var cdkNetwork = null;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state: {
|
||||||
|
loaded: false,
|
||||||
|
initFailure: false,
|
||||||
|
connected: false,
|
||||||
|
disconnectReason: '',
|
||||||
|
incoming: false,
|
||||||
|
incomingNumber: '',
|
||||||
|
outgoing: false,
|
||||||
|
outgoingNumber: ''
|
||||||
|
},
|
||||||
|
getters: {
|
||||||
|
isCallAvailable(state, getters) {
|
||||||
|
return state.loaded && state.connected;
|
||||||
|
},
|
||||||
|
hasCallInitFailure(state, getters) {
|
||||||
|
return state.initFailure;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
load(state) {
|
||||||
|
state.loaded = true;
|
||||||
|
},
|
||||||
|
initFailure(state) {
|
||||||
|
state.initFailure = true;
|
||||||
|
},
|
||||||
|
connect(state) {
|
||||||
|
state.connected = true;
|
||||||
|
},
|
||||||
|
disconnect(state, reason) {
|
||||||
|
state.connected = false;
|
||||||
|
state.disconnectReason = reason;
|
||||||
|
},
|
||||||
|
incoming(state) {
|
||||||
|
|
||||||
|
},
|
||||||
|
outgoing(state) {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
initialize(context) {
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
if(context.rootState.user.capabilities.rtcengine) {
|
||||||
|
loadCdkLib().then((script)=>{
|
||||||
|
context.commit('load');
|
||||||
|
return createSessionToken();
|
||||||
|
}).then((sessionToken)=>{
|
||||||
|
return connectDefaultCdkNetwork(sessionToken);
|
||||||
|
}).then(($cdkNetwork)=>{
|
||||||
|
cdkNetwork = $cdkNetwork;
|
||||||
|
cdkNetwork.getClient().onConnect(()=>{
|
||||||
|
context.commit('connect');
|
||||||
|
});
|
||||||
|
cdkNetwork.getClient().onDisconnect(()=>{
|
||||||
|
context.commit('disconnect', cdkNetwork.disconnectReason);
|
||||||
|
});
|
||||||
|
context.commit('connect');
|
||||||
|
resolve();
|
||||||
|
}).catch((err)=>{
|
||||||
|
context.commit('initFailure');
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
call(context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
connect(context, sessionToken) {
|
||||||
|
},
|
||||||
|
disconnect(context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
enableAudio(context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
disableAudio(context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
enableVideo(context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
disableVideo(context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in new issue