177 lines
No EOL
4.3 KiB
JavaScript
177 lines
No EOL
4.3 KiB
JavaScript
function Storage(type) {
|
|
if (type == "world" || type == "localStorage" || type == "players") {
|
|
this.type = type;
|
|
var self = this;
|
|
|
|
return {
|
|
setItem: function(key, value) {
|
|
if(this.type != "players")
|
|
callErlang("ggs_db setItem " + escapeErlang([GGS.tableToken, self.type, key, value]));
|
|
else
|
|
throw "No such method setItem()";
|
|
},
|
|
getItem: function(key) {
|
|
return callErlang("ggs_db getItem " + escapeErlang([GGS.tableToken, self.type, key]));
|
|
},
|
|
key: function(position) {
|
|
return callErlang("ggs_db key " + escapeErlang([GGS.tableToken, self.type, position]));
|
|
},
|
|
length: {
|
|
get: function() {
|
|
return callErlang("ggs_db length " + escapeErlang([GGS.tableToken, self.type]));
|
|
}
|
|
},
|
|
removeItem: function(key) {
|
|
if(this.type != "players")
|
|
callErlang("ggs_db removeItem " + escapeErlang([GGS.tableToken, self.type, key]));
|
|
else
|
|
throw "No such method removeItem()";
|
|
},
|
|
clear: function() {
|
|
if(this.type != "players")
|
|
callErlang("ggs_db clear " + escapeErlang([GGS.tableToken, self.type]));
|
|
else
|
|
throw "No such method clear()";
|
|
}
|
|
}
|
|
} else throw "GGS: No such storage available " + type;
|
|
}
|
|
|
|
function _GGS(tableToken) {
|
|
|
|
this.tableToken = tableToken;
|
|
|
|
var world = new Storage("world");
|
|
this.__defineGetter__("world", function() {
|
|
return world;
|
|
});
|
|
|
|
|
|
var localStorage = new Storage("localStorage");
|
|
this.__defineGetter__("localStorage", function() {
|
|
return localStorage;
|
|
});
|
|
|
|
var players = new Storage("players");
|
|
this.__defineGetter__("players", function() {
|
|
return players;
|
|
});
|
|
|
|
var tableToken = this.tableToken;
|
|
this.__defineGetter__("tableToken", function() {
|
|
return tableToken;
|
|
});
|
|
|
|
}
|
|
|
|
_GGS.prototype.sendCommandToAll = function(command, args) {
|
|
var message = "{" + command + "," + args + "}";
|
|
callErlang("ggs_table send_command_to_all " + escapeErlang([this.tableToken, message]));
|
|
}
|
|
|
|
_GGS.prototype.serverLog = function(message) {
|
|
callErlang("'error_logger info_msg " + escapeErlang([message]) + "'");
|
|
}
|
|
|
|
function escapeErlang(args) {
|
|
var str = JSON.stringify(args);
|
|
str = str.replace("'", "\\\'");
|
|
return str;
|
|
}
|
|
|
|
function Player(token) {
|
|
|
|
var playerToken = token;
|
|
this.__defineGetter__("id", function() {
|
|
return playerToken;
|
|
});
|
|
|
|
return {
|
|
sendCommand: function(command, args) {
|
|
ejsLog("/tmp/ggs-test.txt", "'ggs_table send_command " + escapeErlang([GGS.tableToken+ "", playerToken, command, args])+"'");
|
|
//callErlang("'ggs_table send_command " + escapeErlang([GGS.tableToken+ "", playerToken, command, args]) + "'");
|
|
ejsLog("/tmp/ggs-test.txt", "done");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
// ------------ Player stuff -------------
|
|
// TODO: remove this later on
|
|
|
|
function playerCommand(player, command, args) {
|
|
switch(command) {
|
|
case "greet":
|
|
player.sendCommand("notification", "Welcome on our server!");
|
|
var new_nick = args;
|
|
if(validNick(new_nick)) {
|
|
newNick(new_nick);
|
|
GGS.sendCommandToAll("joined", new_nick);
|
|
}
|
|
break;
|
|
case "chat":
|
|
GGS.sendCommandToAll("chat", args);
|
|
break;
|
|
case "uname":
|
|
player.sendCommand("notice", callErlang("os cmd [\"uname -a\"]"))
|
|
break;
|
|
case "lplayers":
|
|
listUsers(player);
|
|
break;
|
|
case "nick":
|
|
if(validNick(new_nick)) {
|
|
newNick(new_nick);
|
|
GGS.sendCommandToAll("nickchange", old_nick + "," + nicks[player.id]);
|
|
}
|
|
break;
|
|
default:
|
|
player.sendCommand("error", "Command not found");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function validNick(new_nick) {
|
|
if(new_nick.lastIndexOf(",") != -1) {
|
|
player.sendCommand("error", "Mallformed nick " + new_nick);
|
|
return false;
|
|
}
|
|
|
|
var nicks_s = GGS.localStorage("nicks");
|
|
var nicks = {};
|
|
if(nicks_s != "") { // if not the first player
|
|
nicks = JSON.parse(nicks_s);
|
|
}
|
|
for (var id in nicks) {
|
|
if (nicks[id] == new_nick) {
|
|
player.sendCommand("error", "Nick " + new_nick + " is already taken");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
function newNick(new_nick) {
|
|
var nicks_s = GGS.localStorage("nicks");
|
|
var nicks = {};
|
|
if(nicks_s != "") { // if not the first player
|
|
nicks = JSON.parse(nicks_s);
|
|
}
|
|
|
|
nicks[player.id] = new_nick;
|
|
old_nick = nicks[player.id];
|
|
GGS.localStorage.setItem("nicks", JSON.stringify(nicks));
|
|
}
|
|
|
|
function listUsers(player) {
|
|
var nicks = JSON.parse(GGS.localStorage.getItem("nicks"));
|
|
var nicks_a = [];
|
|
for(var id in nicks) {
|
|
nicks_a.push(nicks[id])
|
|
}
|
|
player.sendCommand("nicklist", nicks_a.join(","));
|
|
}
|
|
*/ |