UNPKG

@hmcts/media-viewer

Version:
123 lines 15.2 kB
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}`); return 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) { this.socket.send(JSON.stringify({ type: 'event', event, data })); } 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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LENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7a0lBOUhVLGFBQWE7c0lBQWIsYUFBYSxjQURBLE1BQU07OzRGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY3BFdmVudHMgfSBmcm9tICcuL2ljcC5ldmVudHMnO1xuaW1wb3J0IHsgSWNwUGFydGljaXBhbnQsIEljcFNlc3Npb24gfSBmcm9tICcuL2ljcC5pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTb2NrZXRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHNvY2tldDogV2ViU29ja2V0O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBzZXNzaW9uSm9pbmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByZXNlbnRlclVwZGF0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY2xpZW50RGlzY29ubmVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHBhcnRpY2lwYW50VXBkYXRlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBuZXdQYXJ0aWNpcGFudEpvaW5lZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBzY3JlZW5VcGRhdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgY29ubmVjdCh1cmw6IHN0cmluZywgc2Vzc2lvbjogSWNwU2Vzc2lvbikge1xuICAgIGNvbnN0IHNvY2tldFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICBzb2NrZXRVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZCgnc2Vzc2lvbklkJywgYCR7c2Vzc2lvbi5zZXNzaW9uSWR9YCk7XG4gICAgc29ja2V0VXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2Nhc2VJZCcsIGAke3Nlc3Npb24uY2FzZUlkfWApO1xuICAgIHNvY2tldFVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKCdkb2N1bWVudElkJywgYCR7c2Vzc2lvbi5kb2N1bWVudElkfWApO1xuICAgIHJldHVybiB0aGlzLmdldFNvY2tldENsaWVudChzb2NrZXRVcmwudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChzb2NrZXQ6IFdlYlNvY2tldCkgPT4ge1xuXG4gICAgICBzb2NrZXQub25vcGVuID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb25tZXNzYWdlJyk7XG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgIGlmIChldmVudERhdGEuZGF0YSAmJiBldmVudERhdGEuZGF0YS5ldmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VFdmVudEhhbmRsbGVyKGV2ZW50RGF0YS5kYXRhLmV2ZW50TmFtZSwgZXZlbnREYXRhLmRhdGEuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnb25lcnJvcicpO1xuICAgICAgfTtcblxuICAgICAgc29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ29uY2xvc2UnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25uZWN0ZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGpvaW4oc2Vzc2lvbikge1xuICAgIHRoaXMuZW1pdChJY3BFdmVudHMuU0VTU0lPTl9KT0lOLCBzZXNzaW9uKTtcbiAgfVxuXG4gIGxlYXZlKHNlc3Npb24pIHtcbiAgICB0aGlzLmVtaXQoSWNwRXZlbnRzLlNFU1NJT05fTEVBVkUsIHNlc3Npb24pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBlbWl0KGV2ZW50OiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdHlwZTogJ2V2ZW50JyxcbiAgICAgIGV2ZW50LFxuICAgICAgZGF0YVxuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3RlbihldmVudDogSWNwRXZlbnRzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIEljcEV2ZW50cy5TRVNTSU9OX0pPSU5FRDoge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uSm9pbmVkJC5hc09ic2VydmFibGUoKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgSWNwRXZlbnRzLlBSRVNFTlRFUl9VUERBVEVEOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbnRlclVwZGF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuQ0xJRU5UX0RJU0NPTk5FQ1RFRDoge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnREaXNjb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuUEFSVElDSVBBTlRTX1VQREFURUQ6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRVcGRhdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgSWNwRXZlbnRzLk5FV19QQVJUSUNJUEFOVF9KT0lORUQ6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3UGFydGljaXBhbnRKb2luZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuU0NSRUVOX1VQREFURUQ6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVXBkYXRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1lc3NhZ2VFdmVudEhhbmRsbGVyKGV2ZW50TmFtZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGV2ZW50TmFtZSkge1xuICAgICAgY2FzZSBJY3BFdmVudHMuU0VTU0lPTl9KT0lORUQ6IHtcbiAgICAgICAgdGhpcy5zZXNzaW9uSm9pbmVkJC5uZXh0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgSWNwRXZlbnRzLlBSRVNFTlRFUl9VUERBVEVEOiB7XG4gICAgICAgIHRoaXMucHJlc2VudGVyVXBkYXRlZCQubmV4dChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEljcEV2ZW50cy5DTElFTlRfRElTQ09OTkVDVEVEOiB7XG4gICAgICAgIHRoaXMuY2xpZW50RGlzY29ubmVjdGVkJC5uZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuUEFSVElDSVBBTlRTX1VQREFURUQ6IHtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFVwZGF0ZWQkLm5leHQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuTkVXX1BBUlRJQ0lQQU5UX0pPSU5FRDoge1xuICAgICAgICB0aGlzLm5ld1BhcnRpY2lwYW50Sm9pbmVkJC5uZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJY3BFdmVudHMuU0NSRUVOX1VQREFURUQ6IHtcbiAgICAgICAgdGhpcy5zY3JlZW5VcGRhdGVkJC5uZXh0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRTb2NrZXRDbGllbnQodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFdlYlNvY2tldD4ge1xuICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwsICdqc29uLndlYnB1YnN1Yi5henVyZS52MScpO1xuICAgIHJldHVybiBvZih0aGlzLnNvY2tldCk7XG4gIH1cbn1cbiJdfQ==