Skip to content

Commit

Permalink
Add TCP support
Browse files Browse the repository at this point in the history
  • Loading branch information
NoahCallaway committed Aug 28, 2021
1 parent bf412db commit b8c4fa7
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 20 deletions.
18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ const TSL5 = require('./tsl-umd-v5')

var umd = new TSL5()

//Listening for tallies
//Listen for UDP tallies
umd.listenUDP(8900)

//Listen for TCP tallies
umd.listenTCP(9000)

umd.on('message', (msg) => {
console.log("Tally Received:", msg)
})
Expand All @@ -30,8 +33,11 @@ tally = {
"text": "Test Tally"
}
}
//Send UDP tally
umd.sendTallyUDP('192.168.X.X', 8900, tally)

umd.sendTallyUDP('192.168.X.X', 8900 ,tally)
//Send TCP tally
umd.sendTallyTCP('192.168.X.X', 9000, tally)
```

### Tally Values
Expand All @@ -42,3 +48,11 @@ umd.sendTallyUDP('192.168.X.X', 8900 ,tally)
| 1 | Red |
| 2 | Green |
| 3 | Amber |

### npm

- <https://www.npmjs.com/package/tsl-umd-v5>

### git

- <https://github.com/NoahCallaway/tsl-umd-v5>
77 changes: 62 additions & 15 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const dgram = require('dgram')
const net = require('net')
const debug = require('debug')('tsl-umd-v5')
const EventEmitter = require('events');

Expand All @@ -16,30 +17,50 @@ class TSL5 extends EventEmitter {
}

listenUDP(port) {
this.server = dgram.createSocket('udp4')
this.server.bind(port)
var server = dgram.createSocket('udp4')
server.bind(port)

this.server.on('message',(msg, rinfo) => {
this.processTally(msg,rinfo)
debug('Message recieved: ', msg)
server.on('message',(msg, rinfo) => {
this.processTally(msg, rinfo.address)
debug('UDP Message recieved: ', msg)
})

this.server.on('listening', () => {
var address = this.server.address();
server.on('listening', () => {
var address = server.address();
debug(`server listening ${address.address}:${address.port}`);
});

this.server.on('error', (err) => {
debug('server error: ', err);
server.on('error', (err) => {
debug('UDP server error: ', err);
throw err;
});
}

processTally(data,rinfo) {
listenTCP(port) {
var server = net.createServer((socket) => {

socket.on('data', (data) => {
this.processTally(data)
debug('TCP Message recieved: ', data)
})

socket.on('close', () => {
debug('TCP socket closed')
})

socket.on('error', (err) => {
debug('UDP server error: ', err);
throw err;
})
})
server.listen(port)
}

processTally(data, source) {
let buf = Buffer.from(data)
let tally = { display: {} }

tally.sender = rinfo.address
tally.sender = source ? source : undefined
tally.pbc = buf.readInt16LE(this._PBC)
tally.ver = buf.readInt8(this._VER)
tally.flags = buf.readInt8(this._VER)
Expand All @@ -56,7 +77,7 @@ class TSL5 extends EventEmitter {
tally.display.reserved = (tally.control >> 8 & 0b1111111);
tally.display.control_data = (tally.control >> 15 & 0b1);

this.emit('message',tally)
this.emit('message', tally)
}

constructPacket(tally) {
Expand Down Expand Up @@ -105,21 +126,47 @@ class TSL5 extends EventEmitter {
}
let msg = this.constructPacket(tally)

let client = dgram.createSocket('udp4');
let client = dgram.createSocket('udp4')

client.send(msg, port, ip, function(error) {
if (error) {
debug('Error sending TSL 5 UDP tally:', error)
} else {
debug('TSL 5 UDP Data sent.');
debug('TSL 5 UDP Data sent.')
}
client.close();
client.close()
});
}
catch (error) {
debug('Error sending TSL 5 UDP tally:', error);
}
}

sendTallyTCP(ip, port, tally) {
try {
if (!ip | !port | !tally){
throw 'Missing Parameter from call sendTallyTCP()'
}
let msg = this.constructPacket(tally)

let client = new net.Socket()
client.connect(port, ip);

client.on('connect', () => {
client.write(msg)
client.end()
client.destroy()
debug('TSL 5 TCP Data sent.')

})
client.on('error', (error) => {
debug('Error sending TSL 5 TCP tally:', error)
})
}
catch (error) {
debug('Error sending TSL 5 TCP tally:', error);
}
}
}

module.exports = TSL5
7 changes: 6 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tsl-umd-v5",
"version": "1.0.2",
"version": "1.0.3",
"description": "TSL UMDv5 Protocol for Node.js",
"main": "index.js",
"scripts": {
Expand All @@ -16,7 +16,8 @@
],
"dependencies": {
"debug": "^4.3.2",
"dgram": "^1.0.1"
"dgram": "^1.0.1",
"net": "^1.0.2"
},
"repository": {
"type": "git",
Expand Down

0 comments on commit b8c4fa7

Please sign in to comment.