const grpc = require("@grpc/grpc-js"); const PROTO_PATH = "../protos/serve_currenttime.proto"; const protoLoader = require("@grpc/proto-loader"); var utc = require("dayjs/plugin/utc"); const timezone = require("dayjs/plugin/timezone"); const dayjs = require("dayjs"); dayjs.extend(utc); dayjs.extend(timezone); const SERVE_CURRENTTIME_HOST = "localhost"; const SERVE_CURRENTTIME_PORT = 50000; const options = { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true, }; function getCurrentTime(request, callback) { const timezone = request.timezone; const now = dayjs().tz(timezone); callback(null, { hours: now.hour(), minutes: now.minute(), seconds: now.second(), milliseconds: now.millisecond(), formatted_time: now.format("YYYY-MM-DDTHH:mm:ss.SSS"), }); } function main() { var packageDefinition = protoLoader.loadSync(PROTO_PATH, options); const serveCurrentTimeProto = grpc.loadPackageDefinition(packageDefinition).serve_currenttime; const server = new grpc.Server(); server.addService(serveCurrentTimeProto.ServeCurrentTimeService.service, { getCurrentTime: getCurrentTime, }); server.bindAsync( `${SERVE_CURRENTTIME_HOST}:${SERVE_CURRENTTIME_PORT}`, grpc.ServerCredentials.createInsecure(), () => { console.log(`Starting server on ${SERVE_CURRENTTIME_HOST}:${SERVE_CURRENTTIME_PORT}`); server.start(); } ); } main();