| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- var iolib = require('socket.io')
- , path = require("path")
- , fs = require('fs')
- , BoardData = require("./boardData.js").BoardData;
-
-
- var boards = {
- "anonymous" : {
- "data" : new BoardData(),
- }
- };
- var boardName = "anonymous";
-
- function startIO(app) {
- io = iolib.listen(app, {
- 'flash policy port' : -1 //Makes flashsocket work even if the server doesn't accept connection on any port
- });
- //Default configuration
- //io.enable('browser client minification'); // send minified client
- io.enable('browser client etag'); // apply etag caching logic based on version number
- io.enable('browser client gzip'); // gzip the file
- io.set('log level', 1); // reduce logging
-
- // enable all transports
- io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
-
- io.sockets.on('connection', socketConnection);
- return io;
- }
-
- function socketConnection (socket) {
-
- socket.on("getboard", function() {
- //Send all previously broadcasted data
- boards[boardName].data.getAll(function(data) {
- socket.emit("broadcast", data);
- });
- });
-
- socket.on('broadcast', function (data) {
- //Send data to all other connected users
- socket.broadcast.emit('broadcast', data);
-
- //Use setTimeout in order to be sure that the message is broadcasted
- // as soon as possible (before we do anything else on the server side)
- saveHistory(data);
- });
- }
-
- function saveHistory(message) {
- var id = message.id;
- var boardData = boards[boardName].data;
- switch (message.type) {
- case "delete":
- if (id) boardData.delete(id);
- break;
- case "update":
- delete message.type;
- if (id) boardData.update(id, message);
- break;
- case "child":
- boardData.addChild(message.parent, message);
- break;
- default: //Add data
- if (!id) console.error("Invalid message: ", message);
- else boardData.set(id, message);
- }
- }
-
- function generateUID (prefix, suffix) {
- var uid = Date.now().toString(36); //Create the uids in chronological order
- uid += (Math.round(Math.random()*36)).toString(36); //Add a random character at the end
- if (prefix) uid = prefix + uid;
- if (suffix) uid = uid + suffix;
- return uid;
- }
-
- if (exports) {
- exports.start = function(app) {
- boards[boardName].data.on("ready", function() {
- startIO(app);
- });
- };
- }
|