@hmcts/media-viewer
Version:
128 lines • 16.1 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, of, Subject } from 'rxjs';
import { IcpEvents } from './icp.events';
import * as i0 from "@angular/core";
export class SocketService {
constructor() {
this.connected$ = new BehaviorSubject(false);
this.sessionJoined$ = new Subject();
this.presenterUpdated$ = new Subject();
this.clientDisconnected$ = new Subject();
this.participantUpdated$ = new Subject();
this.newParticipantJoined$ = new Subject();
this.screenUpdated$ = new Subject();
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
connect(url, session) {
const socketUrl = new URL(url);
socketUrl.searchParams.append('sessionId', `${session.sessionId}`);
socketUrl.searchParams.append('caseId', `${session.caseId}`);
socketUrl.searchParams.append('documentId', `${session.documentId}`);
this.subscription = this.getSocketClient(socketUrl.toString()).subscribe((socket) => {
socket.onopen = (event) => {
this.connected$.next(true);
};
socket.onmessage = (event) => {
console.log('onmessage');
const eventData = JSON.parse(event.data);
if (eventData.data && eventData.data.eventName) {
this.messageEventHandller(eventData.data.eventName, eventData.data.data);
}
};
socket.onerror = (event) => {
console.log('onerror');
};
socket.onclose = (event) => {
console.log('onclose');
};
});
}
connected() {
return this.connected$.asObservable();
}
join(session) {
this.emit(IcpEvents.SESSION_JOIN, session);
}
leave(session) {
this.emit(IcpEvents.SESSION_LEAVE, session);
this.subscription.unsubscribe();
}
emit(event, data) {
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
this.socket.send(JSON.stringify({
type: 'event',
event,
data
}));
}
else {
console.warn('WebSocket is not open. Ready state is:', this.socket ? this.socket.readyState : 'no socket');
}
}
listen(event) {
switch (event) {
case IcpEvents.SESSION_JOINED: {
return this.sessionJoined$.asObservable();
}
case IcpEvents.PRESENTER_UPDATED: {
return this.presenterUpdated$.asObservable();
}
case IcpEvents.CLIENT_DISCONNECTED: {
return this.clientDisconnected$.asObservable();
}
case IcpEvents.PARTICIPANTS_UPDATED: {
return this.participantUpdated$.asObservable();
}
case IcpEvents.NEW_PARTICIPANT_JOINED: {
return this.newParticipantJoined$.asObservable();
}
case IcpEvents.SCREEN_UPDATED: {
return this.screenUpdated$.asObservable();
}
default: {
break;
}
}
}
messageEventHandller(eventName, data) {
switch (eventName) {
case IcpEvents.SESSION_JOINED: {
this.sessionJoined$.next(data);
break;
}
case IcpEvents.PRESENTER_UPDATED: {
this.presenterUpdated$.next(data);
break;
}
case IcpEvents.CLIENT_DISCONNECTED: {
this.clientDisconnected$.next();
break;
}
case IcpEvents.PARTICIPANTS_UPDATED: {
this.participantUpdated$.next(data);
break;
}
case IcpEvents.NEW_PARTICIPANT_JOINED: {
this.newParticipantJoined$.next();
break;
}
case IcpEvents.SCREEN_UPDATED: {
this.screenUpdated$.next(data);
break;
}
}
}
getSocketClient(url) {
this.socket = new WebSocket(url, 'json.webpubsub.azure.v1');
return of(this.socket);
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SocketService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SocketService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9pY3Avc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFvQixFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUl6QyxNQUFNLE9BQU8sYUFBYTtJQVl4QjtRQVJBLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzFDLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDMUMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFckIsQ0FBQztJQUVqQixXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVcsRUFBRSxPQUFtQjtRQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNuRSxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMs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UixDQUFDO1lBQ0QsS0FBSyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztrSUFsSVUsYUFBYTtzSUFBYixhQUFhLGNBREEsTUFBTTs7NEZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEljcEV2ZW50cyB9IGZyb20gJy4vaWNwLmV2ZW50cyc7XG5pbXBvcnQgeyBJY3BQYXJ0aWNpcGFudCwgSWNwU2Vzc2lvbiB9IGZyb20gJy4vaWNwLmludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFNvY2tldFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgc29ja2V0OiBXZWJTb2NrZXQ7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHNlc3Npb25Kb2luZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJlc2VudGVyVXBkYXRlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjbGllbnREaXNjb25uZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcGFydGljaXBhbnRVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIG5ld1BhcnRpY2lwYW50Sm9pbmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHNjcmVlblVwZGF0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBjb25uZWN0KHVybDogc3RyaW5nLCBzZXNzaW9uOiBJY3BTZXNzaW9uKSB7XG4gICAgY29uc3Qgc29ja2V0VXJsID0gbmV3IFVSTCh1cmwpO1xuICAgIHNvY2tldFVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKCdzZXNzaW9uSWQnLCBgJHtzZXNzaW9uLnNlc3Npb25JZH1gKTtcbiAgICBzb2NrZXRVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgnY2FzZUlkJywgYCR7c2Vzc2lvbi5jYXNlSWR9YCk7XG4gICAgc29ja2V0VXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2RvY3VtZW50SWQnLCBgJHtzZXNzaW9uLmRvY3VtZW50SWR9YCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdldFNvY2tldENsaWVudChzb2NrZXRVcmwudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChzb2NrZXQ6IFdlYlNvY2tldCkgPT4ge1xuXG4gICAgICBzb2NrZXQub25vcGVuID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb25tZXNzYWdlJyk7XG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgIGlmIChldmVudERhdGEuZGF0YSAmJiBldmVudERhdGEuZGF0YS5ldmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VFdmVudEhhbmRsbGVyKGV2ZW50RGF0YS5kYXRhLmV2ZW50TmFtZSwgZXZlbnREYXRhLmRhdGEuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb25lcnJvcicpO1xuICAgICAgfTtcblxuICAgICAgc29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ29uY2xvc2UnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25uZWN0ZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGpvaW4oc2Vzc2lvbikge1xuICAgIHRoaXMuZW1pdChJY3BFdmVudHMuU0VTU0lPTl9KT0lOLCBzZXNzaW9uKTtcbiAgfVxuXG4gIGxlYXZlKHNlc3Npb24pIHtcbiAgICB0aGlzLmVtaXQoSWNwRXZlbnRzLlNFU1NJT05fTEVBVkUsIHNlc3Npb24pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBlbWl0KGV2ZW50OiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgIGlmICh0aGlzLnNvY2tldCAmJiB0aGlzLnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHR5cGU6ICdldmVudCcsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignV2ViU29ja2V0IGlzIG5vdCBvcGVuLiBSZWFkeSBzdGF0ZSBpczonLCB0aGlzLnNvY2tldCA/IHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgOiAnbm8gc29ja2V0Jyk7XG4gICAgfVxuICB9XG5cbiAgbGlzdGVuKGV2ZW50OiBJY3BFdmVudHMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgSWNwRXZlbnRzLlNFU1NJT05fSk9JTkVEOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25Kb2luZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuUFJFU0VOVEVSX1VQREFURUQ6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlc2VudGVyVXBkYXRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5DTElFTlRfRElTQ09OTkVDVEVEOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudERpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5QQVJUSUNJUEFOVFNfVVBEQVRFRDoge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGFudFVwZGF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuTkVXX1BBUlRJQ0lQQU5UX0pPSU5FRDoge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdQYXJ0aWNpcGFudEpvaW5lZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5TQ1JFRU5fVVBEQVRFRDoge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5VcGRhdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWVzc2FnZUV2ZW50SGFuZGxsZXIoZXZlbnROYW1lOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgIHN3aXRjaCAoZXZlbnROYW1lKSB7XG4gICAgICBjYXNlIEljcEV2ZW50cy5TRVNTSU9OX0pPSU5FRDoge1xuICAgICAgICB0aGlzLnNlc3Npb25Kb2luZWQkLm5leHQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuUFJFU0VOVEVSX1VQREFURUQ6IHtcbiAgICAgICAgdGhpcy5wcmVzZW50ZXJVcGRhdGVkJC5uZXh0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgSWNwRXZlbnRzLkNMSUVOVF9ESVNDT05ORUNURUQ6IHtcbiAgICAgICAgdGhpcy5jbGllbnREaXNjb25uZWN0ZWQkLm5leHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5QQVJUSUNJUEFOVFNfVVBEQVRFRDoge1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50VXBkYXRlZCQubmV4dChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5ORVdfUEFSVElDSVBBTlRfSk9JTkVEOiB7XG4gICAgICAgIHRoaXMubmV3UGFydGljaXBhbnRKb2luZWQkLm5leHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5TQ1JFRU5fVVBEQVRFRDoge1xuICAgICAgICB0aGlzLnNjcmVlblVwZGF0ZWQkLm5leHQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFNvY2tldENsaWVudCh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8V2ViU29ja2V0PiB7XG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCwgJ2pzb24ud2VicHVic3ViLmF6dXJlLnYxJyk7XG4gICAgcmV0dXJuIG9mKHRoaXMuc29ja2V0KTtcbiAgfVxufVxuIl19