UNPKG

@pureweb/platform-streaming-agent

Version:

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

91 lines (90 loc) 3.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PresenceServer = void 0; const grpc_js_1 = require("@grpc/grpc-js"); const sidecar_pb_1 = require("./proto/sidecar_pb"); const platform_sdk_1 = require("@pureweb/platform-sdk"); const Log_1 = __importDefault(require("../../Log")); class PresenceServer { constructor(agent) { this.agent = agent; } getRemoteAgents(call, callback) { const agentList = new sidecar_pb_1.AgentList(); let error = null; this.agent .getRemoteAgents() .then((data) => { data.forEach((item) => { const agent = new sidecar_pb_1.Agent(); agent.setId(item); agentList.addAgents(agent); }); }) .catch((reason) => { Log_1.default.error('Failed to get remote agents'); Log_1.default.error(reason); error = { code: grpc_js_1.status.ABORTED, details: `Failed to get remote agents: ${reason}`, metadata: call.metadata }; }) .finally(() => { callback(error, agentList); }); } subscribe(call) { const subscription = call.request; const subscriptionType = subscription.getType(); let type; switch (subscriptionType) { case sidecar_pb_1.PresenceEvent.PresenceType.ARRIVAL: type = platform_sdk_1.PresenceTypes.ARRIVAL; break; case sidecar_pb_1.PresenceEvent.PresenceType.DEPARTURE: type = platform_sdk_1.PresenceTypes.DEPARTURE; break; default: case sidecar_pb_1.PresenceEvent.PresenceType.ALL: type = platform_sdk_1.PresenceTypes.ALL; break; } this.agent.subscribeToPresence(type, { arrivals: (data) => { this.handlePresenceEvent(data, call); }, departures: (data) => { this.handlePresenceEvent(data, call); } }); } handlePresenceEvent(data, call) { const event = new sidecar_pb_1.PresenceEvent(); const agent = new sidecar_pb_1.Agent(); agent.setId(data.agentId); event.setAgent(agent); let type; switch (data.type) { case platform_sdk_1.PresenceTypes.ARRIVAL: type = sidecar_pb_1.PresenceEvent.PresenceType.ARRIVAL; break; case platform_sdk_1.PresenceTypes.DEPARTURE: type = sidecar_pb_1.PresenceEvent.PresenceType.DEPARTURE; break; default: Log_1.default.error('Unexpected presence type'); return; } event.setType(type); call.write(event, (error) => { if (error) { Log_1.default.error('Failed to write presence event: ' + error.message); } }); } } exports.PresenceServer = PresenceServer;