1
0
mirror of https://github.com/moparisthebest/kaiwa synced 2024-11-26 03:02:25 -05:00

Got things mostly almost working

This commit is contained in:
Lance Stout 2013-10-15 23:00:56 -07:00
parent 59dceeee59
commit 5ccdc6361b
2 changed files with 35 additions and 11 deletions

View File

@ -9,6 +9,7 @@ var uuid = require('node-uuid');
var Contact = require('../models/contact'); var Contact = require('../models/contact');
var Resource = require('../models/resource'); var Resource = require('../models/resource');
var Message = require('../models/message'); var Message = require('../models/message');
var Call = require('../models/call');
var discoCapsQueue = async.queue(function (pres, cb) { var discoCapsQueue = async.queue(function (pres, cb) {
@ -337,31 +338,37 @@ module.exports = function (client, app) {
client.on('jingle:incoming', function (session) { client.on('jingle:incoming', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
me.calls.add({ var call = new Call({
contact: contact, contact: contact,
state: 'incoming', state: 'incoming',
jingleSession: session jingleSession: session
}); });
contact.jingleCall = call;
me.calls.add(call);
}); });
client.on('jingle:outgoing', function (session) { client.on('jingle:outgoing', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
me.calls.add({ var call = new Call({
contact: contact, contact: contact,
state: 'outgoing', state: 'outgoing',
jingleSession: session jingleSession: session
}); });
contact.jingleCall = call;
me.calls.add(call);
}); });
client.on('jingle:terminated', function (session) { client.on('jingle:terminated', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
contact.callState = ''; contact.callState = '';
contact.jingleCall = null; contact.jingleCall = null;
contact.onCall = false;
}); });
client.on('jingle:accepted', function (session) { client.on('jingle:accepted', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
contact.callState = 'activeCall'; contact.callState = 'activeCall';
contact.onCall = true;
}); });
client.on('jingle:localstream:added', function (stream) { client.on('jingle:localstream:added', function (stream) {
@ -375,13 +382,11 @@ module.exports = function (client, app) {
client.on('jingle:remotestream:added', function (session) { client.on('jingle:remotestream:added', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
contact.stream = session.stream; contact.stream = session.stream;
contact.trigger('change:stream');
}); });
client.on('jingle:remotestream:removed', function (session) { client.on('jingle:remotestream:removed', function (session) {
var contact = me.getContact(session.peer); var contact = me.getContact(session.peer);
contact.stream = null; contact.stream = null;
contact.trigger('change:stream');
}); });
client.on('jingle:ringing', function (session) { client.on('jingle:ringing', function (session) {

View File

@ -23,6 +23,7 @@ module.exports = BasePage.extend(chatHelpers).extend({
this.listenTo(this.model.messages, 'change:edited', this.refreshModel); this.listenTo(this.model.messages, 'change:edited', this.refreshModel);
this.listenTo(this.model.messages, 'change:pending', this.refreshModel); this.listenTo(this.model.messages, 'change:pending', this.refreshModel);
this.listenTo(this.model, 'change:onCall', this.handleCall);
this.listenTo(this.model, 'change:stream', this.handleStream); this.listenTo(this.model, 'change:stream', this.handleStream);
this.render(); this.render();
@ -30,7 +31,9 @@ module.exports = BasePage.extend(chatHelpers).extend({
events: { events: {
'keydown textarea': 'handleKeyDown', 'keydown textarea': 'handleKeyDown',
'keyup textarea': 'handleKeyUp', 'keyup textarea': 'handleKeyUp',
'click .call': 'handleCallClick' 'click .call': 'handleCallClick',
'click .end': 'handleEndClick',
'click .mute': 'handleMuteClick'
}, },
srcBindings: { srcBindings: {
avatar: 'header .avatar' avatar: 'header .avatar'
@ -198,12 +201,6 @@ module.exports = BasePage.extend(chatHelpers).extend({
var resources = val || this.model.jingleResources; var resources = val || this.model.jingleResources;
this.$('button.call').prop('disabled', !resources.length); this.$('button.call').prop('disabled', !resources.length);
}, },
handleStream: function () {
this.attach = attachMediaStream;
if (!!this.model.stream) {
attachMediaStream(this.model.stream, this.$('.remoteVideo')[0]);
}
},
appendModel: function (model, preload) { appendModel: function (model, preload) {
var self = this; var self = this;
var isGrouped = model.shouldGroupWith(this.lastModel); var isGrouped = model.shouldGroupWith(this.lastModel);
@ -221,5 +218,27 @@ module.exports = BasePage.extend(chatHelpers).extend({
this.lastModel = model; this.lastModel = model;
this.scrollIfPinned(); this.scrollIfPinned();
},
handleCall: function () {
if (this.model.onCall) {
attachMediaStream(me.stream, this.$('video.local')[0], {
mirror: true,
muted: true
});
}
},
handleStream: function (model, stream) {
console.log(arguments);
attachMediaStream(stream, this.$('video.remote')[0]);
},
handleEndClick: function (e) {
e.preventDefault();
this.model.jingleCall.end({
condition: 'success'
});
return false;
},
handleMuteClick: function (e) {
return false;
} }
}); });