@krp-races/krp-sharedmemory-client
Version:
A node.js wrapper for shared memory plugin in kart racing pro.
181 lines (177 loc) • 6.23 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var EventEmitter = require('events');
var binding = require('./binding.js');
var enums_GameState = require('./enums/GameState.js');
var enums_ChallengeSessionType = require('./enums/ChallengeSessionType.js');
var enums_CommunicationOffence = require('./enums/CommunicationOffence.js');
var enums_CommunicationPenaltyType = require('./enums/CommunicationPenaltyType.js');
var enums_CommunicationReason = require('./enums/CommunicationReason.js');
var enums_CommunicationType = require('./enums/CommunicationType.js');
var enums_DriveType = require('./enums/DriveType.js');
var enums_EngineCooling = require('./enums/EngineCooling.js');
var enums_EntryState = require('./enums/EntryState.js');
var enums_EventType = require('./enums/EventType.js');
var enums_PracticeSessionState = require('./enums/PracticeSessionState.js');
var enums_RaceSessionState = require('./enums/RaceSessionState.js');
var enums_RaceSessionType = require('./enums/RaceSessionType.js');
var enums_TrackSegmentType = require('./enums/TrackSegmentType.js');
var enums_WeatherCondition = require('./enums/WeatherCondition.js');
require('module');
class KRPSharedMemoryClient extends EventEmitter {
constructor(retryInterval = 5000, updateInterval = 100) {
super();
this.activated = false;
this.connected = false;
this.sequenceNumber = -1;
this.retryInterval = retryInterval;
this.updateInterval = updateInterval;
}
activate() {
this.activated = true;
this.emit('activated');
this.connect();
}
deactivate() {
this.activated = false;
this.emit('deactivated');
this.disconnect();
}
isActivated() {
return this.activated;
}
isConnected() {
return this.connected;
}
connect() {
if (!this.activated || this.connected)
return;
try {
binding.addon.connect();
if (!binding.addon.isConnected()) {
setTimeout(this.connect.bind(this), this.retryInterval);
return;
}
this.connected = true;
this.emit('connected');
this.update();
}
catch (e) {
if (e instanceof Error)
this.emit('error', e.message);
setTimeout(this.connect.bind(this), this.retryInterval);
}
}
disconnect() {
if (!this.connected)
return;
try {
binding.addon.disconnect();
}
catch (e) {
if (e instanceof Error)
this.emit('error', e.message);
}
this.sequenceNumber = -1;
this.connected = false;
this.emit('disconnected');
}
update() {
if (!this.connected)
return;
let data;
try {
data = binding.addon.read();
}
catch (e) {
if (e instanceof Error)
this.emit('error', e.message);
}
if (!data) {
this.disconnect();
this.connect();
return;
}
if (data.gameState === enums_GameState.EGameState.Closed) {
this.disconnect();
this.connect();
return;
}
if (data.sequenceNumber % 2 == 0 && this.sequenceNumber != data.sequenceNumber) {
this.sequenceNumber = data.sequenceNumber;
this.emit('update', data);
}
setTimeout(this.update.bind(this), this.updateInterval);
}
requestSpectateVehicle(id) {
if (!this.connected)
return;
binding.addon.requestSpectateVehicle(id);
}
requestCamera(id) {
if (!this.connected)
return;
binding.addon.requestCamera(id);
}
}
Object.defineProperty(exports, "EGameState", {
enumerable: true,
get: function () { return enums_GameState.EGameState; }
});
Object.defineProperty(exports, "EChallengeSessionType", {
enumerable: true,
get: function () { return enums_ChallengeSessionType.EChallengeSessionType; }
});
Object.defineProperty(exports, "ECommunicationOffence", {
enumerable: true,
get: function () { return enums_CommunicationOffence.ECommunicationOffence; }
});
Object.defineProperty(exports, "ECommunicationPenaltyType", {
enumerable: true,
get: function () { return enums_CommunicationPenaltyType.ECommunicationPenaltyType; }
});
Object.defineProperty(exports, "ECommunicationReason", {
enumerable: true,
get: function () { return enums_CommunicationReason.ECommunicationReason; }
});
Object.defineProperty(exports, "ECommunicationType", {
enumerable: true,
get: function () { return enums_CommunicationType.ECommunicationType; }
});
Object.defineProperty(exports, "EDriveType", {
enumerable: true,
get: function () { return enums_DriveType.EDriveType; }
});
Object.defineProperty(exports, "EEngineCooling", {
enumerable: true,
get: function () { return enums_EngineCooling.EEngineCooling; }
});
Object.defineProperty(exports, "EEntryState", {
enumerable: true,
get: function () { return enums_EntryState.EEntryState; }
});
Object.defineProperty(exports, "EEventType", {
enumerable: true,
get: function () { return enums_EventType.EEventType; }
});
Object.defineProperty(exports, "EPracticeSessionState", {
enumerable: true,
get: function () { return enums_PracticeSessionState.EPracticeSessionState; }
});
Object.defineProperty(exports, "ERaceSessionState", {
enumerable: true,
get: function () { return enums_RaceSessionState.ERaceSessionState; }
});
Object.defineProperty(exports, "ERaceSessionType", {
enumerable: true,
get: function () { return enums_RaceSessionType.ERaceSessionType; }
});
Object.defineProperty(exports, "ETrackSegmentType", {
enumerable: true,
get: function () { return enums_TrackSegmentType.ETrackSegmentType; }
});
Object.defineProperty(exports, "EWeatherCondition", {
enumerable: true,
get: function () { return enums_WeatherCondition.EWeatherCondition; }
});
exports.KRPSharedMemoryClient = KRPSharedMemoryClient;
exports.default = KRPSharedMemoryClient;