-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
125 lines (109 loc) · 3.68 KB
/
app.js
File metadata and controls
125 lines (109 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* Module dependencies.
*/
var express = require('express'),
routes = require('./routes'),
config = require('./config')
var all_items_raw = config.init_news,
all_items = {}, ts_base = 0.001;
var _ = require('underscore');
var overResult = [];
function gg() {
return (new Date()).getTime();
}
for (var i = 0; i < all_items_raw.length; i++) {
all_items[(gg() + ts_base).toString()] = all_items_raw[i];
ts_base += 0.001; // to make the key unique
}
var app = module.exports = express.createServer();
// Configuration
app.configure(function() {
app.set('adminpass', config.adminpass);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
app.configure('production', function() {
app.use(express.errorHandler());
});
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
// Routes
app.get('/', routes.index);
var io = require('socket.io').listen(app);
app.listen( port, ipaddress, function() {
console.log((new Date()) + ' Server is listening on port 8080');
});
io.sockets.on('connection', function(socket) {
socket.on('valjson', function(d) {
resultSet = compare(d.msg, d.msg1);
overResult = [];
io.sockets.socket(socket.id).emit('resultjson', resultSet);
});
function compare(src, chk) {
var check = filter(chk, null);
overResult = [];
var source = filter(src, null);
var a = filterSort(source);
var b = filterSort(check);
var j = _.sortBy(_.union(checkDiff(a, b), checkDiff(b, a)), function() {
return this.tag;
});
return j;
}
function checkDiff(loacala, localb) {
_.each(loacala, function(loca) {
localb = _.reject(localb, function(num) {
return (num.tag == loca.tag && num.type == loca.type && num.parent == loca.parent);
});
});
return localb;
}
function filterSort(obj) {
var parentDetails = [];
_.each(_.groupBy(obj, function(details) {
return details.parent;
}), function(data) {
var uniqueTags = _.uniq(data, function(par) {
return par.tag;
});
parentDetails.push(uniqueTags);
});
return _.flatten(parentDetails);
}
function filter(obj1, objDetails) {
_.each(obj1, function(key, value) {
var detailsList = setDetails(obj1, value, objDetails);
overResult.push(detailsList);
if (detailsList.type == "Array" && obj1[value].length > 0) {
for (var i = 0; i < obj1[value].length; i++) {
var typeNow = Object.prototype.toString.call(obj1[value][0]).slice(8, -1);
if (typeNow == "Array" || typeNow == "Object") {
filter(obj1[value][i], value);
}
}
} else if (detailsList.type == "Object") {
filter(obj1[value], value);
}
});
return overResult;
}
function setDetails(obj, value, objDetails) {
var result = {};
result.tag = value;
result.isNul = _.isNull(obj[value]);
result.parent = objDetails;
result.type = Object.prototype.toString.call(obj[value]).slice(8, -1);
return result;
}
});
console.log("Express server listening on port 8080");