types.ts 1.27 KB
import { RoomData } from "../room/types";
import { UserData } from "../user/types";

export interface Message {
  readonly type: string;
}

export class LoginMessage implements Message {
  readonly type = MessageType.LOGIN;
  constructor(public username: string) {}
}

export class RoomListMessage implements Message {
  readonly type = MessageType.ROOM_LIST;
  constructor(public rooms: RoomData[]) {}
}

export class RoomJoinMessage implements Message {
  readonly type = MessageType.ROOM_JOIN;
  constructor(public uuid: string) {}
}

export class RoomLeaveMessage implements Message {
  readonly type = MessageType.ROOM_LEAVE;
  constructor() {}
}

export class RoomInfoMessage implements Message {
  readonly type = MessageType.ROOM_INFO;
  constructor(public userdata: UserData[]) {}
}

export class RoomUserUpdateMessage implements Message {
  readonly type = MessageType.ROOM_USER_UPDATE;
  constructor(
    public state: "added" | "updated" | "removed",
    public userdata: UserData
  ) {}
}

export class MessageType {
  static readonly LOGIN = "login";
  static readonly ROOM_LIST = "room_list";
  static readonly ROOM_JOIN = "room_join";
  static readonly ROOM_LEAVE = "room_leave";
  static readonly ROOM_INFO = "room_info";
  static readonly ROOM_USER_UPDATE = "room_user_update";
}