From 6659132be229b135e4566b666d7e773b4c4f1813 Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Wed, 23 Aug 2017 14:32:36 +0200 Subject: [PATCH] TT#20668 Call: Create local media and start CDK-Call Change-Id: Ie5906422eeaeef4459971c095deb3646703cc40d --- app.js | 4 + app.json | 2 +- classic/src/view/common/rtc/RtcController.js | 122 +++++++++++++++++- classic/src/view/common/rtc/RtcModel.js | 3 + classic/src/view/common/rtc/composer/Phone.js | 29 +++-- 5 files changed, 144 insertions(+), 16 deletions(-) diff --git a/app.js b/app.js index 0aeb5af4..bd3c80db 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,7 @@ + +// Enable debug output for RTC:engine +cdk.logging.debug(); + // Attach JWT token to every request, and cleanup framework default params Ext.Ajax.on("beforerequest", function(con, options) { con.setUseDefaultXhrHeader(false); diff --git a/app.json b/app.json index 1ce1c3b8..f15860c9 100644 --- a/app.json +++ b/app.json @@ -268,7 +268,7 @@ // - other: a string (such as the build.timestamp shown here) to allow // requests to be cached for this build. // - "cache": false, + "cache": true, // When "cache" is not true, this value is the request parameter used // to control caching. diff --git a/classic/src/view/common/rtc/RtcController.js b/classic/src/view/common/rtc/RtcController.js index ece20fb7..8a4823e9 100644 --- a/classic/src/view/common/rtc/RtcController.js +++ b/classic/src/view/common/rtc/RtcController.js @@ -10,7 +10,14 @@ Ext.define('NgcpCsc.view.common.rtc.RtcController', { '*': { initrtc: 'showRtcPanel', emulateCall: 'emulateCall', - endcall: 'endCall' + endcall: 'endCall', + callPending: 'callPending', + callAccepted: 'callAccepted', + callRingingStart: 'callRingingStart', + callRingingStop: 'callRingingStop', + callRemoteMedia: 'callRemoteMedia', + callRemoteMediaEnded: 'callRemoteMediaEnded', + callEnded: 'callEnded' } } }, @@ -18,6 +25,98 @@ Ext.define('NgcpCsc.view.common.rtc.RtcController', { currentStream: null, intervalId: '', + sendAudio: function(){ + this.initCall('audio'); + }, + + sendVideo: function() { + this.initCall('video'); + }, + + initCall: function(mediaType) { + var controller = this; + var call = null; + var callee = controller.getViewModel().get('numberToCall'); + var network = controller.getViewModel().get('rtcEngineNetwork'); + + if (callee !== '' && callee !== null && callee !== void(0)) { + this.createMedia(mediaType).then(function (localMediaStream) { + controller.getViewModel().set('rtcEngineLocalMediaStream', localMediaStream); + call = network.call(callee, { + localMediaStream: localMediaStream + }); + controller.getViewModel().set('rtcEngineCall', call); + call.onPending(function () { + controller.fireEvent('callPending'); + }).onAccepted(function () { + controller.fireEvent('callAccepted'); + }).onRingingStart(function () { + controller.fireEvent('callRingingStart'); + }).onRingingStop(function () { + controller.fireEvent('callRingingStop'); + }).onRemoteMedia(function (stream) { + controller.fireEvent('callRemoteMedia', stream); + }).onRemoteMediaEnded(function () { + controller.fireEvent('callRemoteMediaEnded'); + }).onEnded(function () { + controller.fireEvent('callEnded'); + }); + }).catch(function (err) { + console.error(err); + }); + } + }, + + createMedia: function(mediaType) { + return new Ext.Promise(function(resolve, reject){ + var localMediaStream; + localMediaStream = new cdk.LocalMediaStream(); + localMediaStream.queryMediaSources(function(sources){ + if(mediaType === 'audio') { + localMediaStream.setAudio(sources.defaultAudio); + } + if(mediaType === 'video') { + localMediaStream.setVideo(sources.defaultVideo); + } + localMediaStream.build(function(err){ + if(err) { + reject(err); + } else { + resolve(localMediaStream); + } + }); + }); + }); + }, + + callPending: function() { + console.log("callPending"); + }, + + callAccepted: function() { + console.log("callAccepted"); + }, + + callRingingStart: function() { + console.log("callRingingStart"); + }, + + callRingingStop: function() { + console.log("callRingingStop"); + }, + + callRemoteMedia: function() { + console.log("callRemoteMedia"); + }, + + callRemoteMediaEnded: function() { + console.log("callRemoteMediaEnded"); + }, + + callEnded: function() { + console.log("callEnded"); + }, + showRtcPanel: function(record, action, switchVideoOn, preventReloadConversation) { var me = this; var panel = this.getView(); @@ -373,10 +472,27 @@ Ext.define('NgcpCsc.view.common.rtc.RtcController', { }); }); }).then(function(res) { - var rtcSession = Ext.decode(res.responseText); var viewModel = controller.getViewModel(); + var rtcNetwork = null; + var rtcSession = Ext.decode(res.responseText); + var rtcClient = new cdk.Client({ + url: 'wss://' + window.location.host + '/rtc/api', + userSession: rtcSession.rtc_browser_token + }); + rtcClient.onConnect(function(){ + console.log('Connected to RTC:Engine'); + viewModel.set('rtcEngineClient', rtcClient); + rtcNetwork = rtcClient.getNetworkByTag('sip'); + rtcNetwork.onConnect(function(){ + console.log('Connected to SipNetwork'); + viewModel.set('rtcEngineNetwork', rtcNetwork); + }).onDisconnect(function(){ + console.log('Failed to connected to SipNetwork'); + }); + }).onDisconnect(function(){ + console.log('Failed to connected to RTC:Engine'); + }); viewModel.set('rtcEngineSession', rtcSession); - console.log(rtcSession); }).catch(function(err){ console.error(err); }); diff --git a/classic/src/view/common/rtc/RtcModel.js b/classic/src/view/common/rtc/RtcModel.js index 0838d24a..ba278d83 100644 --- a/classic/src/view/common/rtc/RtcModel.js +++ b/classic/src/view/common/rtc/RtcModel.js @@ -29,6 +29,9 @@ Ext.define('NgcpCsc.view.rtc.RtcModel', { smsText: '', // panel status minimized: true, + rtcEngineLocalMediaStream: null, + rtcEngineCall: null, + rtcEngineNetwork: null, rtcEngineClient: null, rtcEngineSession: null }, diff --git a/classic/src/view/common/rtc/composer/Phone.js b/classic/src/view/common/rtc/composer/Phone.js index 4787467b..a15eb1a6 100644 --- a/classic/src/view/common/rtc/composer/Phone.js +++ b/classic/src/view/common/rtc/composer/Phone.js @@ -33,19 +33,24 @@ Ext.define('NgcpCsc.view.common.composer.Phone', { layout: 'center', items: [{ xtype: 'container', - items: [{ - xtype: 'button', - text: Ngcp.csc.locales.rtc.sendAudio[localStorage.getItem('languageSelected')], - iconCls: Ngcp.csc.icons.microphone, - margin: '0 10 0 0', - listeners: { - + items: [ + { + xtype: 'button', + text : Ngcp.csc.locales.rtc.sendAudio[localStorage.getItem('languageSelected')], + iconCls: Ngcp.csc.icons.microphone, + margin: '0 10 0 0', + listeners: { + click: 'sendAudio' + } + },{ + xtype: 'button', + text : Ngcp.csc.locales.rtc.sendVideo[localStorage.getItem('languageSelected')], + iconCls: Ngcp.csc.icons.video, + listeners: { + click: 'sendVideo' + } } - }, { - xtype: 'button', - text: Ngcp.csc.locales.rtc.sendVideo[localStorage.getItem('languageSelected')], - iconCls: Ngcp.csc.icons.video - }] + ] }] }, { hidden: true,