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 = ( 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 = ( message: ProtocolMessage ) => { return { divCd: message.bodyList[0] } as BulkInfoResponse; }; export const decodeBulkInfoData: ProtocolDecoder = ( message: ProtocolMessage ) => { const statusBulkInfos: StatusBulkInfo[] = []; message.bodyList.slice(1).forEach(statusBulkInfo => { const info = statusBulkInfo.split(BodyStringDivider); statusBulkInfos.push({ userSeq: Number(info[0]), pcStatus: info[1] as StatusCode, phoneStatus: info[2] as StatusCode, mobileStatus: info[3] as StatusCode, conferenceStatus: info[4] as StatusCode, statusMessage: info[5], mobileConferenceStatus: info[6] as StatusCode, imessengerStatus: info[7] as StatusCode, terminalStatus: info[8] as TerminalStatusInfo, terminalStatusNumber: Number(info[9]) as TerminalStatusNumber }); }); return { divCd: message.bodyList[0], statusBulkInfos } as BulkInfoData; };