61 lines
1.5 KiB
TypeScript
Raw Normal View History

2019-09-18 15:02:21 +09:00
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
2019-09-23 18:09:04 +09:00
import { map, takeWhile, timeout, take } from 'rxjs/operators';
import { ProtocolService } from '@ucap-webmessenger/protocol';
import {
InfoRequest,
InfoResponse,
encodeInfo,
decodeInfo,
decodeInfoData,
InfoData
} from '../models/info';
import {
SVC_TYPE_EVENT,
SSVC_TYPE_EVENT_INFO_REQ,
SSVC_TYPE_EVENT_INFO_RES,
2019-09-23 18:09:04 +09:00
SSVC_TYPE_EVENT_INFO_DATA,
SSVC_TYPE_EVENT_SEND_REQ
} from '../types/service';
2019-09-23 18:09:04 +09:00
import {
EventSendRequest,
EventSendResponse,
decodeEventSend,
encodeEventSend
} from '../models/event-send';
2019-09-18 15:02:21 +09:00
@Injectable({
providedIn: 'root'
})
export class EventProtocolService {
constructor(private protocolService: ProtocolService) {}
public info(req: InfoRequest): Observable<InfoResponse | InfoData> {
return this.protocolService
.call(SVC_TYPE_EVENT, SSVC_TYPE_EVENT_INFO_REQ, ...encodeInfo(req))
.pipe(
takeWhile(res => SSVC_TYPE_EVENT_INFO_RES !== res.subServiceType),
map(res => {
if (SSVC_TYPE_EVENT_INFO_DATA === res.subServiceType) {
return decodeInfoData(res);
}
return decodeInfo(res);
})
);
}
2019-09-23 18:09:04 +09:00
public eventSend(req: EventSendRequest): Observable<EventSendResponse> {
return this.protocolService
.call(SVC_TYPE_EVENT, SSVC_TYPE_EVENT_SEND_REQ, ...encodeEventSend(req))
.pipe(
take(1),
map(res => {
return decodeEventSend(res);
})
);
}
2019-09-18 15:02:21 +09:00
}