mirror of https://github.com/OpenVidu/openvidu.git
openvidu-testapp: allow removing instances entirely
parent
96b0a255f6
commit
2bea0979a7
|
|
@ -67,6 +67,9 @@
|
||||||
<button class="disconnect-btn" (click)="disconnectRoom()" title="Disconnect room">
|
<button class="disconnect-btn" (click)="disconnectRoom()" title="Disconnect room">
|
||||||
<mat-icon aria-label="Disconnect button">clear</mat-icon>
|
<mat-icon aria-label="Disconnect button">clear</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
<button class="remove-instance-btn" (click)="remove.emit()" title="Remove instance">
|
||||||
|
<mat-icon aria-label="Remove instance button">delete</mat-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</mat-card-header>
|
</mat-card-header>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,11 @@
|
||||||
import { Component, HostListener, Input, inject } from '@angular/core';
|
import {
|
||||||
|
Component,
|
||||||
|
EventEmitter,
|
||||||
|
HostListener,
|
||||||
|
Input,
|
||||||
|
Output,
|
||||||
|
inject,
|
||||||
|
} from '@angular/core';
|
||||||
import { NgClass, KeyValuePipe } from '@angular/common';
|
import { NgClass, KeyValuePipe } from '@angular/common';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
|
|
||||||
|
|
@ -79,6 +86,9 @@ export class OpenviduInstanceComponent {
|
||||||
@Input()
|
@Input()
|
||||||
index: number;
|
index: number;
|
||||||
|
|
||||||
|
@Output()
|
||||||
|
remove = new EventEmitter<void>();
|
||||||
|
|
||||||
room?: Room;
|
room?: Room;
|
||||||
roomEvents: Map<RoomEvent, Boolean> = new Map<RoomEvent, boolean>();
|
roomEvents: Map<RoomEvent, Boolean> = new Map<RoomEvent, boolean>();
|
||||||
participantEvents: Map<ParticipantEvent, boolean> = new Map<ParticipantEvent, boolean>();
|
participantEvents: Map<ParticipantEvent, boolean> = new Map<ParticipantEvent, boolean>();
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="instance-div">
|
<div class="instance-div">
|
||||||
@for (user of users; track user; let i = $index) {
|
@for (user of users; track user.uid) {
|
||||||
<app-openvidu-instance @fadeAnimation [attr.id]="'openvidu-instance-' + i" [roomConf]="user" [index]="i">
|
<app-openvidu-instance @fadeAnimation [attr.id]="'openvidu-instance-' + user.uid" [roomConf]="user" [index]="user.uid" (remove)="removeUserByUid(user.uid)">
|
||||||
</app-openvidu-instance>
|
</app-openvidu-instance>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import { OpenviduInstanceComponent } from '../openvidu-instance/openvidu-instanc
|
||||||
import stringify from 'json-stringify-safe';
|
import stringify from 'json-stringify-safe';
|
||||||
|
|
||||||
export interface RoomConf {
|
export interface RoomConf {
|
||||||
|
// Stable unique id for this instance
|
||||||
|
uid: number;
|
||||||
subscriber: boolean;
|
subscriber: boolean;
|
||||||
publisher: boolean;
|
publisher: boolean;
|
||||||
startSession: boolean;
|
startSession: boolean;
|
||||||
|
|
@ -36,6 +38,11 @@ export class TestSessionsComponent {
|
||||||
// OpenViduInstance collection
|
// OpenViduInstance collection
|
||||||
users: RoomConf[] = [];
|
users: RoomConf[] = [];
|
||||||
|
|
||||||
|
// Monotonic counter assigning a stable uid to each instance. Reset only on a
|
||||||
|
// full clear (removeAllUsers / loadScenario), never on individual removals, so
|
||||||
|
// uids are never reused while instances come and go.
|
||||||
|
private nextUid = 0;
|
||||||
|
|
||||||
numberParticipants = 2;
|
numberParticipants = 2;
|
||||||
autoJoin = false;
|
autoJoin = false;
|
||||||
|
|
||||||
|
|
@ -54,8 +61,12 @@ export class TestSessionsComponent {
|
||||||
this.eventsInfoSubscription.unsubscribe();
|
this.eventsInfoSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private pushUser(conf: Omit<RoomConf, 'uid'>): void {
|
||||||
|
this.users.push({ uid: this.nextUid++, ...conf });
|
||||||
|
}
|
||||||
|
|
||||||
addUser(): void {
|
addUser(): void {
|
||||||
this.users.push({
|
this.pushUser({
|
||||||
subscriber: true,
|
subscriber: true,
|
||||||
publisher: true,
|
publisher: true,
|
||||||
startSession: false,
|
startSession: false,
|
||||||
|
|
@ -66,13 +77,19 @@ export class TestSessionsComponent {
|
||||||
this.users.pop();
|
this.users.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove a single instance by its stable uid (emitted by its remove button).
|
||||||
|
removeUserByUid(uid: number): void {
|
||||||
|
this.users = this.users.filter((user) => user.uid !== uid);
|
||||||
|
}
|
||||||
|
|
||||||
removeAllUsers(): void {
|
removeAllUsers(): void {
|
||||||
this.users = [];
|
this.users = [];
|
||||||
|
this.nextUid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadSubsPubs(n: number): void {
|
private loadSubsPubs(n: number): void {
|
||||||
for (let i = 0; i < n; i++) {
|
for (let i = 0; i < n; i++) {
|
||||||
this.users.push({
|
this.pushUser({
|
||||||
subscriber: true,
|
subscriber: true,
|
||||||
publisher: true,
|
publisher: true,
|
||||||
startSession: this.autoJoin,
|
startSession: this.autoJoin,
|
||||||
|
|
@ -82,7 +99,7 @@ export class TestSessionsComponent {
|
||||||
|
|
||||||
private loadSubs(n: number): void {
|
private loadSubs(n: number): void {
|
||||||
for (let i = 0; i < n; i++) {
|
for (let i = 0; i < n; i++) {
|
||||||
this.users.push({
|
this.pushUser({
|
||||||
subscriber: true,
|
subscriber: true,
|
||||||
publisher: false,
|
publisher: false,
|
||||||
startSession: this.autoJoin,
|
startSession: this.autoJoin,
|
||||||
|
|
@ -92,7 +109,7 @@ export class TestSessionsComponent {
|
||||||
|
|
||||||
private loadPubs(n: number): void {
|
private loadPubs(n: number): void {
|
||||||
for (let i = 0; i < n; i++) {
|
for (let i = 0; i < n; i++) {
|
||||||
this.users.push({
|
this.pushUser({
|
||||||
subscriber: false,
|
subscriber: false,
|
||||||
publisher: true,
|
publisher: true,
|
||||||
startSession: this.autoJoin,
|
startSession: this.autoJoin,
|
||||||
|
|
@ -102,6 +119,7 @@ export class TestSessionsComponent {
|
||||||
|
|
||||||
loadScenario(subsPubs: number, pubs: number, subs: number): void {
|
loadScenario(subsPubs: number, pubs: number, subs: number): void {
|
||||||
this.users = [];
|
this.users = [];
|
||||||
|
this.nextUid = 0;
|
||||||
this.loadSubsPubs(subsPubs);
|
this.loadSubsPubs(subsPubs);
|
||||||
this.loadPubs(pubs);
|
this.loadPubs(pubs);
|
||||||
this.loadSubs(subs);
|
this.loadSubs(subs);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue