{ "version": 3, "sources": ["../../../sim/cobbled-debug-server.ts"], "sourcesContent": ["import {BattleStream} from \"./battle-stream\";\r\nimport {Dex} from \"./dex\";\r\nimport * as Net from \"net\";\r\nimport { Species } from \"./dex-species\";\r\nimport * as CobblemonCache from \"./cobblemon-cache\";\r\n\r\nexport function startServer(port: number): void {\r\n\tconst server = Net.createServer();\r\n\tconst battleMap = new Map();\r\n\r\n\tserver.listen(port, () => {\r\n\t\tconsole.log('Server listening for connection requests on socket localhost: ' + port);\r\n\t});\r\n\r\n\tserver.on('connection', socket => onConnection(socket, battleMap));\r\n}\r\n\r\nfunction onData(socket: Net.Socket, chunk: Buffer, battleMap: Map) {\r\n\tconst data = chunk.toString();\r\n\tconst lines = data.split('\\n');\r\n\tlines.forEach(line => {\r\n\t\tconsole.log('Data received from client: ' + line.toString());\r\n\t\tif (line.startsWith('>startbattle')) {\r\n\t\t\tconst battleId = line.split(' ')[1];\r\n\t\t\tbattleMap.set(battleId, new BattleStream());\r\n\t\t} else if (line === '>getCobbledMoves') {\r\n\t\t\tgetCobbledMoves(socket);\r\n\t\t} else if (line === '>getCobbledAbilityIds') {\r\n\t\t\tgetCobbledAbilityIds(socket);\r\n\t\t} else if (line === '>getCobbledItemIds') {\r\n\t\t\tgetCobbledItemIds(socket);\r\n\t\t} else if (line === '>resetSpeciesData') {\r\n\t\t\tCobblemonCache.resetSpecies();\r\n\t\t} else if (line.startsWith('>receiveSpeciesData')) {\r\n\t\t\tconst speciesJson = line.replace(`>receiveSpeciesData `, '');\r\n\t\t\tconst species = JSON.parse(speciesJson) as Species;\r\n\t\t\tCobblemonCache.registerSpecies(species);\r\n\t\t\tconsole.log('Received', species.id);\r\n\t\t\tsocket.write('ACK');\r\n\t\t} else {\r\n\t\t\tconst [battleId, showdownMsg] = line.split('~');\r\n\t\t\tconst battleStream = battleMap.get(battleId);\r\n\t\t\tif (battleStream) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvoid battleStream.write(showdownMsg);\r\n\t\t\t\t} catch (err: any) {\r\n\t\t\t\t\tconsole.error(err.stack);\r\n\t\t\t\t}\r\n\r\n\t\t\t\twriteBattleOutput(socket, battleStream);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction writeBattleOutput(socket: Net.Socket, battleStream: BattleStream) {\r\n\tconst messages = battleStream.buf;\r\n\tif (messages.length !== 0) {\r\n\t\tsocket.write(padNumber(messages.length, 8));\r\n\t\tfor (const message of messages) {\r\n\t\t\tsocket.write(padNumber(message.length, 8) + message);\r\n\t\t}\r\n\t} else {\r\n\t\twriteVoid(socket);\r\n\t}\r\n\tbattleStream.buf = [];\r\n}\r\n\r\nfunction writeVoid(socket: Net.Socket) {\r\n\tsocket.write('00000000');\r\n}\r\n\r\nfunction onConnection(socket: Net.Socket, battleMap: Map) {\r\n\tsocket.on('data', (chunk) => onData(socket, chunk, battleMap));\r\n\tsocket.on('end', () => console.log('Closing connection with the client'));\r\n\tsocket.on('error', (err) => console.error(err.stack));\r\n}\r\n\r\nfunction getCobbledMoves(socket: Net.Socket) {\r\n\tconst payload = JSON.stringify(Dex.mod(CobblemonCache.MOD_ID).moves.all());\r\n\tsocket.write(padNumber(payload.length, 8) + payload);\r\n}\r\n\r\nfunction getCobbledAbilityIds(socket: Net.Socket) {\r\n\tconst payload = JSON.stringify(Dex.mod(CobblemonCache.MOD_ID).abilities.all().map(ability => ability.id));\r\n\tsocket.write(padNumber(payload.length, 8) + payload);\r\n}\r\n\r\nfunction getCobbledItemIds(socket: Net.Socket) {\r\n\tconst payload = JSON.stringify(Dex.mod(CobblemonCache.MOD_ID).items.all().map(item => item.id));\r\n\tsocket.write(padNumber(payload.length, 8) + payload);\r\n}\r\n\r\nfunction padNumber(num: number, size: number): string {\r\n\tlet numStr = num.toString();\r\n\twhile (numStr.length < size) numStr = \"0\" + numStr;\r\n\treturn numStr;\r\n}\r\n"], "mappings": "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", "names": [] }