ps2census
Version:
Client to connect to the PS2 Event Stream websocket.
112 lines • 5.06 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.StreamHandler = void 0;
const formatters_1 = require("../utils/formatters");
const achievement_earned_event_1 = require("./events/achievement-earned.event");
const battle_rank_up_event_1 = require("./events/battle-rank-up.event");
const continent_lock_event_1 = require("./events/continent-lock.event");
const death_event_1 = require("./events/death.event");
const facility_control_event_1 = require("./events/facility-control.event");
const gain_experience_event_1 = require("./events/gain-experience.event");
const item_added_event_1 = require("./events/item-added.event");
const metagame_event_1 = require("./events/metagame.event");
const player_facility_capture_event_1 = require("./events/player-facility-capture.event");
const player_facility_defend_event_1 = require("./events/player-facility-defend.event");
const player_login_event_1 = require("./events/player-login.event");
const player_logout_event_1 = require("./events/player-logout.event");
const skill_added_event_1 = require("./events/skill-added.event");
const vehicle_destroy_event_1 = require("./events/vehicle-destroy.event");
const next_tick_1 = __importDefault(require("../utils/next-tick"));
class StreamHandler {
constructor(client, stream, filter) {
this.client = client;
this.stream = stream;
this.filter = filter;
this.prepareListeners();
}
prepareListeners() {
this.stream.on('message', msg => {
if ('service' in msg && msg.service === 'event') {
switch (msg.type) {
case 'serviceStateChanged':
this.handleServerStateChanged(msg);
break;
case 'serviceMessage':
if ('event_name' in msg.payload)
this.handleEvent(msg.payload);
break;
}
}
else if ('subscription' in msg) {
this.handleSubscription(msg.subscription);
}
});
}
handleEvent(event) {
const wrapped = this.wrapEvent(event);
if (!wrapped)
return;
if (!this.filter.filter(wrapped)) {
(0, next_tick_1.default)(() => {
this.client.emit('ps2Event', wrapped);
this.client.emit(wrapped.emit, wrapped);
});
}
else {
(0, next_tick_1.default)(() => {
this.client.emit('duplicate', wrapped);
});
}
}
handleSubscription(subscription) {
(0, next_tick_1.default)(() => {
this.client.emit('subscribed', subscription);
});
}
handleServerStateChanged(state) {
const id = state.detail.match(/\d+/)[0];
if (id) {
const online = (0, formatters_1.stringToBoolean)(state.online);
(0, next_tick_1.default)(() => {
this.client.emit('serviceState', id, online, state.detail);
});
}
}
wrapEvent(event) {
switch (event.event_name) {
case 'AchievementEarned':
return new achievement_earned_event_1.AchievementEarned(this.client, event);
case 'BattleRankUp':
return new battle_rank_up_event_1.BattleRankUp(this.client, event);
case 'ContinentLock':
return new continent_lock_event_1.ContinentLock(this.client, event);
case 'Death':
return new death_event_1.Death(this.client, event);
case 'FacilityControl':
return new facility_control_event_1.FacilityControl(this.client, event);
case 'GainExperience':
return new gain_experience_event_1.GainExperience(this.client, event);
case 'ItemAdded':
return new item_added_event_1.ItemAdded(this.client, event);
case 'MetagameEvent':
return new metagame_event_1.MetagameEvent(this.client, event);
case 'PlayerFacilityCapture':
return new player_facility_capture_event_1.PlayerFacilityCapture(this.client, event);
case 'PlayerFacilityDefend':
return new player_facility_defend_event_1.PlayerFacilityDefend(this.client, event);
case 'PlayerLogin':
return new player_login_event_1.PlayerLogin(this.client, event);
case 'PlayerLogout':
return new player_logout_event_1.PlayerLogout(this.client, event);
case 'SkillAdded':
return new skill_added_event_1.SkillAdded(this.client, event);
case 'VehicleDestroy':
return new vehicle_destroy_event_1.VehicleDestroy(this.client, event);
}
}
}
exports.StreamHandler = StreamHandler;
//# sourceMappingURL=stream.handler.js.map