75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
import * as ws from './lib/ws.js';
|
|
import * as db from './lib/db.js';
|
|
|
|
let myWs = ws.init({ port: process.env.WEB_SOCKET_PORT });
|
|
let myDb = db.init(process.env.MONGO_CONN_STR);
|
|
|
|
|
|
/*
|
|
const mongo = new MongoClient(process.env.MONGO_CONN_STR);
|
|
const db = mongo.db();
|
|
const collections = {};
|
|
|
|
const wss = new WebSocketServer({ port: 7130 });
|
|
const connections = [];
|
|
const subscriptions = [];
|
|
|
|
async function executeSet(message, ws) {
|
|
let subject = collections[message.subject];
|
|
if (!subject) {
|
|
subject = collections[message.subject] = db.collection(message.subject);
|
|
}
|
|
let newValue = {$set: {}};
|
|
newValue.$set[message.field + '.modifiedAt'] = Date.now();
|
|
newValue.$set[message.field + '.modifiedBy'] = 'anonymous';
|
|
newValue.$set[message.field + '.transientValue'] = message.value;
|
|
|
|
await subject.updateMany(message.filter, newValue, { upsert: true })
|
|
}
|
|
|
|
wss.on('connection', function connection(ws) {
|
|
connections.push(ws);
|
|
console.log('accepted new connection');
|
|
|
|
ws.on('error', console.error);
|
|
ws.on('close', e => {
|
|
console.log('closed a connection');
|
|
connections.splice(connections.indexOf(ws), 1);
|
|
});
|
|
|
|
ws.on('message', function message(data, isBinary) {
|
|
console.log('received a new message');
|
|
|
|
try {
|
|
let message = JSON.parse(data);
|
|
console.log('message action is ' + message.action);
|
|
|
|
switch (message.action) {
|
|
case 'set':
|
|
executeSet(message, ws).catch(console.error);
|
|
break;
|
|
case 'subscribe':
|
|
let subject = collections[message.subject];
|
|
if (!subject) {
|
|
subject = collections[message.subject] = db.collection(message.subject);
|
|
}
|
|
subject.find(message.filter, {}).toArray().then(r => {
|
|
ws.send(JSON.stringify({
|
|
subject: message.subject,
|
|
field: message.field,
|
|
filter: message.filter,
|
|
value: r.map(v => v[message.field])
|
|
}));
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
} catch (e) {
|
|
console.error('error while processing message', e);
|
|
ws.send(JSON.stringify(e));
|
|
}
|
|
});
|
|
|
|
});
|
|
*/ |