Skip to content

Commit 4be06bd

Browse files
committed
feat(bacnet-client): implement close function for BACstack and underlying UDP socket
1 parent a1df9d7 commit 4be06bd

8 files changed

Lines changed: 31 additions & 10 deletions

File tree

index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,5 +133,16 @@ module.exports = function(settings) {
133133
client.readPropertyMultiple(address, propertyIdAndArrayIndex, next);
134134
};
135135

136+
/**
137+
* Unloads the current BACstack instance and closes the underlying UDP socket.
138+
* @function bacstack.close
139+
* @example
140+
* var client = new bacnet();
141+
* client.close();
142+
*/
143+
self.close = function() {
144+
client.close();
145+
};
146+
136147
return self;
137148
};

lib/bacnet-client.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,9 @@ module.exports = function(settings) {
316316
};
317317

318318
transport.setHandler(receiveData);
319+
self.close = function() {
320+
transport.close();
321+
};
319322

320323
return self;
321324
};

lib/bacnet-transport.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,9 @@ module.exports = function(settings) {
3333
server.setBroadcast(true);
3434
});
3535

36+
self.close = function() {
37+
server.close();
38+
};
39+
3640
return self;
3741
};

test/integration/read-property-multiple.spec.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ var utils = require('./utils');
33

44
describe('bacstack - readPropertyMultiple integration', function() {
55
it('should return a timeout error if no device is available', function(next) {
6-
var client = utils.globalBacnetClient;
7-
this.timeout(5000);
6+
var client = new utils.bacnetClient({adpuTimeout: 200});
87
var requestArray = [
98
{objectIdentifier: {type: 8, instance: 4194303}, propertyReferences: [{propertyIdentifier: 8}]}
109
];
1110
client.readPropertyMultiple('127.0.0.1', requestArray, function(err, value) {
1211
expect(err).to.eql(new Error('ERR_TIMEOUT'));
1312
expect(value).to.eql(undefined);
13+
client.close();
1414
next();
1515
});
1616
});
@@ -49,6 +49,7 @@ describe('bacstack - readPropertyMultiple integration', function() {
4949
{value: {value: [0], bits_used: 1}, type: 8}
5050
]);
5151
expect(object[5102]).to.deep.equal([{value: 41, type: 9}]);
52+
client.close();
5253
next();
5354
});
5455
transport.handler(data, '127.0.0.1');
@@ -99,6 +100,7 @@ describe('bacstack - readPropertyMultiple integration', function() {
99100
expect(object[5103]).to.deep.equal([{value: '', type: 7}]);
100101
expect(object[5104]).to.deep.equal([{value: 0, type: 9}]);
101102
expect(object[5107]).to.deep.equal([{value: 1, type: 2}]);
103+
client.close();
102104
next();
103105
});
104106
transport.handler(data, '127.0.0.1');

test/integration/read-property.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ var utils = require('./utils');
33

44
describe('bacstack - readProperty integration', function() {
55
it('should return a timeout error if no device is available', function(next) {
6-
var client = utils.globalBacnetClient;
7-
this.timeout(5000);
6+
var client = new utils.bacnetClient({adpuTimeout: 200});
87
client.readProperty('127.0.0.1', 8, 44301, 28, null, function(err, value) {
98
expect(err).to.eql(new Error('ERR_TIMEOUT'));
109
expect(value).to.eql(undefined);
10+
client.close();
1111
next();
1212
});
1313
});

test/integration/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
var bacnet = require('../../');
22

33
module.exports.bacnetClient = bacnet;
4-
module.exports.globalBacnetClient = bacnet();
54

65
module.exports.transportStub = function() {
76
var self = this;
@@ -16,6 +15,7 @@ module.exports.transportStub = function() {
1615
return 1482;
1716
};
1817
self.send = function() {};
18+
self.close = function() {};
1919
return self;
2020
};
2121

test/integration/who-is.spec.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ var utils = require('./utils');
33

44
describe('bacstack - whoIs integration', function() {
55
it('should not invoke a event if no device is available', function(next) {
6-
var client = utils.globalBacnetClient;
7-
this.timeout(5000);
6+
var client = new utils.bacnetClient({adpuTimeout: 200});
87
client.on('iAm', function(address, deviceId, maxAdpu, segmentation, vendorId) {
8+
client.close();
99
next(new Erro('Unallowed Callback'));
1010
});
1111
setTimeout(function() {
12+
client.close();
1213
next();
13-
}, 3100);
14+
}, 300);
1415
client.whoIs();
1516
});
1617
});

test/integration/write-property.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ var utils = require('./utils');
33

44
describe('bacstack - writeProperty integration', function() {
55
it('should return a timeout error if no device is available', function(next) {
6-
var client = utils.globalBacnetClient;
7-
this.timeout(5000);
6+
var client = new utils.bacnetClient({adpuTimeout: 200});
87
client.writeProperty('127.0.0.1', 8, 44301, 28, 12, [{Tag: 4, Value: 100}], function(err, value) {
98
expect(err).to.eql(new Error('ERR_TIMEOUT'));
109
expect(value).to.eql(undefined);
10+
client.close();
1111
next();
1212
});
1313
});

0 commit comments

Comments
 (0)