@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
JavaScript
"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';