97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
|
import {
|
||
|
ProtocolRequest,
|
||
|
ProtocolResponse,
|
||
|
ProtocolEncoder,
|
||
|
PacketBody,
|
||
|
PacketBodyValue,
|
||
|
ProtocolDecoder,
|
||
|
ProtocolMessage,
|
||
|
BodyStringDivider,
|
||
|
ProtocolNotification
|
||
|
} from '@ucap-webmessenger/protocol';
|
||
|
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
||
|
|
||
|
export interface StatusRequest extends ProtocolRequest {
|
||
|
// 상태타입(s)
|
||
|
statusDivisionType: StatusType;
|
||
|
// 상태코드(s)
|
||
|
statusType: StatusCode;
|
||
|
// 상태메시지(s) (상태타입 : M, 상태코드: B 일때, 사용함)
|
||
|
statusMessage?: string;
|
||
|
}
|
||
|
|
||
|
export interface StatusResponse extends ProtocolResponse {
|
||
|
// 상태타입(s)
|
||
|
statusDivisionType: StatusType;
|
||
|
// 상태코드(s)
|
||
|
statusType: StatusCode;
|
||
|
// 상태메시지(s) (상태타입 : M, 상태코드: B 일때, 사용함)
|
||
|
statusMessage: string;
|
||
|
}
|
||
|
|
||
|
export interface StatusInfo {
|
||
|
// 사용자SEQ
|
||
|
userSeq: number;
|
||
|
// 상태코드(PC)
|
||
|
pcStatus: StatusCode;
|
||
|
// 상태코드(통화)
|
||
|
phoneStatus: StatusCode;
|
||
|
// 상태코드(모바일)
|
||
|
mobileStatus: StatusCode;
|
||
|
// 상태코드(PC화상)
|
||
|
conferenceStatus: StatusCode;
|
||
|
// 상태메시지
|
||
|
statusMessage: string;
|
||
|
// 상태코드(Mobile화상)
|
||
|
mobileConferenceStatus: StatusCode;
|
||
|
// 상태코드(iMessenger)
|
||
|
imessengerStatus: StatusCode;
|
||
|
}
|
||
|
export interface StatusNotification extends StatusInfo, ProtocolNotification {}
|
||
|
|
||
|
export const encodeStatus: ProtocolEncoder<StatusRequest> = (
|
||
|
req: StatusRequest
|
||
|
) => {
|
||
|
const bodyList: PacketBody[] = [];
|
||
|
|
||
|
bodyList.push(
|
||
|
{
|
||
|
type: PacketBodyValue.String,
|
||
|
value: req.statusDivisionType
|
||
|
},
|
||
|
{ type: PacketBodyValue.String, value: req.statusType },
|
||
|
{
|
||
|
type: PacketBodyValue.String,
|
||
|
value: req.statusMessage || ''
|
||
|
}
|
||
|
);
|
||
|
return bodyList;
|
||
|
};
|
||
|
|
||
|
export const decodeStatus: ProtocolDecoder<StatusResponse> = (
|
||
|
message: ProtocolMessage
|
||
|
) => {
|
||
|
return {
|
||
|
statusDivisionType: message.bodyList[0] as StatusType,
|
||
|
statusType: message.bodyList[1] as StatusCode,
|
||
|
statusMessage: message.bodyList[2]
|
||
|
} as StatusResponse;
|
||
|
};
|
||
|
|
||
|
export const decodeStatusNotification: ProtocolDecoder<StatusNotification> = (
|
||
|
message: ProtocolMessage
|
||
|
) => {
|
||
|
const info = message.bodyList[0].split(BodyStringDivider);
|
||
|
let idx = 0;
|
||
|
return {
|
||
|
userSeq: info[idx],
|
||
|
pcStatus: info[idx++] as StatusCode,
|
||
|
phoneStatus: info[idx++] as StatusCode,
|
||
|
mobileStatus: info[idx++] as StatusCode,
|
||
|
conferenceStatus: info[idx++] as StatusCode,
|
||
|
statusMessage: info[idx++],
|
||
|
mobileConferenceStatus: info[idx++] as StatusCode,
|
||
|
imessengerStatus: info[idx++] as StatusCode
|
||
|
} as StatusNotification;
|
||
|
};
|