Better model constructors

This commit is contained in:
Mattias Erming 2014-03-06 14:36:56 -08:00
parent 3acb7402be
commit ccba766dbe
3 changed files with 88 additions and 56 deletions

10
app.js
View File

@ -1,11 +1,13 @@
var argv = require("commander") var commander = require("commander")
var listen = require("./lib/server.js").listen;
var argv = commander
.option("-p, --port <n>", "port to use", parseInt) .option("-p, --port <n>", "port to use", parseInt)
.parse(process.argv); .parse(process.argv);
PORT = 80; // Default port. PORT = 80; // Default port
if (argv.port) { if (argv.port) {
PORT = argv.port; PORT = argv.port;
} }
// Run the server. listen(PORT);
(require("./lib/server.js")).listen(PORT);

View File

@ -3,40 +3,55 @@ var _ = require("lodash");
var models = exports; var models = exports;
var id = 0; var id = 0;
models.Network = function() { models.Network = function(attr) {
this.id = id++; attr = attr || {};
this.address = ""; _.extend(this, _.defaults(attr, {
this.nick = ""; id: id++,
this.channels = []; address: "",
nick: "",
channels: []
}));
}; };
models.Network.prototype.toJSON = function() { models.Network.prototype.toJSON = function() {
return _.omit(this, "irc"); return _.omit(this, "client");
}; };
models.Channel = function() { models.Channel = function(attr) {
this.id = id++; attr = attr || {};
this.name = ""; _.extend(this, _.defaults(attr, {
this.type = "channel"; id: id++,
this.topic = ""; name: "",
this.users = []; type: "channel",
this.messages = []; topic: "",
users: [],
messages: []
}));
}; };
models.User = function() { models.User = function(attr) {
this.id = id++; attr = attr || {};
this.name = ""; _.extend(this, _.defaults(attr, {
id: id++,
name: ""
}));
}; };
models.Message = function() { models.Message = function(attr) {
this.text = ""; attr = attr || {};
this.time = ""; _.extend(this, _.defaults(attr, {
this.user = ""; text: "",
time: "",
user: ""
}));
}; };
models.Event = function() { models.Event = function(attr) {
this.action = ""; attr = attr || {};
this.data = ""; _.extend(this, _.defaults(attr, {
this.target = ""; action: "",
this.type = ""; data: "",
target: "",
type: ""
}));
}; };

View File

@ -35,7 +35,7 @@ function refresh() {
if (typeof sockets === "undefined") { if (typeof sockets === "undefined") {
return; return;
} }
sockets.emit("event", _.assign(new models.Event, { sockets.emit("event", new models.Event({
action: "refresh", action: "refresh",
data: networks data: networks
})); }));
@ -50,23 +50,32 @@ function handleUserInput(input) {
} }
var args = text.substr(1).split(" "); var args = text.substr(1).split(" ");
switch (args[0]) { var cmd = args[0].toUpperCase();
case "connect":
if (typeof args[1] !== "undefined") { switch (cmd) {
case "SERVER":
case "CONNECT":
if (args[1]) {
addNetwork(args[1], true); addNetwork(args[1], true);
} }
break; break;
case "join": case "JOIN":
if (typeof args[1] === "undefined") { if (args[1]) {
return;
}
target.network.channels.push( target.network.channels.push(
_.assign(new models.Channel, { new models.Channel({
name: args[1] name: args[1]
}) })
); );
refresh(); refresh();
}
break;
case "PART":
target.network.channels =
_.without(target.network.channels, target.channel);
refresh();
break; break;
default: default:
@ -75,28 +84,34 @@ function handleUserInput(input) {
"Command '/" + args[0] + "' does not exist." "Command '/" + args[0] + "' does not exist."
); );
break; break;
} }
} }
function addNetwork(addr, bool) { function addNetwork(addr, bool) {
bool = bool || false; bool = bool || false;
var chan = _.assign(new models.Channel, {name: addr, type: "network"}); var chan = new models.Channel({
var network = _.assign( name: addr,
new models.Network, {channels: [chan]} type: "network"
);
if (bool) {
network.irc = new irc.Client(addr, "default_user", {
channels: ["#default_channel"]
}); });
network.irc.addListener("raw", function() { var network = new models.Network({
handleEvent.apply(this, [network].concat(arguments)); channels: [chan]
}); });
}
networks.push(network); networks.push(network);
refresh(); refresh();
if (addr == "Lobby") {
return;
}
network.client = new irc.Client(addr, "default_user");
network.client.addListener("raw", function() {
handleEvent(
network, arguments
);
});
} }
function handleEvent(network) { function handleEvent(network) {
@ -111,9 +126,9 @@ function handleEvent(network) {
} }
function addMessage(target, text) { function addMessage(target, text) {
var message = _.assign(new models.Message, {text: text}); var message = _.extend(new models.Message, {text: text});
target.channel.messages.push(message); target.channel.messages.push(message);
sockets.emit("event", _.assign(new models.Event, { sockets.emit("event", new models.Event({
action: "add", action: "add",
type: "message", type: "message",
target: target.channel.id, target: target.channel.id,