Skip to content

Commit 8321794

Browse files
committed
Merge pull request #127 from QuickBlox/develop.sprint1
Fix bugs for sprint 1
2 parents 6005024 + 7929192 commit 8321794

File tree

8 files changed

+165
-122
lines changed

8 files changed

+165
-122
lines changed

quickblox.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/webrtc/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
'login': 'Login as any user on this computer and another user on another computer.',
2020
'create_session': 'Creating a session...',
2121
'connect': 'Connecting...',
22-
'connect_error': 'Something wrong with connect to chat. Check internet connection or user info and trying again.',
22+
'connect_error': 'Something went wrong with the connection. Check internet connection or user info and try again.',
2323
'login_as': 'Logged in as ',
2424
'title_login': 'Choose a user to login with:',
2525
'title_callee': 'Choose users to call:',

samples/webrtc/index.html

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,25 @@ <h4>
8484
</div>
8585

8686
<!-- MODALS -->
87+
<div class="modal fade" id="connect_err" tabindex="-1" data-backdrop="static" data-keyboard="false">
88+
<div class="modal-dialog modal-sm">
89+
<div class="modal-content">
90+
<div class="modal-header">
91+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
92+
93+
<h4>Connect to chat is failed</h4>
94+
</div>
95+
96+
<div class="modal-body">
97+
<p class="text-danger">
98+
Something wrong with connect to chat. Check internet connection or user info and trying again.
99+
</p>
100+
</div>
101+
<p></p>
102+
</div>
103+
</div>
104+
</div>
105+
87106
<div class="modal fade" id="error_no_calles" tabindex="-1">
88107
<div class="modal-dialog modal-sm">
89108
<div class="modal-content">
@@ -128,7 +147,7 @@ <h4>Call from <strong class="j-ic_initiator"></strong></h4>
128147

129148
<script type="text/template" id="tpl_device_not_found">
130149
Error: devices (camera or microphone) are not found.
131-
<span class="qb-text">&emsp;Login in <b>as <%=name%></b></span>
150+
<span class="qb-text">Login in <b>as <%=name%></b></span>
132151
<button class='fw-link j-logout'>Logout</button>
133152
</script>
134153

samples/webrtc/js/app.js

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,25 @@
164164
password: 'webAppPass'
165165
}, function(err, res) {
166166
if(err) {
167-
QB.chat.disconnect();
168-
app.router.navigate('join', { trigger: true });
167+
if(!_.isEmpty(app.currentSession)) {
168+
app.currentSession.stop({});
169+
app.currentSession = {};
170+
}
171+
172+
app.helpers.changeFilter('#localVideo', 'no');
173+
app.helpers.changeFilter('#main_video', 'no');
174+
app.mainVideo = 0;
175+
176+
$(ui.filterSelect).val('no');
177+
app.calleesAnwered = [];
178+
179+
if(call.callTimer) {
180+
$('#timer').addClass('hidden');
181+
clearInterval(call.callTimer);
182+
call.callTimer = null;
183+
call.callTime = 0;
184+
app.helpers.network = {};
185+
}
169186
} else {
170187
$form.removeClass('join-wait');
171188
$form.trigger('reset');
@@ -250,6 +267,7 @@
250267
/** Hangup */
251268
if ($btn.hasClass('hangup')) {
252269
if(!_.isEmpty(app.currentSession)) {
270+
253271
app.currentSession.stop({});
254272
app.currentSession = {};
255273

@@ -278,7 +296,7 @@
278296
return false;
279297
}
280298

281-
app.helpers.stateBoard.update('create_session');
299+
app.helpers.stateBoard.update({'title': 'create_session'});
282300
app.currentSession = QB.webrtc.createNewSession(Object.keys(app.callees), QB.webrtc.CallType.VIDEO);
283301

284302
app.currentSession.getUserMedia(mediaParams, function(err, stream) {
@@ -323,7 +341,6 @@
323341

324342
/** DECLINE */
325343
$(document).on('click', '.j-decline', function() {
326-
console.info('FUUUC');
327344
if (!_.isEmpty(app.currentSession)) {
328345
app.currentSession.reject({});
329346

@@ -374,6 +391,7 @@
374391
compiled = _.template( $('#callee_video').html() );
375392

376393
$('.j-actions').addClass('hangup');
394+
$(ui.sourceFilter).attr('disabled', true);
377395

378396
/** get all opponents */
379397
app.currentSession.opponentsIDs.forEach(function(userID, i, arr) {
@@ -390,7 +408,7 @@
390408
videoElems += compiled({userID: userID, name: userInfo.full_name});
391409

392410
if(peerState === QB.webrtc.PeerConnectionState.CLOSED){
393-
app.helpers.toggleRemoteVideoView(app.currentSession, userID, 'clear');
411+
app.helpers.toggleRemoteVideoView( userID, 'clear');
394412
}
395413
}
396414
});
@@ -403,7 +421,6 @@
403421
}
404422
});
405423
app.helpers.setFooterPosition();
406-
407424
app.currentSession.accept({});
408425
}
409426
});
@@ -514,7 +531,7 @@
514531
QB.webrtc.onCallStatsReport = function onCallStatsReport(session, userId, stats) {
515532
console.group('onCallStatsReport');
516533
console.log('userId: ', userId);
517-
// console.log('Stats: ', stats);
534+
console.log('session: ', session);
518535
console.groupEnd();
519536

520537
/**
@@ -525,7 +542,7 @@
525542
var inboundrtp = _.findWhere(stats, {type: 'inboundrtp'});
526543

527544
if(!inboundrtp || !app.helpers.isBytesReceivedChanges(userId, inboundrtp)) {
528-
console.warn("This is Firefox and user " + userId + " has lost his connection.");
545+
console.warn('This is Firefox and user ' + userId + ' has lost his connection.');
529546

530547
if(!_.isEmpty(app.currentSession)) {
531548
app.currentSession.closeConnection(userId);
@@ -552,7 +569,7 @@
552569

553570
if(session.opponentsIDs.length > 1) {
554571
app.helpers.stateBoard.update({
555-
'title': 'call_stop',
572+
'title': 'tpl_call_stop',
556573
'property': {
557574
'name': app.caller.full_name
558575
}
@@ -585,17 +602,20 @@
585602

586603
QB.webrtc.onCallListener = function onCallListener(session, extension) {
587604
console.group('onCallListener.');
588-
console.log('Session: ' + session);
589-
console.log('Extension: ' + JSON.stringify(extension));
605+
console.log('Session: ', session);
606+
console.log('Extension: ', extension);
590607
console.groupEnd();
591608

592609
var initiator = _.findWhere(app.users, {id: session.initiatorID});
593610
app.currentSession = session;
594611

595612
/** close previous modal */
596613
$(ui.income_call).modal('hide');
597-
/** set name of caller */
598-
$('.j-ic_initiator').text( initiator.full_name );
614+
/**
615+
* set name of caller
616+
* TODO: what if user doesn't sync all users
617+
*/
618+
$('.j-ic_initiator').text( initiator.full_name ? initiator.full_name : 'Unknown' );
599619
$(ui.income_call).modal('show');
600620
document.getElementById(sounds.rington).play();
601621
};
@@ -697,11 +717,11 @@
697717
};
698718

