From c30913708fcba9d793767de91850701fcf37ebca Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Wed, 5 Jul 2023 19:07:30 +0000 Subject: [PATCH] added `rooms` core --- packages/app/src/cores/rooms/rooms.core.js | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 packages/app/src/cores/rooms/rooms.core.js diff --git a/packages/app/src/cores/rooms/rooms.core.js b/packages/app/src/cores/rooms/rooms.core.js new file mode 100644 index 00000000..d725f84a --- /dev/null +++ b/packages/app/src/cores/rooms/rooms.core.js @@ -0,0 +1,61 @@ +import Core from "evite/src/core" +import socketio from "socket.io-client" +import remotes from "comty.js/remotes" +import SessionModel from "comty.js/models/session" + +export default class RoomsController extends Core { + static refName = "rooms" + static namespace = "rooms" + + connectedRooms = [] + + connectToRoom = async (roomId) => { + if (!this.checkRoomExists(roomId)) { + await this.createRoom(roomId) + } + + const room = this.createRoomSocket(roomId) + + this.connectedRooms.push(room) + + return room + } + + disconnectFromRoom = async (roomId) => { + if (!this.checkRoomExists(roomId)) { + throw new Error(`Room ${roomId} does not exist`) + } + + const room = this.connectedRooms.find((room) => room.roomId === roomId) + + room.leave() + + this.connectedRooms = this.connectedRooms.filter((room) => room.roomId !== roomId) + + return room + } + + checkRoomExists = (roomId) => { + return this.connectedRooms.some((room) => room.roomId === roomId) + } + + createRoomSocket = async (roomId) => { + let roomInterface = { + roomId: roomId, + socket: socketio(remotes.chat.origin, { + transports: ["websocket"], + query: { + room: roomId, + }, + auth: SessionModel.token, + autoConnect: true, + }), + } + + room.leave = () => { + roomInterface.socket.disconnect() + } + + return roomInterface + } +} \ No newline at end of file