-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweb.js
More file actions
101 lines (94 loc) · 3.11 KB
/
web.js
File metadata and controls
101 lines (94 loc) · 3.11 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
// Requisites
var program = require('commander');
var dbAddress;
var WebSocketServer = require('ws').Server
, http = require('http')
, express = require('express')
, app = express()
, port = process.env.PORT || 5000;
// Define version/args
program
.version('0.5')
.option('-d, --db [value]', 'couchDB url')
.parse(process.argv);
// DB initialization
if(program.db) {
dbAddress = program.db;
} else {
dbAddress = "http://localhost:5984";
}
console.log("Connecting DB:" + dbAddress);
var nano = require('nano')(dbAddress);
var notjs = nano.use('notjs');
// Server listening
app.use(express.static(__dirname + '/'));
var server = http.createServer(app);
server.listen(port);
console.log('http server listening on %d', port);
// Websocket
var wss = new WebSocketServer({server: server});
console.log('websocket server created');
wss.on('connection', function(ws) {
console.log((new Date()) + " Connection accepted.");
ws.on('message', function(message) {
console.log("Received Message: " + message);
var received = JSON.parse(message);
switch(received.type)
{
case 'test':
ws.send("helloworld");
break;
case 'getUserByFb':
notjs.view('users', 'getUserByFBID', { key : received.payload.fbid }, function(err, body) {
if (!err) {
if(body.rows.length==0) {
notjs.insert({ type: "user", fbid: received.payload.fbid, name: received.payload.name }, function(err, body) {
if (!err) {
console.log((new Date()).toUTCString() + " :: user " + JSON.stringify(body.id) + " created!");
var answer = {"type":"userId","payload":{"id":body.id}};
console.log(JSON.stringify(answer));
ws.send(JSON.stringify(answer));
}
});
} else {
body.rows.forEach(function(doc) {
console.log((new Date()).toUTCString() + " :: user " + doc.value._id + " found!");
var answer = {"type":"userId","payload":{"id":doc.value._id}};
console.log(JSON.stringify(answer));
ws.send(JSON.stringify(answer));
});
}
} else { console.log(err);}
});
break;
case 'createSale':
notjs.insert({ type: "sale", date: (new Date()).toUTCString(), price: received.payload.price, product: received.payload.name, description: received.payload.description, seller: received.payload.seller }, function(err, body) {
if (!err) {
console.log((new Date()).toUTCString() + " :: sale " + body.id + " created!");
var answer = {"type":"saleId","payload":{"id":body.id}};
console.log(JSON.stringify(answer));
ws.send(JSON.stringify(answer));
}
});
break;
case 'getSalesOfUser':
notjs.view('sales', 'getSalesOfUser', {key : received.payload.seller }, function(err, body) {
if (!err) {
var answer = {"type":"sales","payload":{"sales":(new Array())}}
body.rows.forEach(function(doc) {
answer.payload.sales.push(doc);
});
console.log(JSON.stringify(answer));
ws.send(JSON.stringify(answer));
} else { console.log(err);}
});
break;
default:
console.log("Unknown message type");
ws.send(message);
}
});
ws.on('close', function(connection) {
console.log((new Date()) + " Disconnected");
});
});