- 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