212 lines
5.6 KiB
TypeScript
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);
|
|
})
|
|
);
|
|
}
|
|
}
|