97 lines
2.2 KiB
TypeScript
97 lines
2.2 KiB
TypeScript
import {
|
|
ProtocolRequest,
|
|
ProtocolResponse,
|
|
ProtocolEncoder,
|
|
PacketBody,
|
|
ProtocolDecoder,
|
|
ProtocolMessage,
|
|
ProtocolStream,
|
|
PacketBodyValue
|
|
} from '@ucap-webmessenger/protocol';
|
|
import { EventType } from '../types/event.type';
|
|
|
|
export interface InfoRequest extends ProtocolRequest {
|
|
// 대화방SEQ(s)
|
|
roomSeq: string;
|
|
// 기준이벤트SEQ(n)
|
|
baseSeq: number;
|
|
// 요청이벤트개수(n)
|
|
requestCount: number;
|
|
}
|
|
|
|
export interface Info {
|
|
// 이벤트SEQ
|
|
seq: number;
|
|
// 이벤트타입
|
|
type: EventType;
|
|
// 발신자SEQ
|
|
senderSeq: number;
|
|
// 발신일시
|
|
sendDate: Date;
|
|
// 발신내용
|
|
sentMessage: string;
|
|
// 수신자수
|
|
receiverCount: number;
|
|
}
|
|
|
|
export interface InfoData extends ProtocolStream {
|
|
// 대화방SEQ(s)
|
|
roomSeq: string;
|
|
infoList: Info[];
|
|
}
|
|
|
|
export interface InfoResponse extends ProtocolResponse {
|
|
// 대화방SEQ(s)
|
|
roomSeq: string;
|
|
// 기준이벤트SEQ(n)
|
|
baseSeq: number;
|
|
// 유효한파일기준이벤트SEQ(n)
|
|
validFileBaseSeq: number;
|
|
// 이벤트정보 개수(n)
|
|
count: number;
|
|
}
|
|
|
|
export const encodeInfo: ProtocolEncoder<InfoRequest> = (req: InfoRequest) => {
|
|
const bodyList: PacketBody[] = [];
|
|
|
|
bodyList.push(
|
|
{ type: PacketBodyValue.String, value: req.roomSeq },
|
|
{ type: PacketBodyValue.Integer, value: req.baseSeq },
|
|
{ type: PacketBodyValue.Integer, value: req.requestCount }
|
|
);
|
|
|
|
return bodyList;
|
|
};
|
|
|
|
export const decodeInfoData: ProtocolDecoder<InfoData> = (
|
|
message: ProtocolMessage
|
|
) => {
|
|
const infoList: Info[] = [];
|
|
for (let i = 1; i < message.bodyList.length; ) {
|
|
infoList.push({
|
|
seq: message.bodyList[i++],
|
|
type: message.bodyList[i++],
|
|
senderSeq: message.bodyList[i++],
|
|
sendDate: message.bodyList[i++],
|
|
sentMessage: message.bodyList[i++],
|
|
receiverCount: message.bodyList[i++]
|
|
});
|
|
}
|
|
|
|
return {
|
|
roomSeq: message.bodyList[0],
|
|
infoList
|
|
} as InfoData;
|
|
};
|
|
|
|
export const decodeInfo: ProtocolDecoder<InfoResponse> = (
|
|
message: ProtocolMessage
|
|
) => {
|
|
return {
|
|
roomSeq: message.bodyList[0],
|
|
baseSeq: message.bodyList[1],
|
|
validFileBaseSeq: message.bodyList[2],
|
|
count: message.bodyList[3]
|
|
} as InfoResponse;
|
|
};
|