diff options
author | Mohammad Amoush <47069173+mamoush34@users.noreply.github.com> | 2020-01-23 11:07:50 -0500 |
---|---|---|
committer | Mohammad Amoush <47069173+mamoush34@users.noreply.github.com> | 2020-01-23 11:07:50 -0500 |
commit | 09da787bb56157ce6ec08f5e835249f8907ef13d (patch) | |
tree | 55c23acba236bdf545ddd68bb733413b504004ba /src/server/Websocket | |
parent | 8e8533a7bab97fe9be8c8fb862a7e809da5f137d (diff) |
Server side coded added back
Diffstat (limited to 'src/server/Websocket')
-rw-r--r-- | src/server/Websocket/Websocket.ts | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/src/server/Websocket/Websocket.ts b/src/server/Websocket/Websocket.ts index 6dda6956e..ff208d917 100644 --- a/src/server/Websocket/Websocket.ts +++ b/src/server/Websocket/Websocket.ts @@ -1,5 +1,5 @@ import { Utils } from "../../Utils"; -import { MessageStore, Transferable, Types, Diff, YoutubeQueryInput, YoutubeQueryTypes } from "../Message"; +import { MessageStore, Transferable, Types, Diff, YoutubeQueryInput, YoutubeQueryTypes, RoomMessage } from "../Message"; import { Client } from "../Client"; import { Socket } from "socket.io"; import { Database } from "../database"; @@ -17,6 +17,8 @@ export namespace WebSocket { const clients: { [key: string]: Client } = {}; export const socketMap = new Map<SocketIO.Socket, string>(); export let disconnect: Function; + let endpoint: io.Server; + export async function start(isRelease: boolean) { await preliminaryFunctions(); @@ -25,10 +27,9 @@ export namespace WebSocket { async function preliminaryFunctions() { } - function initialize(isRelease: boolean) { - const endpoint = io(); - endpoint.on("connection", function(socket: Socket) { + endpoint = io(); + endpoint.on("connection", function (socket: Socket) { _socket = socket; socket.use((_packet, next) => { @@ -56,6 +57,10 @@ export namespace WebSocket { Utils.AddServerHandler(socket, MessageStore.DeleteFields, ids => DeleteFields(socket, ids)); 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); + disconnect = () => { socket.broadcast.emit("connection_terminated", Date.now()); @@ -68,6 +73,49 @@ export namespace WebSocket { logPort("websocket", socketPort); } + + function HandleRoommateNotification(socket: Socket, message: RoomMessage) { + //socket.broadcast.emit('message', message); + console.log("The room that sent this: ", message.room, " and message is : ", message.message); + endpoint.sockets.in(message.room).emit('message', message); + + } + + function HandleCreateOrJoin(socket: io.Socket, room: string) { + console.log("Received request to create or join room " + room); + + + let clientsInRoom = endpoint.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); + endpoint.sockets.in(room).emit('join', room); + socket.join(room); + socket.emit('joined', room, socket.id); + endpoint.sockets.in(room).emit('ready'); + + } else { + socket.emit('full', room); + } + + + + + + } + + function HandleHangUp(socket: io.Socket, message: string) { + console.log("Receive bye from someone"); + } + function HandleYoutubeQuery([query, callback]: [YoutubeQueryInput, (result?: any[]) => void]) { const { ProjectCredentials } = GoogleCredentialsLoader; switch (query.type) { |