call notification test

This commit is contained in:
Sagi Dayan 2020-04-12 21:28:33 -04:00
parent c3508e47b7
commit 0247eb118d
7 changed files with 37 additions and 13 deletions

View file

@ -3,6 +3,7 @@ const User = use('App/Models/User');
const UserChildUtils = use('App/Utils/UserChildUtils'); const UserChildUtils = use('App/Utils/UserChildUtils');
const Call = use('App/Models/Call'); const Call = use('App/Models/Call');
const IceServer = use('App/Models/IceServer'); const IceServer = use('App/Models/IceServer');
const UserChannel = use('App/Controllers/Ws/UserChannelController')
const calls = {}; const calls = {};
class SignalingController { class SignalingController {
@ -14,11 +15,11 @@ class SignalingController {
this.register(call); this.register(call);
console.log(`User #${this.user.id} connected to call ${this.callId}`); console.log(`User #${this.user.id} connected to call ${this.callId}`);
} }
register(callModel) { async register(callModel) {
if (!calls[this.callId]) if (!calls[this.callId]) {
calls[this.callId] = calls[this.callId] =
new CallSession(callModel, this.onCallEnded.bind(this)); new CallSession(callModel, this.onCallEnded.bind(this));
else } else
console.log(`Call #${this.callId} Already Found`); console.log(`Call #${this.callId} Already Found`);
const callSession = calls[this.callId]; const callSession = calls[this.callId];
callSession.registerUser(this.user, this.socket) callSession.registerUser(this.user, this.socket)
@ -85,15 +86,24 @@ class CallSession {
else if (this.user_2.id === user.id) else if (this.user_2.id === user.id)
userIndex = 2; userIndex = 2;
if (userIndex < 0) return false; if (userIndex < 0) return false;
const otherUser = userIndex === 1 ? 2 : 1;
this[`user_${userIndex}`].userModel = user; this[`user_${userIndex}`].userModel = user;
this[`user_${userIndex}`].socket = socket; this[`user_${userIndex}`].socket = socket;
socket.on('wrtc:sdp:offer', this.onSdpOffer.bind(this)); socket.on('wrtc:sdp:offer', this.onSdpOffer.bind(this));
socket.on('wrtc:sdp:answer', this.onSdpAnswer.bind(this)); socket.on('wrtc:sdp:answer', this.onSdpAnswer.bind(this));
socket.on('wrtc:ice', this.onIceCandidate.bind(this)); socket.on('wrtc:ice', this.onIceCandidate.bind(this));
await this.updateState(); await this.updateState();
if (this.state === 'STARTED') if (this.state === 'STARTED') {
await this.sendStandby(socket, userIndex); await this.sendStandby(socket, userIndex);
else if (this.state === 'IN_PROGRESS') // Send event to other user about the call
const otherUserChannel =
UserChannel.getUserChannel(this[`user_${otherUser}`].id);
if (otherUserChannel)
otherUserChannel.emit('call:incoming', {
callId: this.callId,
child: (await Child.find(this.callModel.child_id)).toJSON()
});
} else if (this.state === 'IN_PROGRESS')
await this.sendStart(socket, userIndex); await this.sendStart(socket, userIndex);
return true; return true;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -80,6 +80,10 @@ export default {
this.ws.on(WebsocketService.Events.CONNECTION_OFFLINE, user => { this.ws.on(WebsocketService.Events.CONNECTION_OFFLINE, user => {
this.notify({ message: `${user.name} disconnected`, level: "warning" }); this.notify({ message: `${user.name} disconnected`, level: "warning" });
}); });
this.ws.on(
WebsocketService.Events.INCOMING_CALL,
this.onIncomingCall.bind(this)
);
this.loading = false; this.loading = false;
return true; return true;
}, },
@ -95,6 +99,13 @@ export default {
...mapGetters(["notifications"]) ...mapGetters(["notifications"])
}, },
methods: { methods: {
onIncomingCall(payload: { callId: number; child: any }) {
this.notify({
message: `New call from ${payload.child.name}`,
level: "success"
});
this.$router.push({ path: `/call/${payload.callId}` });
},
onNotificationClose(notification) { onNotificationClose(notification) {
this.dismissNotification(notification.id); this.dismissNotification(notification.id);
}, },

View file

@ -18,6 +18,7 @@ export default class WebSocketService {
this.userChannelService.on('new:connection', this.onUserNewConnection.bind(this)); this.userChannelService.on('new:connection', this.onUserNewConnection.bind(this));
this.userChannelService.on('connection:online', this.onUserConnectionOnline.bind(this)); this.userChannelService.on('connection:online', this.onUserConnectionOnline.bind(this));
this.userChannelService.on('connection:offline', this.onUserConnectionOffline.bind(this)); this.userChannelService.on('connection:offline', this.onUserConnectionOffline.bind(this));
this.userChannelService.on('call:incoming', this.onIncomingCall.bind(this));
} }
@ -32,7 +33,9 @@ export default class WebSocketService {
console.log(subscription); console.log(subscription);
return subscription; return subscription;
} }
private onIncomingCall(data) {
this.emitter.emit(EEvents.INCOMING_CALL, data);
}
private onUserNewConnection(data) { private onUserNewConnection(data) {
this.emitter.emit(EEvents.NEW_CONNECTION, data); this.emitter.emit(EEvents.NEW_CONNECTION, data);
} }