2014-03-04 16:31:52 +00:00
|
|
|
var connect = require("connect");
|
2014-03-09 21:22:37 +00:00
|
|
|
var io = require("socket.io");
|
2014-03-06 15:11:25 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
// Local library
|
2014-03-09 21:22:37 +00:00
|
|
|
var models = require("./models.js");
|
2014-03-06 15:11:25 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
module.exports = Server;
|
2014-03-06 15:11:25 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
function Server() {
|
|
|
|
this.sockets = false;
|
|
|
|
this.networks = new models.NetworkCollection;
|
|
|
|
}
|
2014-03-06 15:11:25 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
Server.prototype.listen = function(port) {
|
|
|
|
var self = this;
|
2014-03-06 15:11:25 +00:00
|
|
|
var http = connect()
|
|
|
|
.use(connect.static("client"))
|
|
|
|
.listen(port);
|
2014-03-07 03:18:53 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
this.sockets = io.listen(http).sockets;
|
|
|
|
this.sockets.on("connection", function(socket) {
|
2014-03-09 21:22:37 +00:00
|
|
|
socket.emit(
|
|
|
|
"event",
|
|
|
|
self.networks
|
|
|
|
);
|
2014-03-09 19:27:44 +00:00
|
|
|
socket.on(
|
|
|
|
"input",
|
|
|
|
function(input) {
|
|
|
|
handleUserInput.call(self, input);
|
|
|
|
}
|
|
|
|
);
|
2014-03-07 21:24:02 +00:00
|
|
|
});
|
2014-03-06 18:02:43 +00:00
|
|
|
|
2014-03-07 21:24:02 +00:00
|
|
|
return this;
|
|
|
|
};
|
2014-03-06 18:02:43 +00:00
|
|
|
|
2014-03-09 19:27:44 +00:00
|
|
|
function handleUserInput(input) {
|
2014-03-09 21:22:37 +00:00
|
|
|
var target = this.networks.find(input.id);
|
|
|
|
if (!target) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var argv = input.text.substr(1).split(" ");
|
|
|
|
var cmd = input.text.charAt(0) == "/" ? argv[0].toUpperCase()
|
|
|
|
: "";
|
|
|
|
|
|
|
|
switch (cmd) {
|
|
|
|
|
|
|
|
case "":
|
|
|
|
target.channel.get("messages").add(
|
2014-03-09 19:27:44 +00:00
|
|
|
new models.Message({user: "user", text: input.text})
|
|
|
|
);
|
2014-03-09 21:22:37 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case "CONNECT":
|
|
|
|
var network = new models.Network({
|
|
|
|
host: "irc.freenode.org",
|
|
|
|
connect: true
|
|
|
|
});
|
|
|
|
this.networks.add(network);
|
|
|
|
var messages = network.get("channels").at(0).get("messages");
|
|
|
|
messages.add(
|
|
|
|
new models.Message({text: "Connecting..."})
|
|
|
|
);
|
|
|
|
|
|
|
|
var self = this;
|
|
|
|
network.conn.addListener("raw", function(argv) {
|
|
|
|
messages.add(
|
|
|
|
new models.Message({user: argv.args[0], text: argv.args[1]})
|
|
|
|
);
|
|
|
|
self.sockets.emit(
|
|
|
|
"event",
|
|
|
|
self.networks
|
|
|
|
);
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
target.channel.get("messages").add(
|
|
|
|
new models.Message({text: "Command `/" + cmd + "` does not exist."})
|
2014-03-09 19:27:44 +00:00
|
|
|
);
|
2014-03-09 21:22:37 +00:00
|
|
|
break;
|
|
|
|
|
2014-03-09 19:27:44 +00:00
|
|
|
}
|
2014-03-09 21:22:37 +00:00
|
|
|
|
|
|
|
this.sockets.emit(
|
|
|
|
"event",
|
|
|
|
this.networks
|
|
|
|
);
|
2014-03-09 19:27:44 +00:00
|
|
|
}
|