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