Skip to content

Commit

Permalink
fix: Timing out sACN according to E1.31 specs
Browse files Browse the repository at this point in the history
  • Loading branch information
schw4rzlicht committed Jun 14, 2020
1 parent c14bdba commit ffdaf65
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 12 deletions.
14 changes: 8 additions & 6 deletions src/lib/permissions/SACNPermission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default class SACNPermission extends EventEmitter implements PermissionIn

if (sacn) {
let universe = this.universes[sacn.universe];
if (universe && universe.data[sacn.channel - 1] < 255) {
if (universe && (universe.status !== UniverseStatus.Valid || universe.data[sacn.channel - 1] < 255)) {
permissionCollector.denyPermission("sacn",
`@${runtimeInformation.userName}, ${runtimeInformation.config.sacn.lockMessage}`);
}
Expand Down Expand Up @@ -77,13 +77,15 @@ export default class SACNPermission extends EventEmitter implements PermissionIn

this.sACNReceiver.on("packet", (packet: Packet) => {

if (this.universes[packet.universe]) {
let universe = this.universes[packet.universe];

if (universe) {
let data = new Array(512).fill(0);
packet.slotsData.forEach((value, channel) => {
data[channel] = value;
});

this.universes[packet.universe].data = data;
universe.data = data;
}
});

Expand Down Expand Up @@ -121,15 +123,15 @@ export default class SACNPermission extends EventEmitter implements PermissionIn
}

if (lastValidTime <= universe.lastReceived &&
(universe.status == UniverseStatus.NeverReceived || universe.status == UniverseStatus.Expired)) {
(universe.watchdogStatus == UniverseStatus.NeverReceived || universe.watchdogStatus == UniverseStatus.Expired)) {

receiving.push(universe.universe);
universe.status = UniverseStatus.Valid;
universe.watchdogStatus = UniverseStatus.Valid;
}

if (lastValidTime > universe.lastReceived && universe.status == UniverseStatus.Valid) {
lost.push(universe.universe);
universe.status = UniverseStatus.Expired;
universe.watchdogStatus = UniverseStatus.Expired;
}
}

Expand Down
19 changes: 17 additions & 2 deletions src/lib/permissions/SACNUniverse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ export class SACNUniverse {
readonly universe: number;
private _data: Array<number>;
private _lastReceived: number;
status: UniverseStatus;
private _watchdogStatus: UniverseStatus;
private _status: UniverseStatus;

constructor(universe: number) {
this.universe = universe;
this._data = new Array<number>(512).fill(0);
this._lastReceived = 0;
this.status = UniverseStatus.NeverReceived;
this.watchdogStatus = UniverseStatus.NeverReceived;
}

get data(): Array<number> {
Expand All @@ -25,9 +26,23 @@ export class SACNUniverse {
set data(value: Array<number>) {
this._data = value;
this._lastReceived = new Date().getTime();
this._status = UniverseStatus.Valid;
}

get lastReceived(): number {
return this._lastReceived;
}

get watchdogStatus(): UniverseStatus {
return this._watchdogStatus;
}

set watchdogStatus(value: UniverseStatus) {
this._watchdogStatus = value;
this._status = value;
}

get status(): UniverseStatus {
return this._status;
}
}
8 changes: 4 additions & 4 deletions src/resources/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,15 @@
},
"timeout": {
"description": "Time until sACN is considered lost.",
"type": "integer",
"minimum": 1,
"default": 1
"type": "number",
"minimum": 0.5,
"default": 2.5
}
},
"additionalProperties": false,
"default": {
"lockMessage": "{command} is currently locked! Please wait!",
"timeout": 1
"timeout": 2.5
}
},
"commands": {
Expand Down

0 comments on commit ffdaf65

Please sign in to comment.