@hmcts/media-viewer
Version:
123 lines • 15.2 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}`);
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==