{"version":3,"file":"Room.js","sourceRoot":"","sources":["../src/Room.ts"],"names":[],"mappings":"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","sourcesContent":["import { Connection } from './Connection';\nimport { Protocol } from './Protocol';\nimport { getSerializer, Serializer } from './serializer/Serializer';\n\n// The unused imports here are important for better `.d.ts` file generation\n// (Later merged with `dts-bundle-generator`)\nimport { createNanoEvents } from './core/nanoevents';\nimport { createSignal } from './core/signal';\n\nimport { decode, encode, Iterator } from '@colyseus/schema';\nimport { SchemaConstructor, SchemaSerializer } from './serializer/SchemaSerializer';\nimport { CloseCode } from './errors/Errors';\n\nimport { Packr, unpack } from '@colyseus/msgpackr';\n\nexport interface RoomAvailable<Metadata = any> {\n    name: string;\n    roomId: string;\n    clients: number;\n    maxClients: number;\n    metadata?: Metadata;\n}\n\nexport class Room<State= any> {\n    public roomId: string;\n    public sessionId: string;\n    public reconnectionToken: string;\n\n    public name: string;\n    public connection: Connection;\n\n    // Public signals\n    public onStateChange = createSignal<(state: State) => void>();\n    public onError = createSignal<(code: number, message?: string) => void>();\n    public onLeave = createSignal<(code: number, reason?: string) => void>();\n    protected onJoin = createSignal();\n\n    public serializerId: string;\n    public serializer: Serializer<State>;\n\n    protected hasJoined: boolean = false;\n\n    // TODO: remove me on 1.0.0\n    protected rootSchema: SchemaConstructor<State>;\n\n    protected onMessageHandlers = createNanoEvents();\n\n    protected packr: Packr;\n\n    constructor(name: string, rootSchema?: SchemaConstructor<State>) {\n        this.roomId = null;\n        this.name = name;\n\n        this.packr = new Packr();\n\n        // msgpackr workaround: force buffer to be created.\n        this.packr.encode(undefined);\n\n        if (rootSchema) {\n            this.serializer = new (getSerializer(\"schema\"));\n            this.rootSchema = rootSchema;\n            (this.serializer as SchemaSerializer).state = new rootSchema();\n        }\n\n        this.onError((code, message) => console.warn?.(`colyseus.js - onError => (${code}) ${message}`));\n        this.onLeave(() => this.removeAllListeners());\n    }\n\n    public connect(\n        endpoint: string,\n        devModeCloseCallback?: () => void,\n        room: Room = this, // when reconnecting on devMode, re-use previous room intance for handling events.\n        options?: any,\n        headers?: any,\n    ) {\n        const connection = new Connection(options.protocol);\n        room.connection = connection;\n\n        connection.events.onmessage = Room.prototype.onMessageCallback.bind(room);\n        connection.events.onclose = function (e: CloseEvent) {\n            if (!room.hasJoined) {\n                console.warn?.(`Room connection was closed unexpectedly (${e.code}): ${e.reason}`);\n                room.onError.invoke(e.code, e.reason);\n                return;\n            }\n            if (e.code === CloseCode.DEVMODE_RESTART && devModeCloseCallback) {\n                devModeCloseCallback();\n            } else {\n                room.onLeave.invoke(e.code, e.reason);\n                room.destroy();\n            }\n        };\n        connection.events.onerror = function (e: CloseEvent) {\n            console.warn?.(`Room, onError (${e.code}): ${e.reason}`);\n            room.onError.invoke(e.code, e.reason);\n        };\n\n        // FIXME: refactor this.\n        if (options.protocol === \"h3\") {\n            const url = new URL(endpoint);\n            connection.connect(url.origin, options);\n\n        } else {\n            connection.connect(endpoint, headers);\n        }\n\n    }\n\n    public leave(consented: boolean = true): Promise<number> {\n        return new Promise((resolve) => {\n            this.onLeave((code) => resolve(code));\n\n            if (this.connection) {\n                if (consented) {\n                    this.packr.buffer[0] = Protocol.LEAVE_ROOM;\n                    this.connection.send(this.packr.buffer.subarray(0, 1));\n\n                } else {\n                    this.connection.close();\n                }\n\n            } else {\n                this.onLeave.invoke(CloseCode.CONSENTED);\n            }\n        });\n    }\n\n    public onMessage<T = any>(type: \"*\", callback: (type: string | number, message: T) => void)\n    public onMessage<T = any>(type: string | number, callback: (message: T) => void)\n    public onMessage(type: '*' | string | number, callback: (...args: any[]) => void) {\n        return this.onMessageHandlers.on(this.getMessageHandlerKey(type), callback);\n    }\n\n    public send<T = any>(type: string | number, message?: T): void {\n        const it: Iterator = { offset: 1 };\n        this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n        if (typeof(type) === \"string\") {\n            encode.string(this.packr.buffer, type, it);\n\n        } else {\n            encode.number(this.packr.buffer, type, it);\n        }\n\n        // force packr to use beginning of the buffer\n        this.packr.position = 0;\n\n        const data = (message !== undefined)\n            ? this.packr.pack(message, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n            : this.packr.buffer.subarray(0, it.offset);\n\n        this.connection.send(data);\n    }\n\n    public sendUnreliable<T = any>(type: string | number, message?: T): void {\n        const it: Iterator = { offset: 1 };\n        this.packr.buffer[0] = Protocol.ROOM_DATA;\n\n        if (typeof(type) === \"string\") {\n            encode.string(this.packr.buffer, type, it);\n\n        } else {\n            encode.number(this.packr.buffer, type, it);\n        }\n\n        // force packr to use beginning of the buffer\n        this.packr.position = 0;\n\n        const data = (message !== undefined)\n            ? this.packr.pack(message, 2048 + it.offset) // 2048 = RESERVE_START_SPACE\n            : this.packr.buffer.subarray(0, it.offset);\n\n        this.connection.sendUnreliable(data);\n    }\n\n    public sendBytes(type: string | number, bytes: Uint8Array) {\n        const it: Iterator = { offset: 1 };\n        this.packr.buffer[0] = Protocol.ROOM_DATA_BYTES;\n\n        if (typeof(type) === \"string\") {\n            encode.string(this.packr.buffer, type, it);\n\n        } else {\n            encode.number(this.packr.buffer, type, it);\n        }\n\n        // check if buffer needs to be resized\n        // TODO: can we avoid this?\n        if (bytes.byteLength + it.offset > this.packr.buffer.byteLength) {\n            const newBuffer = new Uint8Array(it.offset + bytes.byteLength);\n            newBuffer.set(this.packr.buffer);\n            this.packr.useBuffer(newBuffer);\n        }\n\n        this.packr.buffer.set(bytes, it.offset);\n        this.connection.send(this.packr.buffer.subarray(0, it.offset + bytes.byteLength));\n    }\n\n    public get state (): State {\n        return this.serializer.getState();\n    }\n\n    public removeAllListeners() {\n        this.onJoin.clear();\n        this.onStateChange.clear();\n        this.onError.clear();\n        this.onLeave.clear();\n        this.onMessageHandlers.events = {};\n\n        if (this.serializer instanceof SchemaSerializer) {\n            // Remove callback references\n            this.serializer.decoder.root.callbacks = {};\n        }\n    }\n\n    protected onMessageCallback(event: MessageEvent) {\n        const buffer = new Uint8Array(event.data);\n\n        const it: Iterator = { offset: 1 };\n        const code = buffer[0];\n\n        if (code === Protocol.JOIN_ROOM) {\n            const reconnectionToken = decode.utf8Read(buffer, it, buffer[it.offset++]);\n            this.serializerId = decode.utf8Read(buffer, it, buffer[it.offset++]);\n\n            // Instantiate serializer if not locally available.\n            if (!this.serializer) {\n                const serializer = getSerializer(this.serializerId);\n                this.serializer = new serializer();\n            }\n\n            if (buffer.byteLength > it.offset && this.serializer.handshake) {\n                this.serializer.handshake(buffer, it);\n            }\n\n            this.reconnectionToken = `${this.roomId}:${reconnectionToken}`;\n\n            this.hasJoined = true;\n            this.onJoin.invoke();\n\n            // acknowledge successfull JOIN_ROOM\n            this.packr.buffer[0] = Protocol.JOIN_ROOM;\n            this.connection.send(this.packr.buffer.subarray(0, 1));\n\n        } else if (code === Protocol.ERROR) {\n            const code = decode.number(buffer, it);\n            const message = decode.string(buffer, it);\n\n            this.onError.invoke(code, message);\n\n        } else if (code === Protocol.LEAVE_ROOM) {\n            this.leave();\n\n        } else if (code === Protocol.ROOM_STATE) {\n            this.serializer.setState(buffer, it);\n            this.onStateChange.invoke(this.serializer.getState());\n\n        } else if (code === Protocol.ROOM_STATE_PATCH) {\n            this.serializer.patch(buffer, it);\n            this.onStateChange.invoke(this.serializer.getState());\n\n        } else if (code === Protocol.ROOM_DATA) {\n            const type = (decode.stringCheck(buffer, it))\n                ? decode.string(buffer, it)\n                : decode.number(buffer, it);\n\n            const message = (buffer.byteLength > it.offset)\n                ? unpack(buffer, { start: it.offset })\n                : undefined;\n\n            this.dispatchMessage(type, message);\n\n        } else if (code === Protocol.ROOM_DATA_BYTES) {\n            const type = (decode.stringCheck(buffer, it))\n                ? decode.string(buffer, it)\n                : decode.number(buffer, it);\n\n            this.dispatchMessage(type, buffer.subarray(it.offset));\n        }\n    }\n\n    private dispatchMessage(type: string | number, message: any) {\n        const messageType = this.getMessageHandlerKey(type);\n\n        if (this.onMessageHandlers.events[messageType]) {\n            this.onMessageHandlers.emit(messageType, message);\n\n        } else if (this.onMessageHandlers.events['*']) {\n            this.onMessageHandlers.emit('*', type, message);\n\n        } else {\n            console.warn?.(`colyseus.js: onMessage() not registered for type '${type}'.`);\n        }\n    }\n\n    private destroy () {\n        if (this.serializer) {\n            this.serializer.teardown();\n        }\n    }\n\n    private getMessageHandlerKey(type: string | number): string {\n        switch (typeof(type)) {\n            // string\n            case \"string\": return type;\n\n            // number\n            case \"number\": return `i${type}`;\n\n            default: throw new Error(\"invalid message type.\");\n        }\n    }\n\n}\n"]}