diff --git a/example.js b/example.js index 9006a09..311c56d 100644 --- a/example.js +++ b/example.js @@ -1,4 +1,4 @@ -const tz = require('tz-parser'); +const meitrack = require('meitrack-parser'); const raw = new Buffer('$$A138,862170013556541,AAA,35,7.092076,79.960473,140412132808,A,10,9,57,275,1,14,5783799,7403612,413|1|F6E0|3933,0000,000B|0009||02D8|0122,*EE\r\n'); -const data = tz.parse(raw); +const data = meitrack.parse(raw); diff --git a/package.json b/package.json index a3f3455..de8465c 100644 --- a/package.json +++ b/package.json @@ -33,25 +33,20 @@ }, "homepage": "https://github.com/lgaticaq/meitrack-parser#readme", "dependencies": { - "bluebird": "^3.3.1", - "hiredis": "^0.4.1", "moment": "^2.11.2", - "node-geocoder": "^3.7.0", - "pad": "^1.0.0", - "redis-url": "^1.2.1" + "pad": "^1.0.0" }, "devDependencies": { - "babel-cli": "^6.5.1", - "babel-core": "^6.5.2", - "babel-preset-es2015": "^6.5.0", + "babel-cli": "^6.6.0", + "babel-core": "^6.6.0", + "babel-preset-es2015": "^6.6.0", "chai": "^3.5.0", - "eslint": "1.10.3", + "eslint": "2.2.0", "mocha": "^2.4.5", "rimraf": "^2.5.2" }, "eslintConfig": { "rules": { - "strict": 0, "indent": [ 2, 2 diff --git a/src/index.js b/src/index.js index 80eeab5..d148d88 100644 --- a/src/index.js +++ b/src/index.js @@ -2,11 +2,6 @@ import pad from 'pad'; import moment from 'moment'; -import redisUrl from 'redis-url'; -import nodeGeocoder from 'node-geocoder'; -import Promise from 'bluebird'; - -let client; const patterns = { mvt380: /^\$\$([\x41-\x7A])(\d{1,3}),(\d{15}),([0-9A-F]{3}),(\d{1,3}),([-]?\d+\.\d+),([-]?\d+\.\d+),(\d{12}),([AV]),(\d{1,3}),(\d{1,2}),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+(\.\d+)?),(\d+),(\d{3})\|(\d{1,3})\|([0-9A-F]{4})\|([0-9A-F]{4}),([0-9A-F]{4}),([0-9A-F]{1,4})?\|([0-9A-F]{1,4})?\|([0-9A-F]{1,4})?\|([0-9A-F]{1,4})\|([0-9A-F]{1,4}),([0-9A-F]{8})?,?([0-9A-F]+)?,?(\d{1,2})?,?([0-9A-F]{4})?,?([0-9A-F]{6})?\|?([0-9A-F]{6})?\|?([0-9A-F]{6})?\|?\*([0-9A-F]{2})\r\n$/ @@ -135,66 +130,16 @@ const getMvt380 = (raw) => { return data; }; -const setCache = (uri) => { - try { - client = redisUrl.connect(uri); - Promise.promisifyAll(Object.getPrototypeOf(client)); - } catch (err) { - throw err; - } -}; - -const getReverse = (lat, lon) => { - return new Promise((resolve, reject) => { - const geocoderProvider = 'google'; - const httpAdapter = 'http'; - const geocoder = nodeGeocoder(geocoderProvider, httpAdapter); - geocoder.reverse({lat: lat, lon: lon}).then(res => { - if (res.length === 0) resolve(null); - resolve(res[0].formattedAddress.split(',').map(x => x.trim()).slice(0, 2).join(', ')); - }).catch(reject); - }); -}; - -const getAddress = (lat, lng) => { - return new Promise((resolve, reject) => { - if (client) { - client.getAsync(`geocoder:${lat}:${lng}`).then(reply => { - if (reply) resolve(reply); - getReverse(lat, lng).then(address => { - if (!address) resolve(null); - client.set(`geocoder:${lat}:${lng}`, address); - resolve(address); - }).catch(reject); - }).catch(reject); - } else { - getReverse(lat, lng).then(resolve).catch(reject); - } - }); -}; - const parse = (raw) => { - return new Promise((resolve) => { - let result = {type: 'UNKNOWN', raw: raw.toString()}; - if (patterns.mvt380.test(raw.toString())) { - result = getMvt380(raw); - const [lng, lat] = result.loc.coordinates; - getAddress(lat, lng).then(address => { - result.address = address; - resolve(result); - }).catch(() => { - resolve(result); - }); - } - resolve(result); - return result; - }); + let result = {type: 'UNKNOWN', raw: raw.toString()}; + if (patterns.mvt380.test(raw.toString())) { + result = getMvt380(raw); + } + return result; }; module.exports = { parse: parse, patterns: patterns, - getMvt380: getMvt380, - setCache: setCache, - getAddress: getAddress + getMvt380: getMvt380 }; diff --git a/test/test.js b/test/test.js index 2c156b6..3a37ca0 100644 --- a/test/test.js +++ b/test/test.js @@ -5,50 +5,45 @@ import {expect} from 'chai'; describe('tz-parzer', () => { describe('parse', () => { - it('should return the raw data parsed', (done) => { + it('should return the raw data parsed', () => { const raw = new Buffer('$$A138,862170013556541,AAA,35,7.092076,79.960473,140412132808,A,10,9,57,275,1,14,5783799,7403612,413|1|F6E0|3933,0000,000B|0009||02D8|0122,*EE\r\n'); - parser.parse(raw).then(data => { - expect(data.raw).to.eql(raw.toString()); - expect(data.type).to.eql('MVT380'); - expect(data.imei).to.eql(862170013556541); - expect(data.command).to.eql('AAA'); - expect(data.event).to.eql('timeIntervalTracking'); - expect(data.loc.type).to.eql('Point'); - expect(data.loc.coordinates).to.eql([79.960473, 7.092076]); - expect(data.gpsSignal).to.eql('A'); - expect(data.satellites).to.eql(10); - expect(data.gsmSignal).to.eql(9); - expect(data.speed).to.eql(57); - expect(data.direction).to.eql(275); - expect(data.hdop).to.eql(1); - expect(data.altitude).to.eql(14); - expect(data.odometer).to.eql(5783799); - expect(data.runtime).to.eql(7403612); - expect(data.mcc).to.eql('413'); - expect(data.mnc).to.eql('1'); - expect(data.lac).to.eql(63200); - expect(data.ci).to.eql(14643); - expect(data.status.input['1']).to.be.false; - expect(data.status.input['2']).to.be.false; - expect(data.status.input['3']).to.be.false; - expect(data.status.input['4']).to.be.false; - expect(data.status.input['5']).to.be.false; - expect(data.status.input['6']).to.be.false; - expect(data.status.input['7']).to.be.false; - expect(data.status.input['8']).to.be.false; - expect(data.status.output['1']).to.be.false; - expect(data.status.output['2']).to.be.false; - expect(data.status.output['3']).to.be.false; - expect(data.status.output['4']).to.be.false; - expect(data.status.output['5']).to.be.false; - expect(data.status.output['6']).to.be.false; - expect(data.status.output['7']).to.be.false; - expect(data.status.output['8']).to.be.false; - done(); - }).catch(err => { - expect(err).to.be.undefined; - done(); - }); + const data = parser.parse(raw); + expect(data.raw).to.eql(raw.toString()); + expect(data.type).to.eql('MVT380'); + expect(data.imei).to.eql(862170013556541); + expect(data.command).to.eql('AAA'); + expect(data.event).to.eql('timeIntervalTracking'); + expect(data.loc.type).to.eql('Point'); + expect(data.loc.coordinates).to.eql([79.960473, 7.092076]); + expect(data.gpsSignal).to.eql('A'); + expect(data.satellites).to.eql(10); + expect(data.gsmSignal).to.eql(9); + expect(data.speed).to.eql(57); + expect(data.direction).to.eql(275); + expect(data.hdop).to.eql(1); + expect(data.altitude).to.eql(14); + expect(data.odometer).to.eql(5783799); + expect(data.runtime).to.eql(7403612); + expect(data.mcc).to.eql('413'); + expect(data.mnc).to.eql('1'); + expect(data.lac).to.eql(63200); + expect(data.ci).to.eql(14643); + expect(data.status.input['1']).to.be.false; + expect(data.status.input['2']).to.be.false; + expect(data.status.input['3']).to.be.false; + expect(data.status.input['4']).to.be.false; + expect(data.status.input['5']).to.be.false; + expect(data.status.input['6']).to.be.false; + expect(data.status.input['7']).to.be.false; + expect(data.status.input['8']).to.be.false; + expect(data.status.output['1']).to.be.false; + expect(data.status.output['2']).to.be.false; + expect(data.status.output['3']).to.be.false; + expect(data.status.output['4']).to.be.false; + expect(data.status.output['5']).to.be.false; + expect(data.status.output['6']).to.be.false; + expect(data.status.output['7']).to.be.false; + expect(data.status.output['8']).to.be.false; }); }); });