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