lio-tdi-client
Version:
A client for LIO Traveller Data Interface (TDI) endpoints with caching support.
99 lines (76 loc) • 3.19 kB
Markdown
# lio-tdi-client
**A client for [LIO](https://www.trapezegroup.de/de/linienverkehr/details/betriebsleitsystem-itcs) Traveller Data Interface (TDI) endpoints with caching support.**
[](https://www.npmjs.com/package/lio-tdi-client)
[](https://travis-ci.org/derhuerst/lio-tdi-client)


[](https://gitter.im/derhuerst)
[](https://github.com/sponsors/derhuerst)
## Installation
```shell
npm install lio-tdi-client
```
## Usage
```js
// create a client
const createLioTdiClient = require('lio-tdi-client')
const endpoint = 'https://tdi.swu.de/tdinterface/'
const client = createLioTdiClient(endpoint)
// fetch stops as Buffer
const stopsBuf = await client.stops({asBuffer: true})
// decode stops Buffer
const {StopTdiArray} = require('lio-tdi-client/pbf').mhcc.app.dataprovider.model.tdiinterface.dstructs
console.log(StopTdiArray.decode(pbf, stopsBuf))
```
```js
{
stopTdiArray: [
{
duid: {low: 798, high: 14164742, unsigned: false},
lastModificationTimestamp: {low: 2034426655, high: 371, unsigned: false},
isDeleted: false,
number: {low: 2871, high: 0, unsigned: true},
shortName: 'GZAW',
longName: 'Günzburg Abz Wasserburg',
latitude: 174435185,
longitude: 36965635,
altitude: {low: 2147483646, high: 0, unsigned: true},
},
{
duid: {low: 799, high: 14164742, unsigned: false},
lastModificationTimestamp: {low: 2034426655, high: 371, unsigned: false},
isDeleted: false,
number: {low: 3466, high: 0, unsigned: true},
shortName: 'LEBS',
longName: 'Leipheim Bahnhofstraße',
latitude: 174416238,
longitude: 36784764,
altitude: {low: 2147483646, high: 0, unsigned: true},
},
// …
]
}
```
### Observing data changes
`lio-tdi-client` comes with a helper, which periodically polls `client.version()` to check if the endpoint's data version has changed. Use it to find out when to
```js
const observeDataVersion = require('lio-tdi-client/observe')
observeDataVersion(client, (err, version) => {
if (err) {
console.error(err)
return;
}
console.log('new data version', version)
// refetch actual data here, e.g. client.stops()
})
```
`observeDataVersion(client, opt = {}, cb)` takes an optional 2nd parameter `opt`, which overrides the following defaults:
```js
{
minInterval: 1_000, // start checking every 1s
factor: 2, // multiply interval whenever the version hasn't changed
maxInterval: 15_000, // always check at least every 15s
}
```
## Contributing
If you have a question or need support using `lio-tdi-client`, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, use [the issues page](https://github.com/derhuerst/lio-tdi-client/issues).