Skip to content

Commit 14b890c

Browse files
BradfordMedeirosmarkmandel
authored andcommitted
Add close method to node client (agones-dev#748)
add close method to node sdk client
1 parent fe5450c commit 14b890c

3 files changed

Lines changed: 35 additions & 20 deletions

File tree

‎examples/nodejs-simple/src/index.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const AgonesSDK = require('agones');
22

3-
let agonesSDK = new AgonesSDK();
3+
const agonesSDK = new AgonesSDK();
44

5-
let connect = async function() {
5+
const connect = async function() {
66
agonesSDK.watchGameServer((result) => {
77
console.log('watch', result);
88
});
@@ -11,7 +11,7 @@ let connect = async function() {
1111
await agonesSDK.ready();
1212
await agonesSDK.setLabel("label", "labelValue");
1313
await agonesSDK.setAnnotation("annotation", "annotationValue");
14-
let result = await agonesSDK.getGameServer();
14+
const result = await agonesSDK.getGameServer();
1515
console.log('gameServer', result);
1616
setTimeout(() => {
1717
console.log('send health ping');
@@ -22,7 +22,7 @@ let connect = async function() {
2222
agonesSDK.shutdown();
2323
}, 4000);
2424
setTimeout(() => {
25-
process.exit();
25+
agonesSDK.close();
2626
}, 6000);
2727
} catch (error) {
2828
console.error(error);

‎sdks/nodejs/spec/agonesSDK.spec.js‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,11 @@ describe('agones', () => {
243243
}
244244
});
245245
});
246+
describe('close', () => {
247+
it('closes the client connection when called', async () => {
248+
spyOn(agonesSDK.client, 'close').and.callFake(()=>{});
249+
await agonesSDK.close();
250+
expect(agonesSDK.client.close).toHaveBeenCalled();
251+
});
252+
});
246253
});

‎sdks/nodejs/src/agonesSDK.js‎

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,18 @@ const services = require('../lib/sdk_grpc_pb');
66
class AgonesSDK {
77
constructor() {
88
this.client = new services.SDKClient('localhost:59357', grpc.credentials.createInsecure());
9+
this.healthStream = undefined;
10+
this.emitters = [];
11+
}
12+
async close(){
13+
if (this.healthStream !== undefined){
14+
this.healthStream.destroy()
15+
}
16+
this.emitters.forEach(emitter => emitter.call.cancel());
17+
this.client.close();
918
}
10-
1119
async ready() {
12-
let request = new messages.Empty();
20+
const request = new messages.Empty();
1321
return new Promise((resolve, reject) => {
1422
this.client.ready(request, (error, response) => {
1523
if (error) {
@@ -20,9 +28,8 @@ class AgonesSDK {
2028
});
2129
});
2230
}
23-
2431
async shutdown() {
25-
let request = new messages.Empty();
32+
const request = new messages.Empty();
2633
return new Promise((resolve, reject) => {
2734
this.client.shutdown(request, (error, response) => {
2835
if (error) {
@@ -33,19 +40,17 @@ class AgonesSDK {
3340
});
3441
});
3542
}
36-
3743
health() {
38-
if (!this.healthStream) {
44+
if (this.healthStream === undefined) {
3945
this.healthStream = this.client.health((error) => {
4046
// Ignore error as this can't be caught
4147
});
4248
}
43-
let request = new messages.Empty();
49+
const request = new messages.Empty();
4450
this.healthStream.write(request);
4551
}
46-
4752
async getGameServer() {
48-
let request = new messages.Empty();
53+
const request = new messages.Empty();
4954
return new Promise((resolve, reject) => {
5055
this.client.getGameServer(request, (error, response) => {
5156
if (error) {
@@ -56,17 +61,21 @@ class AgonesSDK {
5661
});
5762
});
5863
}
59-
6064
watchGameServer(callback) {
61-
let request = new messages.Empty();
62-
let emitter = this.client.watchGameServer(request);
65+
const request = new messages.Empty();
66+
const emitter = this.client.watchGameServer(request);
6367
emitter.on('data', (data) => {
6468
callback(data.toObject());
6569
});
70+
emitter.on('error', (error) => {
71+
if (error.code === grpc.status.CANCELLED) { // this happens when call is cancelled
72+
return;
73+
}
74+
})
75+
this.emitters.push(emitter);
6676
}
67-
6877
async setLabel(key, value) {
69-
let request = new messages.KeyValue();
78+
const request = new messages.KeyValue();
7079
request.setKey(key);
7180
request.setValue(value);
7281
return new Promise((resolve, reject) => {
@@ -79,9 +88,8 @@ class AgonesSDK {
7988
});
8089
});
8190
}
82-
8391
async setAnnotation(key, value) {
84-
let request = new messages.KeyValue();
92+
const request = new messages.KeyValue();
8593
request.setKey(key);
8694
request.setValue(value);
8795
return new Promise((resolve, reject) => {

0 commit comments

Comments
 (0)