2019-09-18 15:02:21 +09:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
|
2019-09-23 14:38:22 +09:00
|
|
|
import { Observable } from 'rxjs';
|
2019-09-23 17:00:05 +09:00
|
|
|
import { map, take, takeWhile } from 'rxjs/operators';
|
2019-09-23 14:38:22 +09:00
|
|
|
|
|
|
|
import { ProtocolService } from '@ucap-webmessenger/protocol';
|
|
|
|
import {
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_OPEN_REQ,
|
|
|
|
SSVC_TYPE_ROOM_OPEN2_REQ,
|
|
|
|
SSVC_TYPE_ROOM_OPEN3_REQ,
|
2019-09-23 15:18:17 +09:00
|
|
|
SSVC_TYPE_ROOM_OPEN4_REQ,
|
2019-09-23 17:00:05 +09:00
|
|
|
SSVC_TYPE_ROOM_INVITE_REQ,
|
|
|
|
SSVC_TYPE_ROOM_INFO_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_INFO_RES,
|
|
|
|
SSVC_TYPE_ROOM_INFO_REQ,
|
|
|
|
SSVC_TYPE_ROOM_INFO_USER,
|
2019-09-25 13:21:07 +09:00
|
|
|
SSVC_TYPE_ROOM_INFO_USER2,
|
|
|
|
SSVC_TYPE_ROOM_EXIT_REQ,
|
|
|
|
SSVC_TYPE_ROOM_EXIT_ALL_REQ,
|
|
|
|
SSVC_TYPE_ROOM_EXIT_FORCING_REQ,
|
|
|
|
SSVC_TYPE_ROOM_USER_STATUS_REQ,
|
|
|
|
SSVC_TYPE_ROOM_UPD_REQ,
|
|
|
|
SSVC_TYPE_ROOM_INFO_UPD_REQ,
|
|
|
|
SSVC_TYPE_ROOM_FONT_UPD_REQ
|
2019-09-23 14:38:22 +09:00
|
|
|
} from '../types/service';
|
|
|
|
import {
|
|
|
|
RoomOpenRequest,
|
|
|
|
encodeRoomOpen,
|
|
|
|
decodeRoomOpen,
|
2019-09-25 13:21:07 +09:00
|
|
|
RoomOpenResponse,
|
2019-09-23 14:38:22 +09:00
|
|
|
RoomOpen2Request,
|
|
|
|
RoomOpen2Response,
|
|
|
|
decodeRoomOpen2,
|
2019-09-25 13:21:07 +09:00
|
|
|
encodeRoomOpen2,
|
2019-09-23 14:38:22 +09:00
|
|
|
RoomOpen3Request,
|
|
|
|
RoomOpen3Response,
|
|
|
|
encodeRoomOpen3,
|
2019-09-25 13:21:07 +09:00
|
|
|
decodeRoomOpen3,
|
2019-09-23 14:38:22 +09:00
|
|
|
RoomOpen4Request,
|
|
|
|
RoomOpen4Response,
|
|
|
|
encodeRoomOpen4,
|
|
|
|
decodeRoomOpen4
|
2019-09-25 13:21:07 +09:00
|
|
|
} from '../models/open';
|
2019-09-23 15:18:17 +09:00
|
|
|
import {
|
|
|
|
RoomInviteRequest,
|
|
|
|
RoomInviteResponse,
|
|
|
|
encodeRoomInvite,
|
|
|
|
decodeRoomInvite
|
2019-09-25 13:21:07 +09:00
|
|
|
} from '../models/invite';
|
2019-09-23 17:00:05 +09:00
|
|
|
import {
|
|
|
|
RoomInfoRequest,
|
|
|
|
RoomInfoResponse,
|
|
|
|
RoomInfoDataResponse,
|
|
|
|
RoomUserShortDataResponse,
|
|
|
|
RoomUserDataResponse,
|
|
|
|
encodeRoomInfo,
|
|
|
|
decodeRoomInfoData,
|
|
|
|
decodeRoomInfo,
|
|
|
|
decodeRoomUserShortData,
|
2019-09-25 13:21:07 +09:00
|
|
|
decodeRoomUserData,
|
|
|
|
RoomUserStatusOfflineRequest,
|
|
|
|
RoomUserStatusOfflineResponse,
|
|
|
|
encodeRoomUserStatusOffline,
|
|
|
|
decodeRoomUserStatusOffline
|
|
|
|
} from '../models/info';
|
|
|
|
import {
|
|
|
|
RoomExitRequest,
|
|
|
|
RoomExitResponse,
|
|
|
|
encodeRoomExit,
|
|
|
|
decodeRoomExit,
|
|
|
|
RoomExitAllRequest,
|
|
|
|
encodeRoomAllExit,
|
|
|
|
RoomExitForcingRequest,
|
|
|
|
RoomExitForcingResponse,
|
|
|
|
encodeRoomExitForcing,
|
|
|
|
decodeRoomExitForcing
|
|
|
|
} from '../models/exit';
|
|
|
|
import {
|
|
|
|
RoomUpdateRequest,
|
|
|
|
RoomUpdateResponse,
|
|
|
|
encodeRoomUpdate,
|
|
|
|
decodeRoomUpdate,
|
|
|
|
RoomUpdateTimerSetRequest,
|
|
|
|
RoomUpdateTimerSetResponse,
|
|
|
|
encodeRoomUpdateTimerSet,
|
|
|
|
decodeRoomUpdateTimerSet,
|
|
|
|
RoomUpdateFontRequest,
|
|
|
|
RoomUpdateFontResponse,
|
|
|
|
encodeRoomUpdateFont,
|
|
|
|
decodeRoomUpdateFont
|
|
|
|
} from '../models/update';
|
2019-09-23 14:38:22 +09:00
|
|
|
|
2019-09-18 15:02:21 +09:00
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
|
|
|
export class RoomProtocolService {
|
2019-09-23 14:38:22 +09:00
|
|
|
constructor(private protocolService: ProtocolService) {}
|
|
|
|
|
|
|
|
public roomOpen(req: RoomOpenRequest): Observable<RoomOpenResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_OPEN_REQ, ...encodeRoomOpen(req))
|
2019-09-23 15:17:48 +09:00
|
|
|
.pipe(
|
|
|
|
take(1),
|
|
|
|
map(res => decodeRoomOpen(res))
|
|
|
|
);
|
2019-09-23 14:38:22 +09:00
|
|
|
}
|
|
|
|
public roomOpen2(req: RoomOpen2Request): Observable<RoomOpen2Response> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_OPEN2_REQ, ...encodeRoomOpen2(req))
|
2019-09-23 15:17:48 +09:00
|
|
|
.pipe(
|
|
|
|
take(1),
|
|
|
|
map(res => decodeRoomOpen2(res))
|
|
|
|
);
|
2019-09-23 14:38:22 +09:00
|
|
|
}
|
|
|
|
public roomOpen3(req: RoomOpen3Request): Observable<RoomOpen3Response> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_OPEN3_REQ, ...encodeRoomOpen3(req))
|
2019-09-23 15:17:48 +09:00
|
|
|
.pipe(
|
|
|
|
take(1),
|
|
|
|
map(res => decodeRoomOpen3(res))
|
|
|
|
);
|
2019-09-23 14:38:22 +09:00
|
|
|
}
|
|
|
|
public roomOpen4(req: RoomOpen4Request): Observable<RoomOpen4Response> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_OPEN4_REQ, ...encodeRoomOpen4(req))
|
2019-09-23 15:17:48 +09:00
|
|
|
.pipe(
|
|
|
|
take(1),
|
|
|
|
map(res => decodeRoomOpen4(res))
|
|
|
|
);
|
2019-09-23 14:38:22 +09:00
|
|
|
}
|
2019-09-23 15:18:17 +09:00
|
|
|
|
|
|
|
public roomInvite(req: RoomInviteRequest): Observable<RoomInviteResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_INVITE_REQ, ...encodeRoomInvite(req))
|
|
|
|
.pipe(
|
|
|
|
take(1),
|
|
|
|
map(res => decodeRoomInvite(res))
|
|
|
|
);
|
|
|
|
}
|
2019-09-23 17:00:05 +09:00
|
|
|
|
|
|
|
public roomInfo(
|
|
|
|
req: RoomInfoRequest
|
|
|
|
): Observable<
|
|
|
|
| RoomInfoResponse
|
|
|
|
| RoomInfoDataResponse
|
|
|
|
| RoomUserShortDataResponse
|
|
|
|
| RoomUserDataResponse
|
|
|
|
> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_INFO_REQ, ...encodeRoomInfo(req))
|
|
|
|
.pipe(
|
2019-09-25 15:35:06 +09:00
|
|
|
takeWhile(res => SSVC_TYPE_ROOM_INFO_RES !== res.subServiceType, true),
|
2019-09-23 17:00:05 +09:00
|
|
|
map(res => {
|
|
|
|
if (SSVC_TYPE_ROOM_INFO_ROOM === res.subServiceType) {
|
|
|
|
return decodeRoomInfoData(res);
|
|
|
|
} else if (SSVC_TYPE_ROOM_INFO_USER === res.subServiceType) {
|
|
|
|
return decodeRoomUserShortData(res);
|
|
|
|
} else if (SSVC_TYPE_ROOM_INFO_USER2 === res.subServiceType) {
|
|
|
|
return decodeRoomUserData(res);
|
|
|
|
}
|
|
|
|
|
|
|
|
return decodeRoomInfo(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
2019-09-25 13:21:07 +09:00
|
|
|
public roomUserStatusOffline(
|
|
|
|
req: RoomUserStatusOfflineRequest
|
|
|
|
): Observable<RoomUserStatusOfflineResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_USER_STATUS_REQ,
|
|
|
|
...encodeRoomUserStatusOffline(req)
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomUserStatusOffline(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public roomExit(req: RoomExitRequest): Observable<RoomExitResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_EXIT_REQ, ...encodeRoomExit(req))
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomExit(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public roomExitAll(req: RoomExitAllRequest): Observable<void> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_EXIT_ALL_REQ,
|
|
|
|
...encodeRoomAllExit(req)
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public roomExitForcing(
|
|
|
|
req: RoomExitForcingRequest
|
|
|
|
): Observable<RoomExitForcingResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_EXIT_FORCING_REQ,
|
|
|
|
...encodeRoomExitForcing(req)
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomExitForcing(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public roomUpdate(req: RoomUpdateRequest): Observable<RoomUpdateResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(SVC_TYPE_ROOM, SSVC_TYPE_ROOM_UPD_REQ, ...encodeRoomUpdate(req))
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomUpdate(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public roomUpdateTimerSet(
|
|
|
|
req: RoomUpdateTimerSetRequest
|
|
|
|
): Observable<RoomUpdateTimerSetResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_INFO_UPD_REQ,
|
|
|
|
...encodeRoomUpdateTimerSet(req)
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomUpdateTimerSet(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public roomUpdateFont(
|
|
|
|
req: RoomUpdateFontRequest
|
|
|
|
): Observable<RoomUpdateFontResponse> {
|
|
|
|
return this.protocolService
|
|
|
|
.call(
|
|
|
|
SVC_TYPE_ROOM,
|
|
|
|
SSVC_TYPE_ROOM_FONT_UPD_REQ,
|
|
|
|
...encodeRoomUpdateFont(req)
|
|
|
|
)
|
|
|
|
.pipe(
|
|
|
|
map(res => {
|
|
|
|
take(1);
|
|
|
|
return decodeRoomUpdateFont(res);
|
|
|
|
})
|
|
|
|
);
|
|
|
|
}
|
2019-09-18 15:02:21 +09:00
|
|
|
}
|