UNPKG

gamelet-cli

Version:

Download project from code.gamelet.com, edit/test in vscode and sync back to server.

213 lines (195 loc) 7.92 kB
(function (global) { let history = []; let historyIndex = 0; let socket = null; let myPlayer; let myRoom; $('form').submit(function () { processCommand($('#m').val()); $('#m').val(''); return false; }); $('#m').keyup(event => { if(event.which == 38) { // up historyIndex = Math.max(0, historyIndex - 1); $('#m').val(history[historyIndex]); } else if(event.which == 40) { // down historyIndex = Math.min(history.length, historyIndex + 1); $('#m').val(historyIndex < history.length ? history[historyIndex] : ''); } }) function connect() { if(socket) { socket.open(); } else { socket = io('/game', { forceNew: true }); socket.on('connect', () => { log('socket connected', ''); }) socket.on('disconnect', () => { logError('socket disconnected', ''); }) socket.on('error', function (error) { logError('socket error', error); }); socket.on('connect_error', function (error) { logError('socket connect_error', error); }); socket.on('connect_timeout', function (error) { logError('socket connect_timeout', error); }); let msgProccessor = { on_broadcastInRoom: (senderCode, roomCode, data) => { log('on_broadcastInRoom', JSON.stringify([senderCode, roomCode, data])); }, on_broadcastToRoom: (senderCode, roomCode, data) => { log('on_broadcastToRoom', JSON.stringify([senderCode, roomCode, data])); }, on_broadcastToZone: (senderCode, roomCode, data) => { log('on_broadcastToZone', JSON.stringify([senderCode, roomCode, data])); }, on_playerJoinedRoom: (roomCode, player) => { log('on_playerJoinedRoom', JSON.stringify([roomCode, player])); }, on_playerLeftRoom: (roomCode, playerCode) => { log('on_playerLeftRoom', JSON.stringify([roomCode, playerCode])); }, on_playerLeftRoom: (roomCode, playerCode) => { log('on_playerLeftRoom', JSON.stringify([roomCode, playerCode])); }, on_roomCreated: (roomAndStatus) => { log('on_roomCreated', JSON.stringify([roomAndStatus])); }, on_roomClosed: (roomCode) => { log('on_roomClosed', JSON.stringify([roomCode])); }, on_roomStatusChanged: (roomCode, status) => { log('on_roomStatusChanged', JSON.stringify([roomCode, status])); }, on_roomBrainerChanged: (roomCode, brainerCode) => { log('on_roomBrainerChanged', JSON.stringify([roomCode, brainerCode])); }, on_dataToPlayer: (senderCode, projectCode, msgVersion, data, respond) => { log('on_dataToPlayer', JSON.stringify([senderCode, projectCode, msgVersion, data])); respond('response to player: ' + data) }, on_dataToRoommate: (senderCode, roomCode, data) => { log('on_dataToRoommate', JSON.stringify([senderCode, roomCode, data])); respond('response to roommate: ' + data) }, on_monitorDataToPlayer: (senderCode, data, respond) => { log('on_monitorDataToPlayer', JSON.stringify([senderCode, data])); respond('response to monitor: ' + data) }, on_zoneStatusChanged: (zoneCode, data) => { log('on_monitorDataToPlayer', JSON.stringify([zoneCode, data])); }, } socket.on('gltmsg', function (type, params, respond) { if(respond) { params.push(respond); } msgProccessor['on_' + type].apply(msgProccessor, params); }); } } connect(); function log(prefix, msg) { $('#messages').append($('<li>').html(`<b>[${prefix}]</b> ${msg}`)); window.scrollTo(0, document.body.scrollHeight); } function logError(prefix, msg) { $('#messages').append($('<li>').html(`<span style="color:red"><b>[${prefix}]</b> ${msg}</span>`)); } function processCommand(line, cb) { if (!line) { return; } log('input', line); history.push(line); historyIndex = history.length; let args = line.trim().split(/\s+/); let command = args[0]; if (command == 'reconnect') { connect(); } else { args = args.map(arg => { if(/^[\d\.]+$/.test(arg)) { return parseFloat(arg); } if(/^\{.*\}$/.test(arg)) { return JSON.parse(arg); } return arg; }) let commandParams = command.split('.'); if(commandParams.length == 2) { // commandParams = [service, method] // args.slice(1) = params commandParams.push(args.slice(1)); args = commandParams; } args.push((data) => { if (data.error) { logError(command + ' Error', data.error); } else { log(command + ' Response', JSON.stringify(data.data)); if(cb) { cb(data.data); } } }) socket.emit.apply(socket, args) } } // global.login = function(projectCode, username) { $.get('http://localhost:8090/gltserver/login_test_token/' + projectCode + '/' + username, data => { processCommand(`login ${data.accessToken} 1 100`, me => { myPlayer = me; }); }) }; global.enterZone = function(zoneCode) { processCommand(`gameroom.listenToZone ${zoneCode}`); }; global.leaveZone = function(zoneCode) { processCommand(`gameroom.stopListenToZone ${zoneCode}`); }; global.createRoom = function() { processCommand(`gameroom.createRoom zone1 testRoom 123 3 0 {} true`, roomFull => { myRoom = roomFull; }); }; global.autoJoin = function() { processCommand(`gameroom.listRooms zone1`, data => { if(data && data.length) { processCommand(`gameroom.joinRoom ${data[0].code} 123`, roomFull => { myRoom = roomFull; }); } }); }; global.leaveRoom = function() { processCommand(`gameroom.leaveRoom ` + myRoom.room.code); myRoom = null; }; global.listRooms = function() { processCommand(`gameroom.listRooms zone1 10 {"type":"equal","prop":"state","data":0}`); }; global.sendDataToOtherPlayer = function() { let targetName = myPlayer.user.username == 'haska' ? 'gggamelet' : 'haska'; processCommand(`player.searchPlayers ${targetName} 1`, data => { if(data && data.length) { let targetPlayer = data[0]; processCommand(`player.sendDataToPlayer ${targetPlayer.code} CoolMessageForTest`); } }); }; global.broadcastToZone = function() { $('#m').val('gameroom.broadcastToZone zone1 IamInZone'); }; global.broadcastInRoom = function() { $('#m').val('gameroom.broadcastInRoom ThisIsFromRoommate'); }; })(window);