113 lines
3.1 KiB
TypeScript
113 lines
3.1 KiB
TypeScript
|
import {
|
||
|
ProtocolRequest,
|
||
|
ProtocolResponse,
|
||
|
ProtocolEncoder,
|
||
|
PacketBody,
|
||
|
PacketBodyValue,
|
||
|
ProtocolDecoder,
|
||
|
ProtocolMessage,
|
||
|
BodyStringDivider,
|
||
|
ProtocolStream
|
||
|
} from '@ucap-webmessenger/protocol';
|
||
|
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
||
|
import { StatusInfo } from './status';
|
||
|
import {
|
||
|
TerminalStatusInfo,
|
||
|
TerminalStatusNumber
|
||
|
} from '../types/terminal-status.type';
|
||
|
|
||
|
export interface BulkInfoRequest extends ProtocolRequest {
|
||
|
// DivCD(s)
|
||
|
divCd: string;
|
||
|
// 사용자SEQ(n)...
|
||
|
userSeqs: number[];
|
||
|
}
|
||
|
export interface StatusBulkInfo extends StatusInfo {
|
||
|
// 사용자SEQ
|
||
|
// 상태코드(PC)
|
||
|
// 상태코드(통화)
|
||
|
// 상태코드(모바일)
|
||
|
// 상태코드(PC화상)
|
||
|
// 상태메시지
|
||
|
// 상태코드(Mobile화상)
|
||
|
// 상태코드(iMessenger)
|
||
|
|
||
|
// 단말상태정보(s)
|
||
|
terminalStatus: TerminalStatusInfo;
|
||
|
// 단말상태번호(n)
|
||
|
terminalStatusNumber: TerminalStatusNumber;
|
||
|
}
|
||
|
export interface BulkInfoData extends ProtocolStream {
|
||
|
// DivCD(s)
|
||
|
divCd: string;
|
||
|
// {상태정보Bulk}...
|
||
|
statusBulkInfos: StatusBulkInfo[];
|
||
|
}
|
||
|
export interface BulkInfoResponse extends ProtocolResponse {
|
||
|
// DivCD(s)
|
||
|
divCd: string;
|
||
|
}
|
||
|
|
||
|
export const encodeBulkInfo: ProtocolEncoder<BulkInfoRequest> = (
|
||
|
req: BulkInfoRequest
|
||
|
) => {
|
||
|
const bodyList: PacketBody[] = [];
|
||
|
|
||
|
bodyList.push({ type: PacketBodyValue.String, value: req.divCd });
|
||
|
req.userSeqs.forEach(userSeq => {
|
||
|
bodyList.push({ type: PacketBodyValue.Integer, value: userSeq });
|
||
|
});
|
||
|
return bodyList;
|
||
|
};
|
||
|
|
||
|
export const decodeBulkInfo: ProtocolDecoder<BulkInfoResponse> = (
|
||
|
message: ProtocolMessage
|
||
|
) => {
|
||
|
return {
|
||
|
divCd: message.bodyList[0]
|
||
|
} as BulkInfoResponse;
|
||
|
};
|
||
|
|
||
|
export const decodeBulkInfoData: ProtocolDecoder<BulkInfoData> = (
|
||
|
message: ProtocolMessage
|
||
|
) => {
|
||
|
const statusBulkInfos: StatusBulkInfo[] = [];
|
||
|
message.bodyList.slice(1).forEach(statusBulkInfo => {
|
||
|
const info = statusBulkInfo.split(BodyStringDivider);
|
||
|
let idx = 0;
|
||
|
statusBulkInfos.push({
|
||
|
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,
|
||
|
terminalStatus: info[idx++] as TerminalStatusInfo,
|
||
|
terminalStatusNumber: info[idx++] as TerminalStatusNumber
|
||
|
});
|
||
|
});
|
||
|
return {
|
||
|
divCd: message.bodyList[0],
|
||
|
statusBulkInfos
|
||
|
} as BulkInfoData;
|
||
|
};
|
||
|
|
||
|
// 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;
|
||
|
// };
|