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 = ( 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 = ( 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 = ( 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; };