mirror of
https://github.com/wassname/HackFlowy.git
synced 2026-06-27 16:00:04 +08:00
170 lines
4.4 KiB
JavaScript
170 lines
4.4 KiB
JavaScript
var crypto = require('crypto')
|
|
, express = require('express')
|
|
, http = require('http')
|
|
, ObjectID = require('mongodb').ObjectID,
|
|
cookie = require('cookie');
|
|
|
|
var mongoose = require('mongoose');
|
|
var User = mongoose.model('User');
|
|
var Node = require('../models/Node.js');
|
|
|
|
var io = "uninitialized...";
|
|
var online = [];
|
|
var lastExchangeData = {};
|
|
var makeCommit = require("./makeCommit.js").makeCommit;
|
|
var getAndSendRevHistory = require("./revAlgorithm.js").getAndSendRevHistory;
|
|
|
|
var MessageQueue =require("./MessageQueue.js");
|
|
console.log("MessageQueue", MessageQueue);
|
|
|
|
var CURRENT_TIMESTAMP = Date.now();
|
|
|
|
module.exports = {
|
|
|
|
validateParArr: function(parId, parArr){
|
|
io.sockets.emit("VALIDATE", [parId, parArr]);
|
|
},
|
|
|
|
iterateQueue: MessageQueue.iterateQueue,
|
|
|
|
safeConnectToDB: function(){
|
|
var url = require("../config/config.js").DB_URL;
|
|
try { mongoose.connect(url); }
|
|
catch(err) { console.log("Error: Sign In to MongoLab") }
|
|
},
|
|
|
|
createSocket: function(server) {
|
|
io = require('socket.io').listen(server, {log: false});
|
|
io.sockets.on('connection', function(socket){
|
|
|
|
socket.AUTHOR = {}; //anonymous.
|
|
|
|
socket.on("logIn", function(data){
|
|
socket.AUTHOR = data;
|
|
attachLogInListeners(socket);
|
|
console.log("logIn + attachLogInListeners")
|
|
});
|
|
|
|
socket.on('nodeRequest', function(data){
|
|
console.log("NodeRequst, CURRENT_TIMESTAMP", CURRENT_TIMESTAMP);
|
|
var nodes = Node.findAndSocketSend(socket, CURRENT_TIMESTAMP); //finds, then sends through socket.
|
|
});
|
|
|
|
socket.on("revHistoryRequest", function(subRootId){
|
|
getAndSendRevHistory(subRootId, socket);
|
|
});
|
|
|
|
socket.on('disconnect', function(){
|
|
console.log("DISCONNECT", socket.CUR_ID);
|
|
if(!(socket.CUR_ID == undefined)){
|
|
io.sockets.emit("blurred", [socket.CUR_ID, null]);
|
|
}
|
|
})
|
|
|
|
});
|
|
|
|
},
|
|
setUpDB: function(){
|
|
Node.setUpDB();
|
|
//getTimeHash();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function attachLogInListeners(socket){
|
|
socket.on("COMMIT", function(){
|
|
makeCommit();
|
|
socket.emit("commitReceived");
|
|
});
|
|
|
|
//Used when a node is split...
|
|
//Maybe set CurID
|
|
socket.on("edit", function(data){
|
|
var id = data[0];
|
|
var newText = data[1];
|
|
console.log("\n\n\n\n edit received:" + newText);
|
|
Node.updateText(id, newText);
|
|
socket.broadcast.emit("edit", [id, newText]);
|
|
});
|
|
|
|
//This works for all ids except negative ids.
|
|
socket.on("editing", function(data){ //data=[id, Author.name]
|
|
console.log("EDITING received!");
|
|
console.log(data);
|
|
socket.broadcast.emit("editing", data);
|
|
socket.CUR_ID = data[0]; //(used for disconnecting on browserClose);
|
|
});
|
|
|
|
|
|
socket.on("blurred", function(data){
|
|
console.log("BLURRED , CUR_ID", socket.CUR_ID);
|
|
socket.broadcast.emit("blurred", data);
|
|
|
|
var id = data[0];
|
|
var text = data[1];
|
|
var author = data[2];
|
|
|
|
Node.updateText(id, text, author._id);
|
|
});
|
|
|
|
|
|
|
|
|
|
// ADD AUTHOR INFORMATION
|
|
// socket.on("transclude", function(data){
|
|
// var parId = data[0];
|
|
// var transcludeId = data[2];
|
|
// var newIndex = data[1];
|
|
// var now = Date.now();
|
|
// Node.updateParent(parId, transcludeId ,newIndex, now );
|
|
|
|
// });
|
|
|
|
|
|
var syncValidation = function(data, timestampData, queueData, emitData){
|
|
if(timestampData[1] != CURRENT_TIMESTAMP){
|
|
socket.emit("OFF_SYNC");
|
|
}
|
|
else{
|
|
CURRENT_TIMESTAMP = timestampData[0];
|
|
socket.broadcast.emit(emitData[0], emitData[1], CURRENT_TIMESTAMP);
|
|
MessageQueue.queueOrDo(queueData);
|
|
}
|
|
}
|
|
//maybe emit sooner...
|
|
//need to broadcast parentArray.
|
|
//timestampData=[CURRENT_TIMESTAMP, oldTime]
|
|
socket.on("newNode", function(data, timestampData){
|
|
var queueData = ['newNode', data, socket];
|
|
var emitData = ['newNode', data];
|
|
syncValidation(data, timestampData, queueData, emitData);
|
|
//(todo = set IDs on client (instead of negative Ids));
|
|
});
|
|
|
|
|
|
socket.on("removeNode", function(data, timestampData){
|
|
console.log("removeNode", data);
|
|
var queueData = ['removeNode', data, socket];
|
|
var emitData = ["removeNode", data];
|
|
syncValidation(data, timestampData, queueData, emitData);
|
|
});
|
|
|
|
socket.on("movedNode", function(data, timestampData){
|
|
var queueData = ['movedNode', data, socket];
|
|
var emitData = [ "movedNode", [data[0],data[2]] ];
|
|
syncValidation(data, timestampData, queueData, emitData);
|
|
});
|
|
|
|
}
|