klnodekb/js/tracker.js

204 lines
5.5 KiB
JavaScript

// Mongoose import
var mongoose = require('mongoose');
let Vehicle = require('../models/vehicle');
var getDate= new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
//var Parser = require("binary-parser").Parser;
const Net = require('net');
var prot=require('../js/bprotocolparser');
const { v4: uuidv4 } = require('uuid');
const { uint8array } = require('jszip/lib/support');
Date.prototype.toUnixTime = function() { return this.getTime()/1000|0 };
/*// Protocol parser
var trackParser=new Parser()
.int32("TID")
.int32("LAT")
.int32("LON")
.int32("ALT")
.int32("SPD")
.int32("HED")
// Protocol test
exports.testProt=function(buf)
{
console.log(trackParser.parse(buf));
}
*/
Date.prototype.toUnixTime = function() { return this.getTime()/1000|0 };
// Eszköz kiszolgálás
// Bejövő adatok rögzítése
function splitLines(t) { return t.split(/\r\n|\r|\n/); }
// Koordináták rögzítése deviceid alapján
exports.pushtelemetry=function(data,callback) {
//console.log("Coords: "+data);
// callback(null,"OK");
// if (gps.state.fix==="3D")
/*
track_id: String,
timestamp: String,
latitude: Number,
longitude: Number,
altitude: Number,
speed: Number
*/
let lat=(data.lat/10000000);
let lon=(data.lon/10000000);
let track={track_id:data.tid,timestamp: getDate, latitude:lat,longitude:lon,altitude:data.alt, speed:data.spd,heading:data.hed };
Vehicle.updateOne({device_id:data.did,newTrack_id:data.tid},{$push:{tracks:track}},function(err,upd){
if (err)
{
console.log("DB Err: "+err);
callback('DBERR',null);
// res.send("DB_ERR");
}else
{
if (upd.nModified===0)
{
console.log('device not Found: '+data.did);
//res.send({err: 'device not Found'});
callback('Device Not Found',null)
}
else
{
console.log('Track logged.');
//res.send({result: 'ok'});
callback(null,"OK");
}
}
})
};
// Új útvonal
exports.newTrack=function(deviceId,callback){
let trid=uuidv4();
Vehicle.updateOne({device_id:deviceId},{$set:{newTrack_id:trid}},function(err,upd){
if (err)
{
console.log("DB Err: "+err);
//res.send("DB_ERR");
callback('DB ERR',null);
}else
{
if (upd.nModified===0)
{
console.log('Device Not Found: '+deviceId);
//res.send({err: 'Not Found'});
callback('Device not found',null);
}
else
{
console.log('New Track: '+trid);
//res.send({newTrack_id: trid});
callback(null,trid);
}
}
})
}
// **** TCP SERVER **** //
const port = 8081;
// Create a new TCP server.
const server = new Net.Server();
// The server listens to a socket for a client to make a connection request.
// Think of a socket as an end point.
server.listen(port, function() {
console.log(`Tracker Server listening on socket localhost:${port}`);
});
// When a client requests a connection with the server, the server creates a new
// socket dedicated to that client.
server.on('connection', function(socket) {
console.log('A new connection has been established.');
// Now that a TCP connection has been established, the server can send data to
// the client by writing to its socket.
//socket.write('Hello, client.');
//var ma=moment().format('DD.MM.YYYY');
// The server can also receive data from the client by reading from its socket.
socket.on('data', function(chunk) {
var data= new TextEncoder("utf-8").encode("Seggem a fenék");
// logging.logAppend("SOCKET_LOG.",'TCP_SERVER',socket.remoteAddress,'nodekb','SOCKET_LOG');
console.log(`BINARY: ${chunk}`);
var r=prot.parsePacket(chunk);
console.log('cmd:'+ r.cmd);
console.log('PAYLOAD:'+ Buffer.from(r.payload).toString("hex"));
var p=prot.newPacket(0xAA,data);
socket.write(p);
console.log('PACK='+p.toString(16));
/* switch(data.cmd)
{
case 'NTRK':
tracker.newTrack(data.id,function(err,result){
if (err)
{
socket.write(JSON.stringify({
status: 1,
data: err
}));
}
else
{
socket.write(JSON.stringify({
status: 200,
data: result
}));
}
})
break;
case 'PTM':
tracker.pushtelemetry(data.data,function(err,result){
if (err)
{
socket.write(JSON.stringify({
status: 1,
data: err
}));
}
else
{
socket.write(JSON.stringify({
status: 200,
data: result
}));
}
})
break;
default:
socket.write(JSON.stringify({
status: 200,
data: "Cmd error"
}));
break;
}*/
});
// When the client requests to end the TCP connection with the server, the server
// ends the connection.
socket.on('end', function() {
console.log('Closing connection with the client');
});
// Don't forget to catch error, for your own sake.
socket.on('error', function(err) {
console.log(`Error: ${err}`);
});
});
// **** END OF TCP SERVER **** //