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
JavaScript
(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);