import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map, take, takeWhile } from 'rxjs/operators'; import { ProtocolService } from '@ucap-webmessenger/protocol'; import { SyncBuddyRequest, SyncBuddyResponse, SyncBuddyDataResponse, encodeSyncBuddy, decodeSyncBuddyData, decodeSyncBuddy, decodeSyncBuddyDataDetail } from '../models/buddy'; import { SVC_TYPE_SYNC_BUDDY, SSVC_TYPE_SYNC_BUDDY_REQ, SSVC_TYPE_SYNC_BUDDY_RES, SSVC_TYPE_SYNC_BUDDY_DATA, SSVC_TYPE_SYNC_BUDDY2_REQ, SSVC_TYPE_SYNC_BUDDY2_RES, SSVC_TYPE_SYNC_BUDDY2_DATA, SVC_TYPE_SYNC_GROUP, SSVC_TYPE_SYNC_GROUP_REQ, SSVC_TYPE_SYNC_GROUP_RES, SSVC_TYPE_SYNC_GROUP_DATA, SSVC_TYPE_SYNC_GROUP_REQ2, SSVC_TYPE_SYNC_GROUP_RES2, SSVC_TYPE_SYNC_GROUP_DATA2, SVC_TYPE_SYNC_ROOM, SSVC_TYPE_SYNC_ROOM_REQ, SSVC_TYPE_SYNC_ROOM_RES, SSVC_TYPE_SYNC_ROOM_DATA, SSVC_TYPE_SYNC_ROOM_USER, SSVC_TYPE_SYNC_ROOM_USER2, SSVC_TYPE_SYNC_ROOM2_REQ, SSVC_TYPE_SYNC_ROOM2_RES, SSVC_TYPE_SYNC_ROOM2_DATA, SSVC_TYPE_SYNC_ROOM2_USER, SSVC_TYPE_SYNC_ROOM2_USER2 } from '../types/service'; import { SyncGroupRequest, SyncGroupResponse, SyncGroupDataResponse, encodeSyncGroup, decodeSyncGroupDataDetail, decodeSyncGroup, decodeSyncGroupData, SyncGroupDataDetailResponse } from '../models/group'; import { SyncRoomRequest, SyncRoomResponse, encodeSyncRoom, decodeSyncRoom, SyncRoomUserDataResponse, SyncRoomUserDataDetailResponse, SyncRoomDataResponse, decodeSyncRoomData, decodeSyncRoomUserData, decodeSyncRoomUserDataDetail } from '../models/room'; @Injectable({ providedIn: 'root' }) export class SyncProtocolService { constructor(private protocolService: ProtocolService) {} public syncBuddy( req: SyncBuddyRequest ): Observable { return this.protocolService .call( SVC_TYPE_SYNC_BUDDY, SSVC_TYPE_SYNC_BUDDY_REQ, ...encodeSyncBuddy(req) ) .pipe( takeWhile(res => SSVC_TYPE_SYNC_BUDDY_RES !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_BUDDY_DATA === res.subServiceType) { return decodeSyncBuddyData(res); } return decodeSyncBuddy(res); }) ); } public syncBuddy2( req: SyncBuddyRequest ): Observable { return this.protocolService .call( SVC_TYPE_SYNC_BUDDY, SSVC_TYPE_SYNC_BUDDY2_REQ, ...encodeSyncBuddy(req) ) .pipe( takeWhile(res => SSVC_TYPE_SYNC_BUDDY2_RES !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_BUDDY2_DATA === res.subServiceType) { return decodeSyncBuddyDataDetail(res); } return decodeSyncBuddy(res); }) ); } public syncGroup( req: SyncGroupRequest ): Observable { return this.protocolService .call( SVC_TYPE_SYNC_GROUP, SSVC_TYPE_SYNC_GROUP_REQ, ...encodeSyncGroup(req) ) .pipe( takeWhile(res => SSVC_TYPE_SYNC_GROUP_RES !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_GROUP_DATA === res.subServiceType) { return decodeSyncGroupData(res); } return decodeSyncGroup(res); }) ); } public syncGroup2( req: SyncGroupRequest ): Observable { return this.protocolService .call( SVC_TYPE_SYNC_GROUP, SSVC_TYPE_SYNC_GROUP_REQ2, ...encodeSyncGroup(req) ) .pipe( takeWhile(res => SSVC_TYPE_SYNC_GROUP_RES2 !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_GROUP_DATA2 === res.subServiceType) { return decodeSyncGroupDataDetail(res); } return decodeSyncGroup(res); }) ); } public syncRoom( req: SyncRoomRequest ): Observable< | SyncRoomResponse | SyncRoomDataResponse | SyncRoomUserDataResponse | SyncRoomUserDataDetailResponse > { return this.protocolService .call(SVC_TYPE_SYNC_ROOM, SSVC_TYPE_SYNC_ROOM_REQ, ...encodeSyncRoom(req)) .pipe( takeWhile(res => SSVC_TYPE_SYNC_ROOM_RES !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_ROOM_DATA === res.subServiceType) { return decodeSyncRoomData(res); } else if (SSVC_TYPE_SYNC_ROOM_USER === res.subServiceType) { return decodeSyncRoomUserData(res); } else if (SSVC_TYPE_SYNC_ROOM_USER2 === res.subServiceType) { return decodeSyncRoomUserDataDetail(res); } return decodeSyncRoom(res); }) ); } public syncRoom2( req: SyncRoomRequest ): Observable< | SyncRoomResponse | SyncRoomDataResponse | SyncRoomUserDataResponse | SyncRoomUserDataDetailResponse > { return this.protocolService .call( SVC_TYPE_SYNC_ROOM, SSVC_TYPE_SYNC_ROOM2_REQ, ...encodeSyncRoom(req) ) .pipe( takeWhile(res => SSVC_TYPE_SYNC_ROOM2_RES !== res.subServiceType), map(res => { if (SSVC_TYPE_SYNC_ROOM2_DATA === res.subServiceType) { return decodeSyncRoomData(res); } else if (SSVC_TYPE_SYNC_ROOM2_USER === res.subServiceType) { return decodeSyncRoomUserData(res); } else if (SSVC_TYPE_SYNC_ROOM2_USER2 === res.subServiceType) { return decodeSyncRoomUserDataDetail(res); } return decodeSyncRoom(res); }) ); } }