harsh-dev's picture
Add application file
a7476ec unverified
import RoomServices from './RoomServices.js'
import WebSocket from 'ws'
class MessageService {
username: string
message: string
room_id: string
action: string
rooms: RoomServices
con: WebSocket
constructor({
msg,
rooms,
con,
}: {
msg: string
rooms: RoomServices
con: WebSocket
}) {
const layers = JSON.parse(msg)
this.room_id = layers['room_id']
this.username = layers['username']
this.message = layers['message']
this.action = layers['action']
this.rooms = rooms
this.con = con
if (this.action.toLowerCase() === 'join') {
this.join()
} else if (this.action.toLowerCase() === 'leave') {
this.leave()
} else {
this.broadcast()
}
}
join() {
this.rooms.putRoom(this.room_id, this.username, this.con)
this.broadcast()
}
leave() {
this.rooms.leaveRoom(this.room_id, this.username)
this.broadcast()
}
broadcast() {
if (!this.rooms.hasRoom(this.room_id)) return
if (!this.rooms.getRoom(this.room_id)) return
let arr_rooms = this.rooms.getRoom(this.room_id)
if (!arr_rooms) return
for (const [key, value] of arr_rooms) {
if (this.action.toLowerCase() === 'join') {
value.send(
`${this.username} has joined the ${this.room_id} chat!`
)
} else if (this.action.toLowerCase() === 'leave') {
value.send(
`${this.username} has left the ${this.room_id} chat!`
)
} else {
value.send(`${this.username}: ${this.message}`)
}
}
}
broadcast_message(msg: string) {
if (!this.rooms.hasRoom(this.room_id)) return
if (!this.rooms.getRoom(this.room_id)) return
let arr_rooms = this.rooms.getRoom(this.room_id)
if (!arr_rooms) return
for (const [key, value] of arr_rooms) {
value.send(`${this.username}: ${msg}`)
}
}
}
export default MessageService