UI: Handle premature entity and alarm data updates from websocket.

This commit is contained in:
Igor Kulikov 2022-11-18 13:46:37 +02:00
parent a1c4d29e48
commit 0b825e8dc3
2 changed files with 30 additions and 2 deletions

View File

@ -62,6 +62,7 @@ export class AlarmDataSubscription {
private alarmDataCommand: AlarmDataCmd; private alarmDataCommand: AlarmDataCmd;
private pageData: PageData<AlarmData>; private pageData: PageData<AlarmData>;
private prematureUpdates: Array<Array<AlarmData>>;
private alarmIdToDataIndex: {[id: string]: number}; private alarmIdToDataIndex: {[id: string]: number};
private subsTw: SubscriptionTimewindow; private subsTw: SubscriptionTimewindow;
@ -136,9 +137,22 @@ export class AlarmDataSubscription {
this.subscriber.alarmData$.subscribe((alarmDataUpdate) => { this.subscriber.alarmData$.subscribe((alarmDataUpdate) => {
if (alarmDataUpdate.data) { if (alarmDataUpdate.data) {
this.onPageData(alarmDataUpdate.data, alarmDataUpdate.allowedEntities, alarmDataUpdate.totalEntities); this.onPageData(alarmDataUpdate.data, alarmDataUpdate.allowedEntities, alarmDataUpdate.totalEntities);
if (this.prematureUpdates) {
for (const update of this.prematureUpdates) {
this.onDataUpdate(update);
}
this.prematureUpdates = null;
}
} else if (alarmDataUpdate.update) { } else if (alarmDataUpdate.update) {
if (!this.pageData) {
if (!this.prematureUpdates) {
this.prematureUpdates = [];
}
this.prematureUpdates.push(alarmDataUpdate.update);
} else {
this.onDataUpdate(alarmDataUpdate.update); this.onDataUpdate(alarmDataUpdate.update);
} }
}
}); });
this.subscriber.subscribe(); this.subscriber.subscribe();

View File

@ -120,6 +120,7 @@ export class EntityDataSubscription {
private entityDataResolveSubject: Subject<EntityDataLoadResult>; private entityDataResolveSubject: Subject<EntityDataLoadResult>;
private pageData: PageData<EntityData>; private pageData: PageData<EntityData>;
private prematureUpdates: Array<Array<EntityData>>;
private data: Array<Array<DataSetHolder>>; private data: Array<Array<DataSetHolder>>;
private subsTw: SubscriptionTimewindow; private subsTw: SubscriptionTimewindow;
private latestTsOffset: number; private latestTsOffset: number;
@ -348,10 +349,23 @@ export class EntityDataSubscription {
(entityDataUpdate) => { (entityDataUpdate) => {
if (entityDataUpdate.data) { if (entityDataUpdate.data) {
this.onPageData(entityDataUpdate.data); this.onPageData(entityDataUpdate.data);
if (this.prematureUpdates) {
for (const update of this.prematureUpdates) {
this.onDataUpdate(update);
}
this.prematureUpdates = null;
}
} else if (entityDataUpdate.update) { } else if (entityDataUpdate.update) {
if (!this.pageData) {
if (!this.prematureUpdates) {
this.prematureUpdates = [];
}
this.prematureUpdates.push(entityDataUpdate.update);
} else {
this.onDataUpdate(entityDataUpdate.update); this.onDataUpdate(entityDataUpdate.update);
} }
} }
}
); );
this.subscriber.reconnect$.subscribe(() => { this.subscriber.reconnect$.subscribe(() => {