152 lines
3.6 KiB
TypeScript
Raw Normal View History

2019-09-18 15:02:21 +09:00
import { Injectable } from '@angular/core';
2019-09-26 14:43:31 +09:00
import { Observable } from 'rxjs';
import { map, take, takeWhile } from 'rxjs/operators';
import { ProtocolService } from '@ucap-webmessenger/protocol';
import {
StatusRequest,
encodeStatus,
decodeStatus,
StatusResponse
} from '../models/status';
import {
SVC_TYPE_STATUS,
SSVC_TYPE_STATUS_REQ,
SSVC_TYPE_STATUS_BULK_INFO_REQ,
SSVC_TYPE_STATUS_BULK_INFO_RES,
SSVC_TYPE_STATUS_BULK_INFO_DATA,
SSVC_TYPE_STATUS_BUDDY_REQ,
SSVC_TYPE_STATUS_MSG_UPD_REQ,
SSVC_TYPE_STATUS_SUBSCRIPT_REQ,
SSVC_TYPE_STATUS_UNSUBSCRIPT_REQ
} from '../types/service';
import {
BulkInfoRequest,
BulkInfoResponse,
BulkInfoData,
encodeBulkInfo,
decodeBulkInfo,
decodeBulkInfoData
} from '../models/bulk';
import { BuddyResponse, decodeBuddy } from '../models/buddy';
import {
MessageUpdateRequest,
MessageUpdateResponse,
encodeMessageUpdate,
decodeMessageUpdate
} from '../models/message-update';
import {
SubscribeRequest,
SubscribeResponse,
decodeSubscribe,
encodeSubscribe
} from '../models/subscribe';
import { UnSubscribeRequest, encodeUnSubscribe } from '../models/unsubscribe';
2019-09-18 15:02:21 +09:00
@Injectable({
providedIn: 'root'
})
export class StatusProtocolService {
2019-09-26 14:43:31 +09:00
constructor(private protocolService: ProtocolService) {}
public status(req: StatusRequest): Observable<StatusResponse> {
return this.protocolService
.call(SVC_TYPE_STATUS, SSVC_TYPE_STATUS_REQ, ...encodeStatus(req))
.pipe(
take(1),
map(res => {
return decodeStatus(res);
})
);
}
public buddy(): Observable<BuddyResponse> {
return this.protocolService
.call(SVC_TYPE_STATUS, SSVC_TYPE_STATUS_BUDDY_REQ)
.pipe(
take(1),
map(res => {
return decodeBuddy(res);
})
);
}
public bulkInfo(
req: BulkInfoRequest
): Observable<BulkInfoResponse | BulkInfoData> {
return this.protocolService
.call(
SVC_TYPE_STATUS,
SSVC_TYPE_STATUS_BULK_INFO_REQ,
...encodeBulkInfo(req)
)
.pipe(
takeWhile(
res => SSVC_TYPE_STATUS_BULK_INFO_RES !== res.subServiceType,
true
),
map(res => {
if (SSVC_TYPE_STATUS_BULK_INFO_DATA === res.subServiceType) {
return {
...decodeBulkInfoData(res),
Type: SSVC_TYPE_STATUS_BULK_INFO_DATA
};
}
return {
...decodeBulkInfo(res),
Type: SSVC_TYPE_STATUS_BULK_INFO_RES
};
})
);
}
public messageUpdate(
req: MessageUpdateRequest
): Observable<MessageUpdateResponse> {
return this.protocolService
.call(
SVC_TYPE_STATUS,
SSVC_TYPE_STATUS_MSG_UPD_REQ,
...encodeMessageUpdate(req)
)
.pipe(
take(1),
map(res => {
return decodeMessageUpdate(res);
})
);
}
/**
* Only Use 1:1 Chat Room and must be using unsubscribe method.
* @param req SubscribeRequest
*/
public subscribe(req: SubscribeRequest): Observable<SubscribeResponse> {
return this.protocolService
.call(
SVC_TYPE_STATUS,
SSVC_TYPE_STATUS_SUBSCRIPT_REQ,
...encodeSubscribe(req)
)
.pipe(
take(1),
map(res => {
return decodeSubscribe(res);
})
);
}
/**
* Only Use 1:1 Chat Room and must be using subscribe method.
* @param req UnSubscribeRequest
*/
public unSubscribe(req: UnSubscribeRequest): void {
return this.protocolService.send(
SVC_TYPE_STATUS,
SSVC_TYPE_STATUS_UNSUBSCRIPT_REQ,
...encodeUnSubscribe(req)
);
}
2019-09-18 15:02:21 +09:00
}