wechaty-grpc
Version:
gRPC for Wechaty
83 lines • 3.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable sort-keys */
const util_1 = __importDefault(require("util"));
const mod_js_1 = require("../src/mod.js");
const puppet_server_impl_js_1 = require("../tests/puppet-server-impl.js");
let eventStream;
/**
* Huan(202003): gRPC Wait for Ready Semantics
* https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md
*/
const dingQueue = [];
/**
* Implements the SayHello RPC method.
*/
const puppetServerExample = {
...puppet_server_impl_js_1.puppetServerImpl,
event: (streammingCall) => {
console.info('event(streamingCall)');
if (eventStream) {
console.info('event() end old eventStream to accept the new one.');
eventStream.end();
eventStream = streammingCall;
}
eventStream = streammingCall;
while (dingQueue.length > 0) {
const data = dingQueue.shift();
const eventResponse = new mod_js_1.puppet.EventResponse();
eventResponse.setType(mod_js_1.puppet.EventType.EVENT_TYPE_DONG);
eventResponse.setPayload(data);
eventStream.write(eventResponse);
}
/**
* Detect if Inexor Core is gone (GRPC disconnects)
* https://github.com/grpc/grpc/issues/8117#issuecomment-362198092
*/
eventStream.on('cancelled', () => {
console.info('eventStream.on(calcelled)');
eventStream?.end();
eventStream = undefined;
});
},
ding: (call, callback) => {
const data = call.request.getData();
console.info(`ding(${data})`);
console.info('metadata:', call.metadata.getMap());
console.info('getPeer:', call.getPeer());
console.info('getDeadLine:', call.getDeadline());
// console.info('getDeadLine:', call.)
if (!eventStream) {
dingQueue.push(data);
}
else {
const eventResponse = new mod_js_1.puppet.EventResponse();
eventResponse.setType(mod_js_1.puppet.EventType.EVENT_TYPE_DONG);
eventResponse.setPayload(data);
eventStream.write(eventResponse);
}
callback(null, new mod_js_1.puppet.DingResponse());
},
};
/**
* Starts an RPC server that receives requests for the Greeter service at the
* sample server port
*/
async function main() {
const server = new mod_js_1.grpc.Server();
server.addService(mod_js_1.puppet.PuppetService, puppetServerExample);
const serverBindPromise = util_1.default.promisify(server.bindAsync.bind(server));
const port = await serverBindPromise('127.0.0.1:8788', mod_js_1.grpc.ServerCredentials.createInsecure());
console.info('Listen on port:', port);
server.start();
return 0;
}
main()
.catch(e => {
console.error(e);
process.exit(1);
});
//# sourceMappingURL=server.js.map