UNPKG

@pureweb/platform-streaming-agent

Version:

The PureWeb platform streaming agent enables your game to communicate and stream through the PureWeb Platform

79 lines (78 loc) 3.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SidecarService = void 0; const grpc_js_1 = require("@grpc/grpc-js"); const sidecar_grpc_pb_1 = require("./proto/sidecar_grpc_pb"); const EnvironmentServer_1 = require("./EnvironmentServer"); const MessagingServer_1 = require("./MessagingServer"); const PresenceServer_1 = require("./PresenceServer"); const StorageServer_1 = require("./StorageServer"); const ConnectionStates_1 = require("../../ConnectionStates"); const Log_1 = __importDefault(require("../../Log")); class SidecarService { constructor(agent, port, connectionTimeout, heartRate) { this.start = async () => { this.environmentServer = new EnvironmentServer_1.EnvironmentServer(this.agent, this.heartRate, this.connectionTimeout); this.environmentServer.onStateChanged(this.connectionStateChanges.bind(this)); this.messagingServer = new MessagingServer_1.MessagingServer(this.agent); this.presenceServer = new PresenceServer_1.PresenceServer(this.agent); this.storageServer = new StorageServer_1.StorageServer(this.agent); this.server.addService(sidecar_grpc_pb_1.EnvironmentService, this.environmentServer); this.server.addService(sidecar_grpc_pb_1.MessagingService, this.messagingServer); this.server.addService(sidecar_grpc_pb_1.PresenceService, this.presenceServer); this.server.addService(sidecar_grpc_pb_1.StorageService, this.storageServer); return new Promise((resolve, reject) => { const sidecarAddress = SidecarService.SERVER_ADDRESS + ':' + this.port; this.server.bindAsync(sidecarAddress, grpc_js_1.ServerCredentials.createInsecure(), (error) => { if (!error) { this.server.start(); resolve(true); } else { Log_1.default.debug(error); Log_1.default.error(`Sidecar server failed to connect to port ${sidecarAddress}.`); reject(`Sidecar port ${sidecarAddress} might be in use`); } }); }); }; this.stop = () => { if (this.server) { this.server.forceShutdown(); } }; this.agent = agent; this.port = port; this.server = new grpc_js_1.Server(); this.heartRate = heartRate; this.connectionTimeout = connectionTimeout; } onStateChanged(handler) { this.connectionStateChange = handler; } connectionStateChanges(state) { if (state === ConnectionStates_1.ConnectionStates.GRPC_CONNECTED) { Log_1.default.info('gRPC client connected'); } else if (state === ConnectionStates_1.ConnectionStates.GRPC_TIMEOUT) { Log_1.default.info('gRPC server timeout waiting for connection'); } else if (state === ConnectionStates_1.ConnectionStates.GRPC_DISCONNECTED) { Log_1.default.info('gRPC client disconnected'); } else { Log_1.default.warn('Unknown connection state detected'); } if (this.connectionStateChange) { this.connectionStateChange(state); } } get isConnected() { return (this.server && this.environmentServer && this.environmentServer.currentStatus === ConnectionStates_1.ConnectionStates.GRPC_CONNECTED); } } exports.SidecarService = SidecarService; SidecarService.SERVER_ADDRESS = '0.0.0.0';