212 lines
5.6 KiB
TypeScript

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<SyncBuddyResponse | SyncBuddyDataResponse> {
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<SyncBuddyResponse | SyncBuddyDataResponse> {
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<SyncGroupResponse | SyncGroupDataResponse> {
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<SyncGroupResponse | SyncGroupDataDetailResponse> {
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);
})
);
}
}