import {Song, PlayingSong, QueuedSong} from "./dataTypes"; export type StuenMessages = ListenerLeft | ListenerList | ListenerJoined | SendChatMessage | SearchSong | SearchSongResult | Join | QueueSong | CurrentQueue | CurrentSong | UnqueueSong | ReorderSong | SkipSong; export abstract class StuenMessage { constructor(public type: string) { } } export class Join extends StuenMessage { constructor(public name: string) { super('Join'); } } export class ListenerJoined extends StuenMessage { constructor(public name: string) { super('ListenerJoined'); } } export class ListenerLeft extends StuenMessage { constructor(public name: string) { super('ListenerLeft'); } } export class ListenerList extends StuenMessage { constructor(public names: string[]) { super('ListenerList'); } } export class SendChatMessage extends StuenMessage { constructor(public message: string) { super('SendChatMessage'); } } export class ChatMessage extends StuenMessage { constructor(public name: string, public message: string) { super('ChatMessage'); } } export class SearchSong extends StuenMessage { constructor(public query: string) { super('SearchSong'); } } export class SearchSongResult extends StuenMessage { constructor(public result: Song[]) { super('SearchSongResult'); } } export class QueueSong extends StuenMessage { constructor(public song: Song) { super('QueueSong'); } } export class CurrentQueue extends StuenMessage { constructor(public songs: QueuedSong[]) { super('CurrentQueue'); } } export class CurrentSong extends StuenMessage { constructor(public song: PlayingSong | null) { super('CurrentSong'); } } export class UnqueueSong extends StuenMessage { constructor(public position: number | null, public all: boolean | undefined = false) { super('UnqueueSong'); } } export class ReorderSong extends StuenMessage { constructor(public positionToMove: number, public placePosition: number) { super('ReorderSong'); } } export class SkipSong extends StuenMessage { constructor() { super('SkipSong'); } }