diff --git a/config/socketio.js b/config/socketio.js index a498e5d..3896b14 100644 --- a/config/socketio.js +++ b/config/socketio.js @@ -7,6 +7,7 @@ var EnslClient = require("../lib/ensl/client"); var chatController = require("../lib/chat/controller"); var gatherController = require("../lib/gather/controller"); var userController = require("../lib/user/controller"); +var eventController = require("../lib/event/controller"); var usersHelper = require("../lib/user/helper"); var env = process.env.NODE_ENV || "development"; var parseCookies = EnslClient.parseCookies; @@ -65,4 +66,5 @@ module.exports = io => { userController(rootNamespace); chatController(rootNamespace); gatherController(rootNamespace); + eventController(rootNamespace); }; diff --git a/lib/event/controller.js b/lib/event/controller.js new file mode 100644 index 0000000..b951c17 --- /dev/null +++ b/lib/event/controller.js @@ -0,0 +1,21 @@ +/* + * Events Controller + * + * Server API + * event:append - New event to be added to history + * + */ + +const winston = require("winston"); +const pubsub = require("./pubsub.js"); + +module.exports = namespace => { + pubsub.on("newEvent", event => { + if (!event.public) return; + namespace.emit("event:append", { + type: event.type, + description: event.description, + createdAt: event.createdAt + }) + }); +}; diff --git a/lib/event/pubsub.js b/lib/event/pubsub.js new file mode 100644 index 0000000..716681b --- /dev/null +++ b/lib/event/pubsub.js @@ -0,0 +1,3 @@ +const EventEmitter = require("events").EventEmitter; + +module.exports = new EventEmitter(); diff --git a/lib/gather/controller.js b/lib/gather/controller.js index dbe4d94..6102338 100644 --- a/lib/gather/controller.js +++ b/lib/gather/controller.js @@ -22,6 +22,7 @@ var Server = require("./server"); var mongoose = require("mongoose"); var Gather = require("./gather_singleton"); var ArchivedGather = mongoose.model("ArchivedGather"); +var Event = mongoose.model("Event"); var _ = require("lodash"); var winston = require("winston"); @@ -83,7 +84,7 @@ module.exports = function (namespace) { socket.on("gather:join", function (data) { let gather = Gather.current; if (gather.can("addGatherer")) gather.addGatherer(socket._user); - winston.info("Gather Joiner", JSON.stringify(socket._user)); + Event.joiner(socket._user); refreshGather(); }); @@ -99,7 +100,7 @@ module.exports = function (namespace) { let gather = Gather.current; if (gather.can("removeGatherer")) gather.removeGatherer(user); if (user.cooldown) gather.applyCooldown(user); - winston.info("Gather Leaver", JSON.stringify(user)); + Event.leaver(socket._user); refreshGather(); } diff --git a/lib/react/event.jsx b/lib/react/event.jsx new file mode 100644 index 0000000..3205ff1 --- /dev/null +++ b/lib/react/event.jsx @@ -0,0 +1,38 @@ +const Events = React.createClass({ + propTypes: { + events: React.PropTypes.array.isRequired + }, + + getTime(timeString) { + return (new Date(timeString)).toTimeString().match(/^[\d:]*/)[0]; + }, + + render() { + let events; + if (this.props.events.length) { + events = this.props.events.map(event => { + return ( + + {this.getTime(event.createdAt)} + {event.description} + + ); + }); + } else { + events = Listening for new events... + } + + return ( +
+
+ Recent Events +
+ + + {events} + +
+
+ ); + } +}); diff --git a/lib/react/main.jsx b/lib/react/main.jsx index 6a1b1d2..0db7ab9 100644 --- a/lib/react/main.jsx +++ b/lib/react/main.jsx @@ -10,7 +10,8 @@ var App = React.createClass({ } return { - updateTitle: updateTitle + updateTitle: updateTitle, + events: [] }; }, @@ -83,6 +84,15 @@ var App = React.createClass({ } }); + socket.on('event:append', data => { + console.log(data) + let events = self.state.events; + events.unshift(data); + self.setState({ + events: events.slice(0, 20) + }); + }); + socket.on('users:update', data => self.setProps({ users: data.users, @@ -185,6 +195,8 @@ var App = React.createClass({ +