From c11ecfb40021d108ee1d035637fac08976948095 Mon Sep 17 00:00:00 2001 From: Mohammad Amoush Date: Tue, 15 Oct 2019 18:08:57 -0400 Subject: Room notifications added --- src/server/Message.ts | 1 + 1 file changed, 1 insertion(+) (limited to 'src/server/Message.ts') diff --git a/src/server/Message.ts b/src/server/Message.ts index aaee143e8..7b72b693e 100644 --- a/src/server/Message.ts +++ b/src/server/Message.ts @@ -58,4 +58,5 @@ export namespace MessageStore { export const YoutubeApiQuery = new Message("Youtube Api Query"); export const DeleteField = new Message("Delete field"); export const DeleteFields = new Message("Delete fields"); + export const NotifyRoommates = new Message("Notify Roommates"); } -- cgit v1.2.3-70-g09d2 From f5fc9d12c2843d6d9241045150983d30e4eaa4d1 Mon Sep 17 00:00:00 2001 From: Mohammad Amoush Date: Sun, 20 Oct 2019 17:00:06 -0400 Subject: Server side pretty much done for 2 person call --- src/Utils.ts | 8 +++++++- src/server/Message.ts | 10 +++++++++- src/server/index.ts | 46 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 5 deletions(-) (limited to 'src/server/Message.ts') diff --git a/src/Utils.ts b/src/Utils.ts index 4b892aa70..b481b3b47 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,6 +1,6 @@ import v4 = require('uuid/v4'); import v5 = require("uuid/v5"); -import { Socket } from 'socket.io'; +import { Socket, Room } from 'socket.io'; import { Message } from './server/Message'; import { RouteStore } from './server/RouteStore'; @@ -211,6 +211,12 @@ export namespace Utils { handler([arg, loggingCallback('S sending', fn, message.Name)]); }); } + export type RoomHandler = (socket: Socket, room: string) => any; + export type UsedSockets = Socket | SocketIOClient.Socket; + export type RoomMessage = "create or join" | "created" | "joined"; + export function AddRoomHandler(socket: Socket, message: RoomMessage, handler: RoomHandler) { + socket.on(message, room => handler(socket, room)); + } } export function OmitKeys(obj: any, keys: string[], addKeyFunc?: (dup: any) => void): { omit: any, extract: any } { diff --git a/src/server/Message.ts b/src/server/Message.ts index 7b72b693e..60ffa215f 100644 --- a/src/server/Message.ts +++ b/src/server/Message.ts @@ -42,6 +42,11 @@ export interface Diff extends Reference { readonly diff: any; } +export interface RoomMessage { + readonly message: string; + readonly room: string; +} + export namespace MessageStore { export const Foo = new Message("Foo"); export const Bar = new Message("Bar"); @@ -58,5 +63,8 @@ export namespace MessageStore { export const YoutubeApiQuery = new Message("Youtube Api Query"); export const DeleteField = new Message("Delete field"); export const DeleteFields = new Message("Delete fields"); - export const NotifyRoommates = new Message("Notify Roommates"); + export const NotifyRoommates = new Message("Notify Roommates"); + export const HangUpCall = new Message("bye"); + + } diff --git a/src/server/index.ts b/src/server/index.ts index 6b884d099..b37822eec 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -24,7 +24,7 @@ import { getForgot, getLogin, getLogout, getReset, getSignup, postForgot, postLo import { DashUserModel } from './authentication/models/user_model'; import { Client } from './Client'; import { Database } from './database'; -import { MessageStore, Transferable, Types, Diff, YoutubeQueryTypes as YoutubeQueryType, YoutubeQueryInput } from "./Message"; +import { MessageStore, Transferable, Types, Diff, YoutubeQueryTypes as YoutubeQueryType, YoutubeQueryInput, RoomMessage } from "./Message"; import { RouteStore } from './RouteStore'; import v4 = require('uuid/v4'); const app = express(); @@ -777,6 +777,10 @@ server.on("connection", function (socket: Socket) { Utils.AddServerHandlerCallback(socket, MessageStore.GetRefField, GetRefField); Utils.AddServerHandlerCallback(socket, MessageStore.GetRefFields, GetRefFields); Utils.AddServerHandler(socket, MessageStore.NotifyRoommates, message => HandleRoommateNotification(socket, message)); + Utils.AddServerHandler(socket, MessageStore.HangUpCall, message => HandleHangUp(socket, message)); + Utils.AddRoomHandler(socket, "create or join", HandleCreateOrJoin); + + }); @@ -840,9 +844,45 @@ function HandleYoutubeQuery([query, callback]: [YoutubeQueryInput, (result?: any } } -function HandleRoommateNotification(socket: Socket, message: String) { - socket.broadcast.emit('message', message); +function HandleRoommateNotification(socket: Socket, message: RoomMessage) { + //socket.broadcast.emit('message', message); + server.sockets.in(message.room).emit('message', message.message); + +} + +function HandleCreateOrJoin(socket: io.Socket, room: string) { + console.log("Received request to create or join room " + room); + + + let clientsInRoom = server.sockets.adapter.rooms[room]; + let numClients = clientsInRoom ? Object.keys(clientsInRoom.sockets).length : 0; + console.log('Room ' + room + ' now has ' + numClients + ' client(s)'); + + + if (numClients === 0) { + socket.join(room); + console.log('Client ID ' + socket.id + ' created room ' + room); + socket.emit('created', room, socket.id); + + } else if (numClients === 1) { + console.log('Client ID ' + socket.id + ' joined room ' + room); + server.sockets.in(room).emit('join', room); + socket.join(room); + socket.emit('joined', room, socket.id); + server.sockets.in(room).emit('ready'); + + } else { + socket.emit('full', room); + } + + + + + +} +function HandleHangUp(socket: io.Socket, message: string) { + console.log("Receive bye from someone"); } const credentialsPath = path.join(__dirname, "./credentials/google_docs_credentials.json"); -- cgit v1.2.3-70-g09d2 From 76bc6041ddbbda7ba4c1560199acc08324648e99 Mon Sep 17 00:00:00 2001 From: Mohammad Amoush Date: Wed, 6 Nov 2019 19:20:45 -0500 Subject: 2 person call done --- src/client/northstar/utils/Utils.ts | 6 ++++++ src/client/views/webcam/DashWebRTC.ts | 26 +++++++++++++++----------- src/client/views/webcam/DashWebRTCVideo.tsx | 24 ++++++++++++++++++++---- src/server/Message.ts | 2 +- 4 files changed, 42 insertions(+), 16 deletions(-) (limited to 'src/server/Message.ts') diff --git a/src/client/northstar/utils/Utils.ts b/src/client/northstar/utils/Utils.ts index d071dec62..09f83ce80 100644 --- a/src/client/northstar/utils/Utils.ts +++ b/src/client/northstar/utils/Utils.ts @@ -4,6 +4,12 @@ import { IBaseFilterProvider } from '../core/filter/IBaseFilterProvider'; import { AggregateFunction } from '../model/idea/idea'; export class Utils { + static Emit() { + throw new Error("Method not implemented."); + } + static EmitCallback() { + throw new Error("Method not implemented."); + } public static EqualityHelper(a: Object, b: Object): boolean { if (a === b) return true; diff --git a/src/client/views/webcam/DashWebRTC.ts b/src/client/views/webcam/DashWebRTC.ts index bd0bd7f9a..846de4115 100644 --- a/src/client/views/webcam/DashWebRTC.ts +++ b/src/client/views/webcam/DashWebRTC.ts @@ -1,4 +1,7 @@ import { DocServer } from '../../DocServer'; +import { Utils } from '../../../Utils'; +import { MessageStore } from '../../../server/Message'; + /** @@ -30,8 +33,7 @@ export namespace DashWebRTC { offerToReceiveVideo: true }; - export function init() { - let room = 'test'; + export function init(room: string) { if (room !== '') { DocServer._socket.emit('create or join', room); @@ -68,20 +70,21 @@ export namespace DashWebRTC { // This client receives a message DocServer._socket.on('message', function (message: any) { console.log('Client received message:', message); - if (message === 'got user media') { + if (message.message === 'got user media') { maybeStart(); - } else if (message.type === 'offer') { + } else if (message.message.type === 'offer') { + console.log("I have entered here bro!!!"); if (!isInitiator && !isStarted) { maybeStart(); } - pc.setRemoteDescription(new RTCSessionDescription(message)); + pc.setRemoteDescription(new RTCSessionDescription(message.message)); doAnswer(); - } else if (message.type === 'answer' && isStarted) { - pc.setRemoteDescription(new RTCSessionDescription(message)); - } else if (message.type === 'candidate' && isStarted) { + } else if (message.message.type === 'answer' && isStarted) { + pc.setRemoteDescription(new RTCSessionDescription(message.message)); + } else if (message.message.type === 'candidate' && isStarted) { var candidate = new RTCIceCandidate({ - sdpMLineIndex: message.label, - candidate: message.candidate + sdpMLineIndex: message.message.label, + candidate: message.message.candidate }); pc.addIceCandidate(candidate); } else if (message === 'bye' && isStarted) { @@ -120,7 +123,8 @@ export namespace DashWebRTC { function sendMessage(message: any) { console.log('Client sending message: ', message); - DocServer._socket.emit('message', message); + Utils.Emit(DocServer._socket, MessageStore.NotifyRoommates, { message: message, room: "" }); + //DocServer._socket.emit('message', message); } diff --git a/src/client/views/webcam/DashWebRTCVideo.tsx b/src/client/views/webcam/DashWebRTCVideo.tsx index 503b71569..0c4e594e4 100644 --- a/src/client/views/webcam/DashWebRTCVideo.tsx +++ b/src/client/views/webcam/DashWebRTCVideo.tsx @@ -9,6 +9,7 @@ import "../../views/nodes/WebBox.scss"; import "./DashWebRTC.scss"; import adapter from 'webrtc-adapter'; import { DashWebRTC } from "./DashWebRTC"; +import { DocServer } from "../../DocServer"; @@ -37,11 +38,12 @@ export class DashWebRTCVideo extends React.Component { + if (e.keyCode === 13) { + let submittedTitle = this.roomText!.value; + this.roomText!.value = ""; + this.roomText!.blur(); + DashWebRTC.init(submittedTitle); + } + } + + @@ -319,6 +334,7 @@ export class DashWebRTCVideo extends React.Component + this.roomText = e!} onKeyDown={this.onEnterKeyDown} />