tiaoom 0.0.13 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/client.cjs +1 -1
- package/src/client.cjs.map +1 -1
- package/src/client.d.cts +66 -86
- package/src/client.d.mts +66 -86
- package/src/client.iife.js +1 -1
- package/src/client.iife.js.map +1 -1
- package/src/client.mjs +1 -1
- package/src/client.mjs.map +1 -1
- package/src/index.cjs +143 -76
- package/src/index.cjs.map +1 -1
- package/src/index.d.cts +36 -33
- package/src/index.d.mts +36 -33
- package/src/index.mjs +143 -76
- package/src/index.mjs.map +1 -1
package/src/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","names":[],"sources":["../lib/models/message.ts","../lib/client.ts"],"sourcesContent":["import EventEmitter from \"events\";\nimport { IPlayer, IPlayerOptions } from \"./player\";\nimport { IRoom, IRoomPlayer, IRoomOptions } from \"./room\";\nimport { IMessageEmitterEvents, IMessageEvents } from \"@lib/events/message\";\n\n/**\n * 消息包类型枚举\n * player: 'command', 'message', 'join', 'leave', 'status'\n */\nexport enum MessageTypes {\n /**\n * 房间列表\n */\n RoomList = \"room.list\",\n /**\n * 房间创建\n */\n RoomCreate = \"room.create\",\n /**\n * 房间更新\n */\n RoomUpdate = \"room.update\",\n /**\n * 房间准备\n */\n RoomReady = \"room.ready\",\n /**\n * 房间开始\n */\n RoomStart = \"room.start\",\n /**\n * 房间结束\n */\n RoomEnd = \"room.end\",\n /**\n * 房间关闭\n */\n RoomClose = \"room.close\",\n /**\n * 房间全部玩家已准备\n */\n RoomAllReady = \"room.all-ready\",\n /**\n * 房间命令\n */\n RoomCommand = \"room.command\",\n /**\n * 房间消息\n */\n RoomMessage = \"room.message\",\n /**\n * 玩家加入房间\n */\n RoomJoin = \"room.join\",\n /**\n * 玩家离开房间\n */\n RoomLeave = \"room.leave\",\n /**\n * 房间踢出玩家\n */\n RoomKick = \"room.kick\",\n /**\n * 房间转移\n */\n RoomTransfer = \"room.transfer\",\n /**\n * 房间玩家准备\n */\n RoomPlayerReady = \"room.player-ready\",\n /**\n * 房间玩家取消准备\n */\n RoomPlayerUnready = \"room.player-unready\",\n /**\n * 玩家列表\n */\n PlayerList = \"player.list\",\n /**\n * 玩家登录\n */\n PlayerLogin = \"player.login\",\n /**\n * 玩家登出\n */\n PlayerLogout = \"player.logout\",\n /**\n * 玩家消息\n */\n PlayerMessage = \"player.message\",\n /**\n * 玩家命令\n */\n PlayerCommand = \"player.command\",\n /**\n * 玩家准备\n */\n PlayerReady = \"player.ready\",\n /**\n * 玩家取消准备\n */\n PlayerUnready = \"player.unready\",\n /**\n * 全局命令\n */\n GlobalCommand = \"global.command\",\n /**\n * 全局消息\n */\n GlobalMessage = \"global.message\",\n /**\n * 全局错误\n */\n GlobalError = \"global.error\",\n}\n\n/**\n * 消息包接口\n */\nexport interface IMessagePackage {\n /**\n * 消息类型\n */\n type: MessageTypes;\n /**\n * 消息数据\n */\n data?: IPlayerOptions | IRoomOptions | IPlayer | IRoom | IRoomPlayer | any\n /**\n * 发送者信息\n */\n sender?: IPlayer | IRoomPlayer | IRoom;\n}\n\n/**\n * 消息数据接口,包含发送者信息\n */\nexport interface IMessageData extends IMessagePackage {\n sender: IPlayer | IRoomPlayer | IRoom;\n}\n\n/**\n * 消息通信接口\n */\nexport interface IMessage extends EventEmitter<IMessageEmitterEvents> {\n /**\n * 监听消息事件\n * @param event 事件名,具体见 MessageEvents\n * @param listener 监听器\n */\n on<K extends keyof IMessageEvents>(event: K, listener: IMessageEvents[K]): this;\n /**\n * 触发消息事件\n * @param event 事件名,具体见 MessageEvents\n * @param args 参数\n */\n emit<K extends keyof IMessageEvents>(event: K, ...args: Parameters<IMessageEvents[K]>): boolean;\n /**\n * 关闭连接\n */\n close(): void;\n /**\n * 发送消息包\n * @param message 消息包\n */\n send(message: IMessagePackage): void;\n}\n","import { MessageTypes } from \"./models/message\";\nimport type { IRoomOptions } from \"./models/room\";\n\nexport type TiaoomEvents = {\n /**\n * 连接准备就绪事件\n */\n \"sys.ready\": () => void;\n /**\n * 连接错误事件\n * @param error 错误信息\n */\n \"sys.error\": (error: any) => void;\n /**\n * 连接关闭事件\n */\n \"sys.close\": () => void;\n /**\n * 全局错误事件\n * @param error 错误信息\n */\n \"global.error\": (error: Error) => void;\n /**\n * 全局命令事件\n * @param data 命令内容\n */\n \"global.command\": (data: any & { sender: Player }) => void;\n /**\n * 玩家列表更新事件\n * @param players 玩家列表\n */\n \"player.list\": (players: Player[]) => void;\n /**\n * 玩家登录事件\n * @param player 玩家信息\n */\n \"player.login\": (player: Player) => void;\n /**\n * 玩家登出事件\n * @param player 玩家信息\n */\n \"player.logout\": (player: Player) => void;\n /**\n * 玩家状态更新事件\n * @param player 玩家信息\n * @param status 状态\n * @param roomId 房间ID(可选)\n */\n \"player.status\": (player: Player, status: string, roomId?: string) => void;\n /**\n * 玩家命令事件\n * @param command 命令内容\n */\n \"player.command\": (command: any & { sender: Player }) => void;\n /**\n * 玩家消息事件\n * @param message 消息内容\n */\n \"player.message\": (message: any & { sender: Player }) => void;\n /**\n * 房间列表更新事件\n * @param rooms 房间列表\n */\n \"room.list\": (rooms: Room[]) => void;\n /**\n * 房间创建事件\n * @param room 房间信息\n */\n \"room.create\": (room: Room) => void;\n /**\n * 房间更新事件\n * @param room 房间信息\n */\n \"room.update\": (room: Room) => void;\n /**\n * 房间关闭事件\n * @param room 房间信息\n */\n \"room.close\": (room: Room) => void;\n /**\n * 玩家加入房间事件\n * @param room 房间信息\n * @param player 玩家信息\n */\n \"room.join\": (room: Room, player: Player) => void;\n /**\n * 玩家离开房间事件\n * @param room 房间信息\n * @param player 玩家信息\n */\n \"room.leave\": (room: Room, player: Player) => void;\n /**\n * 房间开始游戏事件\n * @param room 房间信息\n */\n \"room.start\": (room: Room) => void;\n /**\n * 房间结束游戏事件\n * @param room 房间信息\n */\n \"room.end\": (room: Room) => void;\n /**\n * 房间玩家全部准备事件\n * @param room 房间信息\n */\n \"room.all-ready\": (room: Room) => void;\n /**\n * 房间命令事件\n * @param command 命令内容\n */\n \"room.command\": (command: any & { sender: Player }) => void;\n /**\n * 房间消息事件\n * @param message 消息内容\n */\n \"room.message\": (message: any & { sender: Player }) => void;\n /**\n * 房间玩家准备事件\n * @param player 玩家信息\n * @param roomId 房间ID(可选)\n */\n \"room.player-ready\": (player: Player, roomId?: string) => void;\n /**\n * 房间玩家取消准备事件\n * @param player 玩家信息\n * @param roomId 房间ID(可选)\n */\n \"room.player-unready\": (player: Player, roomId?: string) => void;\n /**\n * 玩家列表更新事件(内部)\n * @param players 玩家列表\n */\n \"onPlayerList\": (players: Player[]) => void;\n /**\n * 房间列表更新事件(内部)\n * @param rooms 房间列表\n */\n \"onRoomList\": (rooms: Room[]) => void;\n /**\n * 房间开始游戏事件(内部)\n * @param room 房间信息\n */\n \"onRoomStart\": (room: Room) => void;\n /**\n * 房间结束游戏事件(内部)\n * @param room 房间信息\n */\n \"onRoomEnd\": (room: Room) => void;\n /**\n * 房间玩家全部准备事件(内部)\n * @param room 房间信息\n */\n \"onRoomAllReady\": (room: Room) => void;\n};\n\nexport class Player {\n id: string;\n name: string;\n attributes: Record<string, any>;\n status: string;\n constructor(player: Partial<Player>) {\n this.id = player.id || Date.now().toString();\n this.name = player.name || '玩家' + this.id;\n this.attributes = player.attributes || {};\n this.status = player.status || 'online';\n }\n}\n\nexport class RoomPlayer extends Player {\n role: string;\n isReady: boolean;\n isCreator: boolean;\n constructor(player: RoomPlayer) {\n super(player);\n this.role = player.role;\n this.isReady = player.isReady;\n this.isCreator = player.isCreator;\n }\n}\n\nexport class Room {\n id: string;\n name: string;\n players: RoomPlayer[];\n size: number;\n minSize: number;\n status: string;\n attrs: Record<string, any>;\n constructor(room: Room) {\n this.id = room.id;\n this.name = room.name;\n this.players = room.players.map(player => new RoomPlayer(player));\n this.size = room.size;\n this.minSize = room.minSize;\n this.status = room.status;\n this.attrs = room.attrs;\n }\n}\n\n/**\n * Tiaoom 客户端\n * @description 用于连接 Tiaoom 服务器并进行游戏交互,如创建房间、加入房间、发送命令等。\n * 需继承后实现具体的连接和消息发送逻辑。\n */\nexport class Tiaoom {\n listeners: Record<string, Function[]>;\n rooms: Room[];\n players: Player[];\n currentPlayer: Player | null;\n constructor() {\n this.listeners = {};\n this.rooms = [];\n this.players = [];\n this.currentPlayer = null;\n }\n\n /**\n * 启动游戏\n */\n run() {\n this.connect();\n this.onReady(() => {\n this.send({ type: MessageTypes.RoomList });\n this.send({ type: MessageTypes.PlayerList });\n });\n\n this.on(\"player.list\", (players) => {\n this.players = players.map(player => new Player(player));\n this.emit('onPlayerList', [...this.players]);\n });\n this.on(\"player.login\", (player) => {\n this.players.push(new Player(player));\n this.emit('onPlayerList', [...this.players]);\n });\n this.on(\"player.logout\", (player) => {\n this.players = this.players.filter(p => p.id !== player.id);\n this.emit('onPlayerList', [...this.players]);\n });\n\n\n this.on(\"room.list\", (rooms) => {\n this.rooms = rooms.map(room => new Room(room));\n this.emit('onRoomList', [...this.rooms]);\n });\n this.on(\"room.create\", (room) => {\n this.rooms.push(new Room(room));\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.update\", (room) => {\n const existingRoom = this.rooms.find(r => r.id === room.id);\n if (!existingRoom) {\n this.rooms.push(new Room(room));\n } else {\n Object.assign(existingRoom, room);\n }\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.close\", (room) => {\n this.rooms = this.rooms.filter(r => r.id !== room.id);\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.update\", (room) => {\n const updatedRoom = this.rooms.find(r => r.id === room.id);\n if (updatedRoom) {\n Object.assign(updatedRoom, room);\n this.emit('onRoomList', this.rooms);\n }\n });\n\n return this;\n }\n\n /**\n * 连接服务器实现\n */\n connect() {\n throw new Error('Must be implement connect method');\n }\n\n /**\n * 发送消息实现\n */\n send(_: { type: MessageTypes, data?: any }) {\n throw new Error('Must be implement send method');\n }\n\n /**\n * 登录\n * @param {Player} player 玩家信息\n */\n login(player: Player) {\n this.currentPlayer = new Player(player);\n this.send({ type: MessageTypes.PlayerLogin, data: player });\n return this;\n }\n\n /**\n * 创建房间\n * @param {string} name 房间名称\n * @param {number} size 房间人数上限\n * @param {number} minSize 房间人数下限\n * @param {object} attrs 房间属性\n */\n createRoom({ name, size, minSize, attrs }: Omit<IRoomOptions, 'id'>) {\n return new Promise<void>((resolve) => {\n this.send({ type: MessageTypes.RoomCreate, data: { name, size, minSize, attrs } });\n this.on(\"room.create\", (room) => {\n resolve();\n });\n });\n }\n\n /**\n * 加入房间\n * @param {string} roomId 房间ID\n */\n joinRoom(roomId: string) {\n this.send({ type: MessageTypes.RoomJoin, data: { roomId } });\n return this;\n }\n\n /**\n * 离开房间\n * @param {string} roomId 房间ID\n */\n leaveRoom(roomId: string) {\n this.send({ type: MessageTypes.RoomLeave, data: { roomId } });\n return this;\n }\n\n /**\n * 踢出玩家\n * @param {string} roomId 房间ID\n * @param {string} playerId 玩家ID\n */\n kickPlayer(roomId: string, playerId: string) {\n this.send({ type: MessageTypes.RoomKick, data: { roomId, playerId } });\n return this;\n }\n\n /**\n * 转让房主\n * @param {string} roomId 房间ID\n * @param {string} playerId 目标玩家ID\n */\n transferRoom(roomId: string, playerId: string) {\n this.send({ type: MessageTypes.RoomTransfer, data: { roomId, playerId } });\n return this;\n }\n\n /**\n * 开始游戏\n * @param {string} id 房间ID\n */\n startGame(id: string) {\n this.send({ type: MessageTypes.RoomStart, data: { id } });\n return this;\n }\n\n /**\n * 准备/取消准备\n * @param {string} roomId 房间ID\n * @param {boolean} isReady 是否准备\n */\n ready(roomId: string, isReady=true) {\n this.send({ type: isReady ? MessageTypes.PlayerReady : MessageTypes.PlayerUnready, data: { roomId } });\n return this;\n }\n\n /**\n * 发送房间指令\n * @param {string} roomId 房间ID\n * @param {any} command 指令内容\n */\n command(command: any): this;\n command(roomId: string, command: any): this;\n command(roomId: string | any, command?: any) {\n if (typeof roomId != 'string') {\n command = roomId;\n this.send({ type: MessageTypes.GlobalCommand, data: command });\n } else {\n this.send({ type: MessageTypes.PlayerCommand, data: { id: roomId, ...command } });\n }\n return this;\n }\n\n /**\n * 连接准备监听\n * @param {function} cb 监听函数\n */\n onReady(cb: (...args: any[]) => void) {\n return this.on(\"sys.ready\", cb);\n }\n\n /**\n * 全局错误监听\n * @param {function} cb 监听函数\n */\n onError(cb: (...args: any[]) => void) {\n this.on(\"global.error\", cb);\n return this;\n }\n\n /**\n * 玩家列表变更监听\n * @param {function} cb 监听函数\n */\n onPlayerList(cb: (...args: any[]) => void) {\n this.on(\"onPlayerList\", cb);\n return this;\n }\n\n /**\n * 房间列表变更监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomList(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"onRoomList\", cb);\n else this.off(\"onRoomList\", cb);\n return this;\n }\n\n /**\n * 玩家加入监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerJoin(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.join\", cb);\n else this.off(\"room.join\", cb);\n return this;\n }\n\n /**\n * 玩家离开监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerLeave(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.leave\", cb);\n else this.off(\"room.leave\", cb);\n return this;\n }\n\n /**\n * 玩家准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerReady(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.player-ready\", cb);\n else this.off(\"room.player-ready\", cb);\n return this;\n }\n\n /**\n * 玩家取消准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerUnready(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.player-unready\", cb);\n else this.off(\"room.player-unready\", cb);\n return this;\n }\n\n /**\n * 玩家状态更新监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerStatus(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"player.status\", cb);\n else this.off(\"player.status\", cb);\n return this;\n }\n\n /**\n * 房间开始游戏监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomStart(cb: (...args: any[]) => void, on=true) {\n if (!this.listeners[\"room.start\"]) {\n this.on(\"room.start\", (room) => this.emit(\"onRoomStart\", new Room(room)));\n }\n if (on) this.on(\"onRoomStart\", cb);\n else this.off(\"onRoomStart\", cb);\n return this;\n }\n\n /**\n * 房间结束游戏监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns\n */\n onRoomEnd(cb: (...args: any[]) => void, on=true) {\n if (!this.listeners[\"room.end\"]) {\n this.on(\"room.end\", (room) => this.emit(\"onRoomEnd\", new Room(room)));\n }\n if (on) this.on(\"onRoomEnd\", cb);\n else this.off(\"onRoomEnd\", cb);\n return this;\n }\n\n /**\n * 房间全部准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomAllReady(cb: (...args: any[]) => void, on=true) {\n if (!this.listeners[\"room.all-ready\"]) {\n this.on(\"room.all-ready\", (room) => this.emit(\"onRoomAllReady\", new Room(room)));\n }\n if (on) this.on(\"onRoomAllReady\", cb);\n else this.off(\"onRoomAllReady\", cb);\n return this;\n }\n\n /**\n * 房间消息监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomMessage(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.message\", cb);\n else this.off(\"room.message\", cb);\n return this;\n }\n\n /**\n * 玩家消息监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerMessage(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"player.message\", cb);\n else this.off(\"player.message\", cb);\n return this;\n }\n\n /**\n * 房间指令监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomCommand(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"room.command\", cb);\n else this.off(\"room.command\", cb);\n return this;\n }\n\n /**\n * 玩家指令监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerCommand(cb: (...args: any[]) => void, on=true) {\n if (on) this.on(\"player.command\", cb);\n else this.off(\"player.command\", cb);\n return this;\n }\n\n /**\n * 事件监听\n * @param {string} event 事件名称\n * @param {function} listener 监听函数\n * @returns \n */\n on<K extends keyof TiaoomEvents>(event: K, listener: TiaoomEvents[K]): this {\n this.listeners[event] = this.listeners[event] || [];\n this.listeners[event].push(listener);\n return this;\n }\n\n /**\n * 事件取消监听\n * @param {string} event 事件名称\n * @param {function} listener 监听函数\n * @returns \n */\n off<K extends keyof TiaoomEvents>(event: K, listener: TiaoomEvents[K]): this {\n const listeners = this.listeners[event] || [];\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n /**\n * 事件触发\n * @param {string} event 事件名称\n * @param {...any} args 参数\n * @returns \n */\n emit<K extends keyof TiaoomEvents>(event: K, ...args: Parameters<TiaoomEvents[K]>): this {\n const listeners = this.listeners[event] || [];\n listeners.forEach(listener => listener(...args));\n return this;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.mjs","names":[],"sources":["../lib/client.ts"],"sourcesContent":["import type { IRoomOptions } from \"./models/room\";\n\nexport { IRoomOptions };\n\n/**\n * 客户端发送消息包类型枚举\n * player: 'command', 'message', 'join', 'leave', 'status'\n */\nexport enum MessageTypes {\n /**\n * 房间列表\n */\n RoomList = \"room.list\",\n /**\n * 玩家列表\n */\n PlayerList = \"player.list\",\n /**\n * 房间创建\n */\n RoomCreate = \"room.create\",\n /**\n * 玩家加入房间\n */\n PlayerJoin = \"player.join\",\n /**\n * 玩家离开房间\n */\n PlayerLeave = \"player.leave\",\n /**\n * 房间获取\n */\n RoomGet = \"room.get\",\n /**\n * 房间开始\n */\n RoomStart = \"room.start\",\n /**\n * 房间踢出玩家\n */\n RoomKick = \"room.kick\",\n /**\n * 房间转移\n */\n RoomTransfer = \"room.transfer\",\n /**\n * 房间关闭\n */\n RoomClose = \"room.close\", \n /**\n * 玩家登录\n */\n PlayerLogin = \"player.login\",\n /**\n * 玩家登出\n */\n PlayerLogout = \"player.logout\",\n /**\n * 玩家准备\n */\n PlayerReady = \"player.ready\",\n /**\n * 玩家取消准备\n */\n PlayerUnready = \"player.unready\",\n /**\n * 房间内玩家发送的指令\n */\n RoomPlayerCommand = \"room.player-command\",\n /**\n * 全局命令\n */\n GlobalCommand = \"global.command\",\n}\n\nexport type TiaoomEvents = {\n /**\n * 连接准备就绪事件\n */\n \"sys.ready\": () => void;\n /**\n * 连接错误事件\n * @param error 错误信息\n */\n \"sys.error\": (error: any) => void;\n /**\n * 连接关闭事件\n */\n \"sys.close\": () => void;\n /**\n * 全局错误事件\n * @param error 错误信息\n */\n \"global.error\": (error: Error) => void;\n /**\n * 全局命令事件\n * @param data 命令内容\n */\n \"global.command\": (data: any & { sender: Player }) => void;\n /**\n * 全局消息事件\n * @param message 消息内容\n */\n \"global.message\": (message: string, sender?: Player) => void;\n /**\n * 玩家列表更新事件\n * @param players 玩家列表\n */\n \"player.list\": (players: Player[]) => void;\n /**\n * 玩家登录事件\n * @param player 玩家信息\n */\n \"player.login\": (player: Player) => void;\n /**\n * 玩家登出事件\n * @param player 玩家信息\n */\n \"player.logout\": (player: Player) => void;\n /**\n * 玩家状态更新事件\n * @param player 玩家信息\n * @param status 状态\n * @param roomId 房间ID(可选)\n */\n \"player.status\": (player: Player, status: string, roomId?: string) => void;\n /**\n * 玩家命令事件\n * @param command 命令内容\n */\n \"player.command\": (command: any & { sender: Player }) => void;\n /**\n * 玩家消息事件\n * @param message 消息内容\n */\n \"player.message\": (message: { content: string, sender?: Player }) => void;\n /**\n * 房间列表更新事件\n * @param rooms 房间列表\n */\n \"room.list\": (rooms: Room[]) => void;\n /**\n * 房间创建事件\n * @param room 房间信息\n */\n \"room.create\": (room: Room) => void;\n /**\n * 房间更新事件\n * @param room 房间信息\n */\n \"room.update\": (room: Room) => void;\n /**\n * 房间关闭事件\n * @param room 房间信息\n */\n \"room.close\": (room: Room) => void;\n /**\n * 玩家加入房间事件\n * @param room 房间信息\n * @param player 玩家信息\n */\n \"room.join\": (room: Room, player: Player) => void;\n /**\n * 玩家离开房间事件\n * @param room 房间信息\n * @param player 玩家信息\n */\n \"room.leave\": (room: Room, player: Player) => void;\n /**\n * 房间开始游戏事件\n * @param room 房间信息\n */\n \"room.start\": (room: Room) => void;\n /**\n * 房间结束游戏事件\n * @param room 房间信息\n */\n \"room.end\": (room: Room) => void;\n /**\n * 房间玩家全部准备事件\n * @param room 房间信息\n */\n \"room.all-ready\": (room: Room) => void;\n /**\n * 房间命令事件\n * @param command 命令内容\n */\n \"room.command\": (command: any & { sender: Player }) => void;\n /**\n * 房间消息事件\n * @param message 消息内容\n */\n \"room.message\": (message: { content: string; sender?: RoomPlayer }) => void;\n /**\n * 房间玩家准备事件\n * @param player 玩家信息\n * @param roomId 房间ID(可选)\n */\n \"room.player-ready\": (player: Player, roomId?: string) => void;\n /**\n * 房间玩家取消准备事件\n * @param player 玩家信息\n * @param roomId 房间ID(可选)\n */\n \"room.player-unready\": (player: Player, roomId?: string) => void;\n /**\n * 玩家列表更新事件(内部)\n * @param players 玩家列表\n */\n \"onPlayerList\": (players: Player[]) => void;\n /**\n * 房间列表更新事件(内部)\n * @param rooms 房间列表\n */\n \"onRoomList\": (rooms: Room[]) => void;\n /**\n * 房间开始游戏事件(内部)\n * @param room 房间信息\n */\n \"onRoomStart\": (room: Room) => void;\n /**\n * 房间结束游戏事件(内部)\n * @param room 房间信息\n */\n \"onRoomEnd\": (room: Room) => void;\n /**\n * 房间玩家全部准备事件(内部)\n * @param room 房间信息\n */\n \"onRoomAllReady\": (room: Room) => void;\n};\n\nexport class Player {\n id: string;\n name: string;\n attributes: Record<string, any>;\n status: string;\n constructor(player: Partial<Player>) {\n this.id = player.id || Date.now().toString();\n this.name = player.name || '玩家' + this.id;\n this.attributes = player.attributes || {};\n this.status = player.status || 'online';\n }\n}\n\nexport class RoomPlayer extends Player {\n role: string;\n isReady: boolean;\n isCreator: boolean;\n constructor(player: RoomPlayer) {\n super(player);\n this.role = player.role;\n this.isReady = player.isReady;\n this.isCreator = player.isCreator;\n }\n}\n\nexport class Room {\n id: string;\n name: string;\n players: RoomPlayer[];\n size: number;\n minSize: number;\n status: string;\n attrs: Record<string, any>;\n constructor(room: Room) {\n this.id = room.id;\n this.name = room.name;\n this.players = room.players.map(player => new RoomPlayer(player));\n this.size = room.size;\n this.minSize = room.minSize;\n this.status = room.status;\n this.attrs = room.attrs;\n }\n}\n\n/**\n * Tiaoom 客户端\n * @description 用于连接 Tiaoom 服务器并进行游戏交互,如创建房间、加入房间、发送命令等。\n * 需继承后实现具体的连接和消息发送逻辑。\n */\nexport class Tiaoom {\n listeners: Record<string, Function[]>;\n rooms: Room[];\n players: Player[];\n currentPlayer: Player | null;\n constructor() {\n this.listeners = {};\n this.rooms = [];\n this.players = [];\n this.currentPlayer = null;\n }\n\n /**\n * 启动游戏\n */\n run() {\n this.connect();\n this.onReady(() => {\n this.send({ type: MessageTypes.RoomList });\n this.send({ type: MessageTypes.PlayerList });\n });\n\n this.on(\"player.list\", (players) => {\n this.players = players.map(player => new Player(player));\n this.emit('onPlayerList', [...this.players]);\n });\n this.on(\"player.login\", (player) => {\n this.players.push(new Player(player));\n this.emit('onPlayerList', [...this.players]);\n });\n this.on(\"player.logout\", (player) => {\n this.players = this.players.filter(p => p.id !== player.id);\n this.emit('onPlayerList', [...this.players]);\n });\n\n\n this.on(\"room.list\", (rooms) => {\n this.rooms = rooms.map(room => new Room(room));\n this.emit('onRoomList', [...this.rooms]);\n });\n this.on(\"room.create\", (room) => {\n this.rooms.push(new Room(room));\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.update\", (room) => {\n const existingRoom = this.rooms.find(r => r.id === room.id);\n if (!existingRoom) {\n this.rooms.push(new Room(room));\n } else {\n Object.assign(existingRoom, room);\n }\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.close\", (room) => {\n this.rooms = this.rooms.filter(r => r.id !== room.id);\n this.emit('onRoomList', this.rooms);\n });\n this.on(\"room.update\", (room) => {\n const updatedRoom = this.rooms.find(r => r.id === room.id);\n if (updatedRoom) {\n Object.assign(updatedRoom, room);\n this.emit('onRoomList', this.rooms);\n }\n });\n\n return this;\n }\n\n /**\n * 连接服务器实现\n */\n connect() {\n throw new Error('Must be implement connect method');\n }\n\n /**\n * 发送消息实现\n */\n send(_: { type: MessageTypes, data?: any }) {\n throw new Error('Must be implement send method');\n }\n\n /**\n * 登录\n * @param {Player} player 玩家信息\n */\n login(player: Player) {\n this.currentPlayer = new Player(player);\n this.send({ type: MessageTypes.PlayerLogin, data: player });\n return this;\n }\n\n /**\n * 创建房间\n * @param {string} name 房间名称\n * @param {number} size 房间人数上限\n * @param {number} minSize 房间人数下限\n * @param {object} attrs 房间属性\n */\n createRoom({ name, size, minSize, attrs }: Omit<IRoomOptions, 'id'>) {\n return new Promise<void>((resolve) => {\n this.send({ type: MessageTypes.RoomCreate, data: { name, size, minSize, attrs } });\n this.on(\"room.create\", (room) => {\n resolve();\n });\n });\n }\n\n /**\n * 加入房间\n * @param {string} roomId 房间ID\n */\n joinRoom(roomId: string) {\n this.send({ type: MessageTypes.PlayerJoin, data: { roomId } });\n return this;\n }\n\n /**\n * 离开房间\n * @param {string} roomId 房间ID\n */\n leaveRoom(roomId: string) {\n this.send({ type: MessageTypes.PlayerLeave, data: { roomId } });\n return this;\n }\n\n /**\n * 踢出玩家\n * @param {string} roomId 房间ID\n * @param {string} playerId 玩家ID\n */\n kickPlayer(roomId: string, playerId: string) {\n this.send({ type: MessageTypes.RoomKick, data: { roomId, playerId } });\n return this;\n }\n\n /**\n * 转让房主\n * @param {string} roomId 房间ID\n * @param {string} playerId 目标玩家ID\n */\n transferRoom(roomId: string, playerId: string) {\n this.send({ type: MessageTypes.RoomTransfer, data: { roomId, playerId } });\n return this;\n }\n\n /**\n * 开始游戏\n * @param {string} id 房间ID\n */\n startGame(id: string) {\n this.send({ type: MessageTypes.RoomStart, data: { id } });\n return this;\n }\n\n /**\n * 准备/取消准备\n * @param {string} roomId 房间ID\n * @param {boolean} isReady 是否准备\n */\n ready(roomId: string, isReady=true) {\n this.send({ type: isReady ? MessageTypes.PlayerReady : MessageTypes.PlayerUnready, data: { roomId } });\n return this;\n }\n\n /**\n * 发送房间指令\n * @param {string} roomId 房间ID\n * @param {any} command 指令内容\n */\n command(command: any): this;\n command(roomId: string, command: any): this;\n command(roomId: string | any, command?: any) {\n if (typeof roomId != 'string') {\n command = roomId;\n this.send({ type: MessageTypes.GlobalCommand, data: command });\n } else {\n this.send({ type: MessageTypes.RoomPlayerCommand, data: { id: roomId, ...command } });\n }\n return this;\n }\n\n /**\n * 连接准备监听\n * @param {function} cb 监听函数\n */\n onReady(cb: () => void) {\n return this.on(\"sys.ready\", cb);\n }\n\n /**\n * 全局错误监听\n * @param {function} cb 监听函数\n */\n onError(cb: (error: Error) => void) {\n this.on(\"global.error\", cb);\n return this;\n }\n\n /**\n * 全局消息监听\n * @param {function} cb 监听函数\n */\n onMessage(cb: (message: string, sender?: Player) => void, on=true) {\n if (on) this.on(\"global.message\", cb);\n else this.off(\"global.message\", cb);\n return this;\n }\n\n /**\n * 玩家列表变更监听\n * @param {function} cb 监听函数\n */\n onPlayerList(cb: (players: Player[]) => void) {\n this.on(\"onPlayerList\", cb);\n return this;\n }\n\n /**\n * 房间列表变更监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomList(cb: (rooms: Room[]) => void, on=true) {\n if (on) this.on(\"onRoomList\", cb);\n else this.off(\"onRoomList\", cb);\n return this;\n }\n\n /**\n * 玩家加入监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerJoin(cb: (room: Room, player: Player) => void, on=true) {\n if (on) this.on(\"room.join\", cb);\n else this.off(\"room.join\", cb);\n return this;\n }\n\n /**\n * 玩家离开监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerLeave(cb: (room: Room, player: Player) => void, on=true) {\n if (on) this.on(\"room.leave\", cb);\n else this.off(\"room.leave\", cb);\n return this;\n }\n\n /**\n * 玩家准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerReady(cb: (player: Player, roomId?: string) => void, on=true) {\n if (on) this.on(\"room.player-ready\", cb);\n else this.off(\"room.player-ready\", cb);\n return this;\n }\n\n /**\n * 玩家取消准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerUnready(cb: (player: Player, roomId?: string) => void, on=true) {\n if (on) this.on(\"room.player-unready\", cb);\n else this.off(\"room.player-unready\", cb);\n return this;\n }\n\n /**\n * 玩家状态更新监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerStatus(cb: (player: Player, status: any) => void, on=true) {\n if (on) this.on(\"player.status\", cb);\n else this.off(\"player.status\", cb);\n return this;\n }\n\n /**\n * 房间开始游戏监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomStart(cb: (room: Room) => void, on=true) {\n if (!this.listeners[\"room.start\"]) {\n this.on(\"room.start\", (room) => this.emit(\"onRoomStart\", new Room(room)));\n }\n if (on) this.on(\"onRoomStart\", cb);\n else this.off(\"onRoomStart\", cb);\n return this;\n }\n\n /**\n * 房间结束游戏监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns\n */\n onRoomEnd(cb: (room: Room) => void, on=true) {\n if (!this.listeners[\"room.end\"]) {\n this.on(\"room.end\", (room) => this.emit(\"onRoomEnd\", new Room(room)));\n }\n if (on) this.on(\"onRoomEnd\", cb);\n else this.off(\"onRoomEnd\", cb);\n return this;\n }\n\n /**\n * 房间全部准备监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomAllReady(cb: (room: Room) => void, on=true) {\n if (!this.listeners[\"room.all-ready\"]) {\n this.on(\"room.all-ready\", (room) => this.emit(\"onRoomAllReady\", new Room(room)));\n }\n if (on) this.on(\"onRoomAllReady\", cb);\n else this.off(\"onRoomAllReady\", cb);\n return this;\n }\n\n /**\n * 房间消息监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomMessage(cb: (message: { content: string, sender?: RoomPlayer }) => void, on=true) {\n if (on) this.on(\"room.message\", cb);\n else this.off(\"room.message\", cb);\n return this;\n }\n\n /**\n * 玩家消息监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerMessage(cb: (message: { content: string, sender?: Player }) => void, on=true) {\n if (on) this.on(\"player.message\", cb);\n else this.off(\"player.message\", cb);\n return this;\n }\n\n /**\n * 房间指令监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onRoomCommand(cb: (command: any & { sender?: Player }) => void, on=true) {\n if (on) this.on(\"room.command\", cb);\n else this.off(\"room.command\", cb);\n return this;\n }\n\n /**\n * 玩家指令监听\n * @param {function} cb 监听函数\n * @param {boolean} on 开启/关闭监听\n * @returns \n */\n onPlayerCommand(cb: (command: any & { sender?: Player }) => void, on=true) {\n if (on) this.on(\"player.command\", cb);\n else this.off(\"player.command\", cb);\n return this;\n }\n\n /**\n * 事件监听\n * @param {string} event 事件名称\n * @param {TiaoomEvents[K]} listener 监听函数\n * @returns \n */\n on<K extends keyof TiaoomEvents>(event: K, listener: TiaoomEvents[K]): this {\n this.listeners[event] = this.listeners[event] || [];\n this.listeners[event].push(listener);\n return this;\n }\n\n /**\n * 事件取消监听\n * @param {string} event 事件名称\n * @param {TiaoomEvents[K]} listener 监听函数\n * @returns \n */\n off<K extends keyof TiaoomEvents>(event: K, listener: TiaoomEvents[K]): this {\n const listeners = this.listeners[event] || [];\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n return this;\n }\n\n /**\n * 事件触发\n * @param {string} event 事件名称\n * @param {Parameters<TiaoomEvents[K]>} args 参数\n * @returns \n */\n emit<K extends keyof TiaoomEvents>(event: K, ...args: Parameters<TiaoomEvents[K]>): this {\n const listeners = this.listeners[event] || [];\n listeners.forEach(listener => listener(...args));\n return this;\n }\n}\n"],"mappings":"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"}
|
package/src/index.cjs
CHANGED
|
@@ -28,117 +28,183 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
let events = require("events");
|
|
29
29
|
events = __toESM(events);
|
|
30
30
|
|
|
31
|
+
//#region lib/client.ts
|
|
32
|
+
/**
|
|
33
|
+
* 客户端发送消息包类型枚举
|
|
34
|
+
* player: 'command', 'message', 'join', 'leave', 'status'
|
|
35
|
+
*/
|
|
36
|
+
let MessageTypes$1 = /* @__PURE__ */ function(MessageTypes$2) {
|
|
37
|
+
/**
|
|
38
|
+
* 房间列表
|
|
39
|
+
*/
|
|
40
|
+
MessageTypes$2["RoomList"] = "room.list";
|
|
41
|
+
/**
|
|
42
|
+
* 玩家列表
|
|
43
|
+
*/
|
|
44
|
+
MessageTypes$2["PlayerList"] = "player.list";
|
|
45
|
+
/**
|
|
46
|
+
* 房间创建
|
|
47
|
+
*/
|
|
48
|
+
MessageTypes$2["RoomCreate"] = "room.create";
|
|
49
|
+
/**
|
|
50
|
+
* 玩家加入房间
|
|
51
|
+
*/
|
|
52
|
+
MessageTypes$2["PlayerJoin"] = "player.join";
|
|
53
|
+
/**
|
|
54
|
+
* 玩家离开房间
|
|
55
|
+
*/
|
|
56
|
+
MessageTypes$2["PlayerLeave"] = "player.leave";
|
|
57
|
+
/**
|
|
58
|
+
* 房间获取
|
|
59
|
+
*/
|
|
60
|
+
MessageTypes$2["RoomGet"] = "room.get";
|
|
61
|
+
/**
|
|
62
|
+
* 房间开始
|
|
63
|
+
*/
|
|
64
|
+
MessageTypes$2["RoomStart"] = "room.start";
|
|
65
|
+
/**
|
|
66
|
+
* 房间踢出玩家
|
|
67
|
+
*/
|
|
68
|
+
MessageTypes$2["RoomKick"] = "room.kick";
|
|
69
|
+
/**
|
|
70
|
+
* 房间转移
|
|
71
|
+
*/
|
|
72
|
+
MessageTypes$2["RoomTransfer"] = "room.transfer";
|
|
73
|
+
/**
|
|
74
|
+
* 房间关闭
|
|
75
|
+
*/
|
|
76
|
+
MessageTypes$2["RoomClose"] = "room.close";
|
|
77
|
+
/**
|
|
78
|
+
* 玩家登录
|
|
79
|
+
*/
|
|
80
|
+
MessageTypes$2["PlayerLogin"] = "player.login";
|
|
81
|
+
/**
|
|
82
|
+
* 玩家登出
|
|
83
|
+
*/
|
|
84
|
+
MessageTypes$2["PlayerLogout"] = "player.logout";
|
|
85
|
+
/**
|
|
86
|
+
* 玩家准备
|
|
87
|
+
*/
|
|
88
|
+
MessageTypes$2["PlayerReady"] = "player.ready";
|
|
89
|
+
/**
|
|
90
|
+
* 玩家取消准备
|
|
91
|
+
*/
|
|
92
|
+
MessageTypes$2["PlayerUnready"] = "player.unready";
|
|
93
|
+
/**
|
|
94
|
+
* 房间内玩家发送的指令
|
|
95
|
+
*/
|
|
96
|
+
MessageTypes$2["RoomPlayerCommand"] = "room.player-command";
|
|
97
|
+
/**
|
|
98
|
+
* 全局命令
|
|
99
|
+
*/
|
|
100
|
+
MessageTypes$2["GlobalCommand"] = "global.command";
|
|
101
|
+
return MessageTypes$2;
|
|
102
|
+
}({});
|
|
103
|
+
|
|
104
|
+
//#endregion
|
|
31
105
|
//#region lib/models/message.ts
|
|
32
106
|
/**
|
|
33
107
|
* 消息包类型枚举
|
|
34
108
|
* player: 'command', 'message', 'join', 'leave', 'status'
|
|
35
109
|
*/
|
|
36
|
-
let MessageTypes = /* @__PURE__ */ function(MessageTypes$
|
|
110
|
+
let MessageTypes = /* @__PURE__ */ function(MessageTypes$2) {
|
|
111
|
+
/**
|
|
112
|
+
* 连接准备就绪事件
|
|
113
|
+
*/
|
|
114
|
+
MessageTypes$2["SysReady"] = "sys.ready";
|
|
115
|
+
/**
|
|
116
|
+
* 连接关闭事件
|
|
117
|
+
*/
|
|
118
|
+
MessageTypes$2["SysClose"] = "sys.close";
|
|
119
|
+
/**
|
|
120
|
+
* 错误事件
|
|
121
|
+
*/
|
|
122
|
+
MessageTypes$2["SysError"] = "sys.error";
|
|
123
|
+
/**
|
|
124
|
+
* 全局错误
|
|
125
|
+
*/
|
|
126
|
+
MessageTypes$2["GlobalError"] = "global.error";
|
|
37
127
|
/**
|
|
38
128
|
* 房间列表
|
|
39
129
|
*/
|
|
40
|
-
MessageTypes$
|
|
130
|
+
MessageTypes$2["RoomList"] = "room.list";
|
|
41
131
|
/**
|
|
42
132
|
* 房间创建
|
|
43
133
|
*/
|
|
44
|
-
MessageTypes$
|
|
134
|
+
MessageTypes$2["RoomCreate"] = "room.create";
|
|
45
135
|
/**
|
|
46
136
|
* 房间更新
|
|
47
137
|
*/
|
|
48
|
-
MessageTypes$
|
|
49
|
-
/**
|
|
50
|
-
* 房间准备
|
|
51
|
-
*/
|
|
52
|
-
MessageTypes$1["RoomReady"] = "room.ready";
|
|
138
|
+
MessageTypes$2["RoomUpdate"] = "room.update";
|
|
53
139
|
/**
|
|
54
140
|
* 房间开始
|
|
55
141
|
*/
|
|
56
|
-
MessageTypes$
|
|
142
|
+
MessageTypes$2["RoomStart"] = "room.start";
|
|
57
143
|
/**
|
|
58
144
|
* 房间结束
|
|
59
145
|
*/
|
|
60
|
-
MessageTypes$
|
|
146
|
+
MessageTypes$2["RoomEnd"] = "room.end";
|
|
61
147
|
/**
|
|
62
148
|
* 房间关闭
|
|
63
149
|
*/
|
|
64
|
-
MessageTypes$
|
|
150
|
+
MessageTypes$2["RoomClose"] = "room.close";
|
|
65
151
|
/**
|
|
66
152
|
* 房间全部玩家已准备
|
|
67
153
|
*/
|
|
68
|
-
MessageTypes$
|
|
154
|
+
MessageTypes$2["RoomAllReady"] = "room.all-ready";
|
|
69
155
|
/**
|
|
70
156
|
* 房间命令
|
|
71
157
|
*/
|
|
72
|
-
MessageTypes$
|
|
158
|
+
MessageTypes$2["RoomCommand"] = "room.command";
|
|
159
|
+
/**
|
|
160
|
+
* 房间内玩家发送的指令
|
|
161
|
+
*/
|
|
162
|
+
MessageTypes$2["RoomPlayerCommand"] = "room.player-command";
|
|
73
163
|
/**
|
|
74
164
|
* 房间消息
|
|
75
165
|
*/
|
|
76
|
-
MessageTypes$
|
|
166
|
+
MessageTypes$2["RoomMessage"] = "room.message";
|
|
77
167
|
/**
|
|
78
168
|
* 玩家加入房间
|
|
79
169
|
*/
|
|
80
|
-
MessageTypes$
|
|
170
|
+
MessageTypes$2["RoomJoin"] = "room.join";
|
|
81
171
|
/**
|
|
82
172
|
* 玩家离开房间
|
|
83
173
|
*/
|
|
84
|
-
MessageTypes$
|
|
85
|
-
/**
|
|
86
|
-
* 房间踢出玩家
|
|
87
|
-
*/
|
|
88
|
-
MessageTypes$1["RoomKick"] = "room.kick";
|
|
89
|
-
/**
|
|
90
|
-
* 房间转移
|
|
91
|
-
*/
|
|
92
|
-
MessageTypes$1["RoomTransfer"] = "room.transfer";
|
|
174
|
+
MessageTypes$2["RoomLeave"] = "room.leave";
|
|
93
175
|
/**
|
|
94
176
|
* 房间玩家准备
|
|
95
177
|
*/
|
|
96
|
-
MessageTypes$
|
|
178
|
+
MessageTypes$2["RoomPlayerReady"] = "room.player-ready";
|
|
97
179
|
/**
|
|
98
180
|
* 房间玩家取消准备
|
|
99
181
|
*/
|
|
100
|
-
MessageTypes$
|
|
182
|
+
MessageTypes$2["RoomPlayerUnready"] = "room.player-unready";
|
|
101
183
|
/**
|
|
102
184
|
* 玩家列表
|
|
103
185
|
*/
|
|
104
|
-
MessageTypes$
|
|
186
|
+
MessageTypes$2["PlayerList"] = "player.list";
|
|
105
187
|
/**
|
|
106
188
|
* 玩家登录
|
|
107
189
|
*/
|
|
108
|
-
MessageTypes$
|
|
190
|
+
MessageTypes$2["PlayerLogin"] = "player.login";
|
|
109
191
|
/**
|
|
110
192
|
* 玩家登出
|
|
111
193
|
*/
|
|
112
|
-
MessageTypes$
|
|
113
|
-
/**
|
|
114
|
-
* 玩家消息
|
|
115
|
-
*/
|
|
116
|
-
MessageTypes$1["PlayerMessage"] = "player.message";
|
|
194
|
+
MessageTypes$2["PlayerLogout"] = "player.logout";
|
|
117
195
|
/**
|
|
118
|
-
*
|
|
196
|
+
* *玩家消息
|
|
119
197
|
*/
|
|
120
|
-
MessageTypes$
|
|
198
|
+
MessageTypes$2["PlayerMessage"] = "player.message";
|
|
121
199
|
/**
|
|
122
|
-
*
|
|
123
|
-
*/
|
|
124
|
-
MessageTypes$1["PlayerReady"] = "player.ready";
|
|
125
|
-
/**
|
|
126
|
-
* 玩家取消准备
|
|
127
|
-
*/
|
|
128
|
-
MessageTypes$1["PlayerUnready"] = "player.unready";
|
|
129
|
-
/**
|
|
130
|
-
* 全局命令
|
|
200
|
+
* *玩家命令
|
|
131
201
|
*/
|
|
132
|
-
MessageTypes$
|
|
202
|
+
MessageTypes$2["PlayerCommand"] = "player.command";
|
|
133
203
|
/**
|
|
134
204
|
* 全局消息
|
|
135
205
|
*/
|
|
136
|
-
MessageTypes$
|
|
137
|
-
|
|
138
|
-
* 全局错误
|
|
139
|
-
*/
|
|
140
|
-
MessageTypes$1["GlobalError"] = "global.error";
|
|
141
|
-
return MessageTypes$1;
|
|
206
|
+
MessageTypes$2["GlobalMessage"] = "global.message";
|
|
207
|
+
return MessageTypes$2;
|
|
142
208
|
}({});
|
|
143
209
|
|
|
144
210
|
//#endregion
|
|
@@ -383,8 +449,9 @@ var Room = class extends events.default {
|
|
|
383
449
|
"command",
|
|
384
450
|
"start",
|
|
385
451
|
"end",
|
|
386
|
-
"close",
|
|
387
452
|
"all-ready",
|
|
453
|
+
"player-unready",
|
|
454
|
+
"player-ready",
|
|
388
455
|
"join",
|
|
389
456
|
"leave"
|
|
390
457
|
].forEach((event) => {
|
|
@@ -470,7 +537,7 @@ var Room = class extends events.default {
|
|
|
470
537
|
player.emit("status", PlayerStatus.playing);
|
|
471
538
|
});
|
|
472
539
|
this.emit("update", this);
|
|
473
|
-
return this.emit("start", this
|
|
540
|
+
return this.emit("start", this);
|
|
474
541
|
}
|
|
475
542
|
/**
|
|
476
543
|
* 结束游戏
|
|
@@ -514,30 +581,27 @@ var Tiaoom = class extends events.EventEmitter {
|
|
|
514
581
|
(_this$messageInstance = this.messageInstance) === null || _this$messageInstance === void 0 || _this$messageInstance.on("message", (message, cb) => {
|
|
515
582
|
try {
|
|
516
583
|
switch (message.type) {
|
|
517
|
-
case
|
|
518
|
-
case
|
|
519
|
-
case
|
|
520
|
-
case
|
|
521
|
-
case
|
|
522
|
-
case
|
|
523
|
-
case
|
|
524
|
-
case
|
|
525
|
-
case
|
|
526
|
-
case
|
|
527
|
-
case
|
|
528
|
-
case
|
|
529
|
-
case
|
|
530
|
-
case
|
|
531
|
-
case
|
|
584
|
+
case MessageTypes$1.RoomList: return cb === null || cb === void 0 ? void 0 : cb(null, this.rooms);
|
|
585
|
+
case MessageTypes$1.PlayerList: return cb === null || cb === void 0 ? void 0 : cb(null, this.players);
|
|
586
|
+
case MessageTypes$1.RoomCreate: return this.createRoom(message.sender, message.data);
|
|
587
|
+
case MessageTypes$1.PlayerJoin: return this.joinPlayer(message.sender, message.data);
|
|
588
|
+
case MessageTypes$1.PlayerLeave: return this.leavePlayer(message.sender, message.data);
|
|
589
|
+
case MessageTypes$1.RoomGet: return cb === null || cb === void 0 ? void 0 : cb(null, this.searchRoom(message.data));
|
|
590
|
+
case MessageTypes$1.RoomStart: return this.startRoom(message.sender, message.data);
|
|
591
|
+
case MessageTypes$1.RoomKick: return this.kickPlayer(message.sender, message.data);
|
|
592
|
+
case MessageTypes$1.RoomTransfer: return this.transferOwner(message.sender, message.data);
|
|
593
|
+
case MessageTypes$1.RoomClose: return this.closeRoom(message.sender, message.data);
|
|
594
|
+
case MessageTypes$1.PlayerLogin: return this.loginPlayer(message.data);
|
|
595
|
+
case MessageTypes$1.PlayerLogout: return this.removePlayer(message.data);
|
|
596
|
+
case MessageTypes$1.PlayerReady: return this.readyPlayer(message.sender, message.data);
|
|
597
|
+
case MessageTypes$1.PlayerUnready: return this.unReadyPlayer(message.sender, message.data);
|
|
598
|
+
case MessageTypes$1.RoomPlayerCommand:
|
|
532
599
|
var _this$searchRoom;
|
|
533
600
|
return (_this$searchRoom = this.searchRoom(message.data)) === null || _this$searchRoom === void 0 ? void 0 : _this$searchRoom.emit("player-command", {
|
|
534
601
|
...message.data,
|
|
535
602
|
sender: message.sender
|
|
536
603
|
});
|
|
537
|
-
case
|
|
538
|
-
var _this$searchRoom2;
|
|
539
|
-
return (_this$searchRoom2 = this.searchRoom(message.data)) === null || _this$searchRoom2 === void 0 ? void 0 : _this$searchRoom2.emit("message", message.data);
|
|
540
|
-
case "global.command": return this.emit("command", {
|
|
604
|
+
case MessageTypes$1.GlobalCommand: return this.emit("command", {
|
|
541
605
|
...message.data,
|
|
542
606
|
sender: message.sender
|
|
543
607
|
});
|
|
@@ -588,11 +652,12 @@ var Tiaoom = class extends events.EventEmitter {
|
|
|
588
652
|
data: rooms
|
|
589
653
|
});
|
|
590
654
|
});
|
|
591
|
-
this.on("
|
|
655
|
+
this.on("message", (data, sender) => {
|
|
592
656
|
var _this$messageInstance8;
|
|
593
657
|
(_this$messageInstance8 = this.messageInstance) === null || _this$messageInstance8 === void 0 || _this$messageInstance8.send({
|
|
594
|
-
type: MessageTypes.
|
|
595
|
-
data
|
|
658
|
+
type: MessageTypes.GlobalMessage,
|
|
659
|
+
data,
|
|
660
|
+
sender
|
|
596
661
|
});
|
|
597
662
|
});
|
|
598
663
|
return this;
|
|
@@ -610,7 +675,7 @@ var Tiaoom = class extends events.EventEmitter {
|
|
|
610
675
|
if (this.searchRoom(options)) throw new Error("room already exists.");
|
|
611
676
|
if (this.rooms.some((r) => r.players.some((p) => p.id === sender.id))) throw new Error("you are already in a room.");
|
|
612
677
|
const room = new Room(options);
|
|
613
|
-
room.setSender((type, message) => {
|
|
678
|
+
room.setSender((type, message, sender$1) => {
|
|
614
679
|
var _this$messageInstance9;
|
|
615
680
|
(_this$messageInstance9 = this.messageInstance) === null || _this$messageInstance9 === void 0 || _this$messageInstance9.send({
|
|
616
681
|
type: `room.${type}`,
|
|
@@ -720,6 +785,7 @@ var Tiaoom = class extends events.EventEmitter {
|
|
|
720
785
|
...player,
|
|
721
786
|
...roomPlayer
|
|
722
787
|
});
|
|
788
|
+
room.emit("update", room);
|
|
723
789
|
return this;
|
|
724
790
|
}
|
|
725
791
|
unReadyPlayer(sender, player) {
|
|
@@ -733,6 +799,7 @@ var Tiaoom = class extends events.EventEmitter {
|
|
|
733
799
|
roomPlayer.isReady = false;
|
|
734
800
|
playerInstance.emit("status", PlayerStatus.unready);
|
|
735
801
|
room.emit("player-unready", roomPlayer);
|
|
802
|
+
room.emit("update", room);
|
|
736
803
|
return this;
|
|
737
804
|
}
|
|
738
805
|
removePlayer(sender) {
|