699719
QB.webrtc.onSessionConnectionStateChangedListener = function onSessionConnectionStateChangedListener(session, userId, connectionState) {
700-
console.group('onSessionConnectionStateChangedListener.');
701-
console.log('UserID: ', userId);
702-
console.log('Session: ', session);
703-
console.log('Сonnection state: ', connectionState);
704-
console.groupEnd();
720+
console.group('onSessionConnectionStateChangedListener.');
721+
console.log('UserID: ', userId);
722+
console.log('Session: ', session);
723+
console.log('Сonnection state: ', connectionState);
724+
console.groupEnd();
705725

706726
var connectionStateName = _.invert(QB.webrtc.SessionConnectionState)[connectionState],
707727
$calleeStatus = $('.j-callee_status_' + userId),
@@ -734,7 +754,6 @@
734754
$('#remote_video_' + userId).removeClass('active');
735755

736756
app.helpers.changeFilter('#main_video', 'no');
737-
// app.currentSession.detachMediaStream('main_video');
738757
app.mainVideo = 0;
739758
}
740759

@@ -765,7 +784,7 @@
765784
'title': 'tpl_accept_call',
766785
'property': {
767786
'users': app.calleesAnwered
768-
}
787+
}
769788
});
770789
}
771790

samples/webrtc/js/helpers.js

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
* [getUui - generate a unique id]
9393
* @return {[string]} [a unique id]
9494
*/
95-
function getUui() {
95+
function _getUui() {
9696
var navigator_info = window.navigator;
9797
var screen_info = window.screen;
9898
var uid = navigator_info.mimeTypes.length;
@@ -107,56 +107,58 @@
107107
}
108108

109109
app.helpers.join = function(data) {
110+
var userRequiredParams = {
111+
'login': _getUui(),
112+
'password': 'webAppPass'
113+
};
114+
110115
return new Promise(function(resolve, reject) {
111-
QB.createSession(function(csError, csResult){
112-
if(csError) {
113-
reject(csError);
116+
QB.createSession(function(csErr, csRes){
117+
if(csErr) {
118+
reject(csErr);
114119
} else {
115-
/** Login */
116-
QB.login({
117-
'login': getUui(),
118-
'password': 'webAppPass'
119-
},
120-
function(egError, egUser){
121-
/** User not found */
122-
if(egError) {
123-
QB.users.create({
124-
'login': getUui(),
125-
'password': 'webAppPass',
126-
'full_name': data.username,
127-
'tag_list': data.room
128-
},
129-
function(ucError, ucUser){
130-
if(ucError) {
131-
console.log('[create user] Error:', ucError);
132-
reject(ucError);
133-
} else {
134-
console.log('[create user] User:', ucUser);
135-
resolve(ucUser);
136-
}
137-
}
138-
);
139-
} else {
140-
/** Update info */
141-
if(egUser.user_tags !== data.room || egUser.full_name !== data.username ) {
142-
QB.users.update(egUser.id, {
143-
'full_name': data.username,
144-
'tag_list': data.room
145-
}, function(uuError, uuUser) {
146-
if(uuError) {
147-
console.log('APP [update user] Error:', uuError);
148-
reject(uuError);
120+
/** In first trying to login */
121+
QB.login(userRequiredParams, function(loginErr, loginUser){
122+
if(loginErr) {
123+
/** Login failed, trying to create account */
124+
QB.users.create({
125+
'login': _getUui(),
126+
'password': 'webAppPass',
127+
'full_name': data.username,
128+
'tag_list': data.room
129+
}, function(createErr, createUser){
130+
if(createErr) {
131+
console.log('[create user] Error:', createErr);
132+
reject(createErr);
133+
} else {
134+
QB.login(userRequiredParams, function(reloginErr, reloginUser) {
135+
if(reloginErr) {
136+
console.log('[relogin user] Error:', reloginErr);
149137
} else {
150-
console.log('APP [update user] User:', uuUser);
151-
resolve(uuUser);
138+
resolve(reloginUser);
152139
}
153140
});
154-
} else {
155-
resolve(egUser);
156141
}
142+
});
143+
} else {
144+
/** Update info */
145+
if(loginUser.user_tags !== data.room || loginUser.full_name !== data.username ) {
146+
QB.users.update(loginUser.id, {
147+
'full_name': data.username,
148+
'tag_list': data.room
149+
}, function(updateError, updateUser) {
150+
if(updateError) {
151+
console.log('APP [update user] Error:', updateError);
152+
reject(updateError);
153+
} else {
154+
resolve(updateUser);
155+
}
156+
});
157+
} else {
158+
resolve(loginUser);
157159
}
158160
}
159-
);
161+
});
160162
}
161163
});
162164
});
@@ -180,7 +182,7 @@
180182
}
181183
});
182184

183-
if(!result.items.length) {
185+
if(result.items.length < 2) {
184186
reject({
185187
'title': 'not found',
186188
'message': 'Not found users by tag'

src/modules/webrtc/qbRTCPeerConnection.js

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -239,35 +239,32 @@ RTCPeerConnection.prototype.onIceConnectionStateCallback = function() {
239239
};
240240

241241
RTCPeerConnection.prototype._getStatsWrap = function() {
242-
var self = this,
243-
selector = self.delegate.callType == 1 ? self.getLocalStreams()[0].getVideoTracks()[0] : self.getLocalStreams()[0].getAudioTracks()[0],
244-
statsReportInterval;
245-
246-
if (!config.webrtc && !config.webrtc.statsReportTimeInterval) {
247-
return;
248-
}
249-
250-
if (isNaN(+config.webrtc.statsReportTimeInterval)) {
251-
Helpers.traceError('statsReportTimeInterval (' + config.webrtc.statsReportTimeInterval + ') must be integer.');
252-
return;
253-
}
254-
255-
statsReportInterval = config.webrtc.statsReportTimeInterval * 1000;
256-
257-
var _statsReportCallback = function() {
258-
_getStats(self, selector,
259-
function (results) {
260-
self.delegate._onCallStatsReport(self.userID, results);
261-
},
262-
function errorLog(err) {
263-
Helpers.traceError("_getStats error. " + err.name + ": " + err.message);
264-
}
265-
);
266-
};
267-
268-
Helpers.trace('Stats tracker has been started.');
269-
270-
self.statsReportTimer = setInterval(_statsReportCallback, statsReportInterval);
242+
var self = this,
243+
selector = self.delegate.callType == 1 ? self.getLocalStreams()[0].getVideoTracks()[0] : self.getLocalStreams()[0].getAudioTracks()[0],
244+
statsReportInterval;
245+
246+
if (config.webrtc && config.webrtc.statsReportTimeInterval) {
247+
if (isNaN(+config.webrtc.statsReportTimeInterval)) {
248+
Helpers.traceError('statsReportTimeInterval (' + config.webrtc.statsReportTimeInterval + ') must be integer.');
249+
return;
250+
}
251+
252+
statsReportInterval = config.webrtc.statsReportTimeInterval * 1000;
253+
254+
var _statsReportCallback = function() {
255+
_getStats(self, selector,
256+
function (results) {
257+
self.delegate._onCallStatsReport(self.userID, results);
258+
},
259+
function errorLog(err) {
260+
Helpers.traceError('_getStats error. ' + err.name + ': ' + err.message);
261+
}
262+
);
263+
};
264+
265+
Helpers.trace('Stats tracker has been started.');
266+
self.statsReportTimer = setInterval(_statsReportCallback, statsReportInterval);
267+
}
271268
};
272269

273270
RTCPeerConnection.prototype._clearWaitingReconnectTimer = function() {

0 commit comments

Comments
 (0)