UNPKG

@pureweb/platform-streaming-agent

Version:

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

97 lines (96 loc) 4.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessagingServer = 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 MessagingServer { constructor(agent) { this.handlePrivateMessage = (data, call) => this.handleMessage(data, call); this.handleBroadcastMessage = (data, call) => this.handleMessage(data, call); this.handleMessage = (data, call) => { const incomingMessage = new sidecar_pb_1.IncomingMessage(); incomingMessage.setMessageid(data.messageId); incomingMessage.setTimestamp(data.timestamp); const message = new sidecar_pb_1.Message(); message.setType(data.type); message.setPayload(data.payload); incomingMessage.setMessage(message); const agent = new sidecar_pb_1.Agent(); agent.setId(data.senderId); incomingMessage.setSender(agent); call.write(incomingMessage, (error) => { if (error) { Log_1.default.error('Failed to write message'); } }); }; this.agent = agent; } sendBroadcastMessage(call, callback) { const response = new sidecar_pb_1.SendBroadcastMessageResponse(); const data = call.request; if (data.hasMessage()) { const message = data.getMessage(); this.agent.sendMessage(message.getType(), message.getPayload()); callback(null, response); } else { callback({ code: grpc_js_1.status.INVALID_ARGUMENT, details: 'No message data received', metadata: call.metadata }, null); } } sendDirectMessage(call, callback) { const data = call.request; if (!data.hasReceiver()) { callback({ code: grpc_js_1.status.INVALID_ARGUMENT, details: 'No agent specified to receive direct message', metadata: call.metadata }, null); } else if (!data.hasMessage()) { callback({ code: grpc_js_1.status.INVALID_ARGUMENT, details: 'No message data received', metadata: call.metadata }, null); } const response = new sidecar_pb_1.SendDirectMessageResponse(); const message = data.getMessage(); const receiver = data.getReceiver(); const remoteAgent = new platform_sdk_1.RemoteAgent(receiver.getId()); this.agent.sendMessage(message.getType(), message.getPayload(), remoteAgent); callback(null, response); } subscribe(call) { const subscription = call.request; const type = subscription.getType(); const privateHandler = this.handlePrivateMessage; const broadcastHandler = this.handleBroadcastMessage; if (type == sidecar_pb_1.MessagingSubscription.SubscriptionType.PRIVATE) { this.agent.subscribeToMessages(platform_sdk_1.MessageTypes.PRIVATE, { privateMessage: (data) => privateHandler(data, call) }); } else if (type == sidecar_pb_1.MessagingSubscription.SubscriptionType.BROADCAST) { this.agent.subscribeToMessages(platform_sdk_1.MessageTypes.BROADCAST, { broadcastMessage: (data) => broadcastHandler(data, call) }); } else if (type == sidecar_pb_1.MessagingSubscription.SubscriptionType.ALL) { this.agent.subscribeToMessages(platform_sdk_1.MessageTypes.ALL, { privateMessage: (data) => privateHandler(data, call), broadcastMessage: (data) => broadcastHandler(data, call) }); } } } exports.MessagingServer = MessagingServer;