added protocol > FILE
This commit is contained in:
parent
5141de66c1
commit
d26b4a694b
|
@ -0,0 +1,37 @@
|
|||
import { LocaleCode } from '@ucap-webmessenger/core';
|
||||
import {
|
||||
ProtocolRequest,
|
||||
ProtocolResponse,
|
||||
ProtocolEncoder,
|
||||
PacketBody,
|
||||
PacketBodyValue,
|
||||
ProtocolDecoder,
|
||||
ProtocolMessage
|
||||
} from '@ucap-webmessenger/protocol';
|
||||
|
||||
export interface DownCheckRequest extends ProtocolRequest {
|
||||
// 파일SEQ
|
||||
seq: number;
|
||||
}
|
||||
|
||||
export interface DownCheckResponse extends ProtocolResponse {
|
||||
// 파일SEQ
|
||||
seq: number;
|
||||
}
|
||||
|
||||
export const encodeDownCheck: ProtocolEncoder<DownCheckRequest> = (
|
||||
req: DownCheckRequest
|
||||
) => {
|
||||
const bodyList: PacketBody[] = [];
|
||||
|
||||
bodyList.push({ type: PacketBodyValue.Integer, value: req.seq });
|
||||
return bodyList;
|
||||
};
|
||||
|
||||
export const decodeDownCheck: ProtocolDecoder<DownCheckResponse> = (
|
||||
message: ProtocolMessage
|
||||
) => {
|
||||
return {
|
||||
seq: message.bodyList[0]
|
||||
} as DownCheckResponse;
|
||||
};
|
144
projects/ucap-webmessenger-protocol-file/src/lib/models/info.ts
Normal file
144
projects/ucap-webmessenger-protocol-file/src/lib/models/info.ts
Normal file
|
@ -0,0 +1,144 @@
|
|||
import {
|
||||
ProtocolRequest,
|
||||
ProtocolResponse,
|
||||
ProtocolEncoder,
|
||||
PacketBody,
|
||||
PacketBodyValue,
|
||||
ProtocolDecoder,
|
||||
ProtocolMessage,
|
||||
BodyStringDivider,
|
||||
ProtocolStream
|
||||
} from '@ucap-webmessenger/protocol';
|
||||
import { FileType } from '../types/file.type';
|
||||
|
||||
export interface InfoRequest extends ProtocolRequest {
|
||||
// 대화방SEQ(s)
|
||||
roomSeq: string;
|
||||
// { 파일타입 } cf) I : 이미지 V: 동영상 F: 파일 "" 빈값이면 모든 타입을 내려줌
|
||||
type: FileType;
|
||||
}
|
||||
|
||||
export interface FileInfo {
|
||||
// 대화방SEQ
|
||||
roomSeq: string;
|
||||
// 이벤트SEQ
|
||||
eventSeq: number;
|
||||
// 파일SEQ
|
||||
seq: number;
|
||||
// 송신자SEQ
|
||||
senderSeq: number;
|
||||
// 파일타입
|
||||
type: FileType;
|
||||
// 파일이름
|
||||
name: string;
|
||||
// 파일URL
|
||||
url: string;
|
||||
// 파일크기(byte)
|
||||
size: number;
|
||||
// 전송일시
|
||||
sendDate: string;
|
||||
// 수신완료자수
|
||||
receivedUserCount: number;
|
||||
// 수신자수
|
||||
receiverCount: number;
|
||||
}
|
||||
|
||||
export interface InfoData extends ProtocolStream {
|
||||
// { 대화방파일정보 }...
|
||||
fileInfos: FileInfo[];
|
||||
}
|
||||
|
||||
export interface FileDownloadInfo {
|
||||
// 대화방SEQ
|
||||
roomSeq: string;
|
||||
// 파일SEQ
|
||||
seq: number;
|
||||
// 사용자SEQ
|
||||
userSeq: number;
|
||||
// 사용자명
|
||||
userName: string;
|
||||
// 다운로드일시
|
||||
downloadDate: string;
|
||||
// DownYN
|
||||
isDownload: boolean;
|
||||
}
|
||||
|
||||
export interface InfoCheckData extends ProtocolStream {
|
||||
// { 파일다운로드정보 }...
|
||||
fileDownloadInfos: FileDownloadInfo[];
|
||||
}
|
||||
|
||||
export interface InfoResponse extends ProtocolResponse {
|
||||
// 대화방SEQ(s)
|
||||
roomSeq: string;
|
||||
// { 파일타입 } cf) I : 이미지 V: 동영상 F: 파일 "" 빈값이면 모든 타입을 내려줌
|
||||
type: FileType;
|
||||
}
|
||||
|
||||
export const encodeInfo: ProtocolEncoder<InfoRequest> = (req: InfoRequest) => {
|
||||
const bodyList: PacketBody[] = [];
|
||||
|
||||
bodyList.push(
|
||||
{ type: PacketBodyValue.String, value: req.roomSeq },
|
||||
{ type: PacketBodyValue.String, value: req.type }
|
||||
);
|
||||
return bodyList;
|
||||
};
|
||||
|
||||
export const decodeInfoData: ProtocolDecoder<InfoData> = (
|
||||
message: ProtocolMessage
|
||||
) => {
|
||||
const fileInfos: FileInfo[] = [];
|
||||
message.bodyList.forEach(fileInfo => {
|
||||
const info = fileInfo.split(BodyStringDivider);
|
||||
let i = 0;
|
||||
fileInfos.push({
|
||||
roomSeq: info[i],
|
||||
eventSeq: Number(info[i++]),
|
||||
seq: Number(info[i++]),
|
||||
senderSeq: Number(info[i++]),
|
||||
type: info[i++] as FileType,
|
||||
name: info[i++],
|
||||
url: info[i++],
|
||||
size: info[i++],
|
||||
sendDate: info[i++],
|
||||
receivedUserCount: Number(info[i++]),
|
||||
receiverCount: Number(info[i++])
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
fileInfos
|
||||
} as InfoData;
|
||||
};
|
||||
|
||||
export const decodeInfoCheckData: ProtocolDecoder<InfoCheckData> = (
|
||||
message: ProtocolMessage
|
||||
) => {
|
||||
const fileDownloadInfos: FileDownloadInfo[] = [];
|
||||
message.bodyList.forEach(fileInfo => {
|
||||
const info = fileInfo.split(BodyStringDivider);
|
||||
let i = 0;
|
||||
fileDownloadInfos.push({
|
||||
roomSeq: info[i],
|
||||
seq: Number(info[i++]),
|
||||
userSeq: Number(info[i++]),
|
||||
userName: info[i++],
|
||||
downloadDate: info[i++],
|
||||
isDownload: info[i++] === 'Y' ? true : false
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
fileDownloadInfos
|
||||
} as InfoCheckData;
|
||||
};
|
||||
|
||||
export const decodeInfo: ProtocolDecoder<InfoResponse> = (
|
||||
message: ProtocolMessage
|
||||
) => {
|
||||
return {
|
||||
roomSeq: message.bodyList[0],
|
||||
type: message.bodyList[1] as FileType
|
||||
} as InfoResponse;
|
||||
};
|
|
@ -1,8 +1,79 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
|
||||
import { Observable } from 'rxjs';
|
||||
import { map, takeWhile, take } from 'rxjs/operators';
|
||||
|
||||
import { ProtocolService } from '@ucap-webmessenger/protocol';
|
||||
import {
|
||||
SSVC_TYPE_FILE_INFO_REQ,
|
||||
SVC_TYPE_FILE,
|
||||
SSVC_TYPE_FILE_INFO_RES,
|
||||
SSVC_TYPE_FILE_INFO_DATA,
|
||||
SSVC_TYPE_FILE_INFO_CHECK_DATA,
|
||||
SSVC_TYPE_FILE_DOWN_CHECK_REQ
|
||||
} from '../types/service';
|
||||
import {
|
||||
InfoRequest,
|
||||
InfoResponse,
|
||||
encodeInfo,
|
||||
decodeInfo,
|
||||
InfoData,
|
||||
InfoCheckData,
|
||||
decodeInfoData,
|
||||
decodeInfoCheckData
|
||||
} from '../models/info';
|
||||
import {
|
||||
DownCheckRequest,
|
||||
DownCheckResponse,
|
||||
encodeDownCheck,
|
||||
decodeDownCheck
|
||||
} from '../models/down-check';
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class FileProtocolService {
|
||||
constructor() {}
|
||||
constructor(private protocolService: ProtocolService) {}
|
||||
|
||||
public info(
|
||||
req: InfoRequest
|
||||
): Observable<InfoResponse | InfoData | InfoCheckData> {
|
||||
return this.protocolService
|
||||
.call(SVC_TYPE_FILE, SSVC_TYPE_FILE_INFO_REQ, ...encodeInfo(req))
|
||||
.pipe(
|
||||
takeWhile(res => SSVC_TYPE_FILE_INFO_RES !== res.subServiceType, true),
|
||||
map(res => {
|
||||
if (SSVC_TYPE_FILE_INFO_DATA === res.subServiceType) {
|
||||
return {
|
||||
...decodeInfoData(res),
|
||||
Type: SSVC_TYPE_FILE_INFO_DATA
|
||||
};
|
||||
} else if (SSVC_TYPE_FILE_INFO_CHECK_DATA === res.subServiceType) {
|
||||
return {
|
||||
...decodeInfoCheckData(res),
|
||||
Type: SSVC_TYPE_FILE_INFO_CHECK_DATA
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...decodeInfo(res),
|
||||
Type: SSVC_TYPE_FILE_INFO_RES
|
||||
};
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public downCheck(req: DownCheckRequest): Observable<DownCheckResponse> {
|
||||
return this.protocolService
|
||||
.call(
|
||||
SVC_TYPE_FILE,
|
||||
SSVC_TYPE_FILE_DOWN_CHECK_REQ,
|
||||
...encodeDownCheck(req)
|
||||
)
|
||||
.pipe(
|
||||
take(1),
|
||||
map(res => {
|
||||
return decodeDownCheck(res);
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
export enum FileType {
|
||||
// I : 이미지
|
||||
Image = 'I',
|
||||
// V : 동영상
|
||||
Video = 'V',
|
||||
// F : 파일
|
||||
File = 'F',
|
||||
// "" 빈값이면 모든 타입을 내려줌
|
||||
All = ''
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
export const SVC_TYPE_FILE = 53; // File
|
||||
export const SSVC_TYPE_FILE_INFO_REQ = 1; // File 정보 전송 요청
|
||||
export const SSVC_TYPE_FILE_INFO_DATA = 2; // File 정보 Data
|
||||
export const SSVC_TYPE_FILE_INFO_CHECK_DATA = 3; // File 다운로드 체크 Data
|
||||
export const SSVC_TYPE_FILE_INFO_RES = 4; // File 정보 전송 응답
|
||||
export const SSVC_TYPE_FILE_DOWN_CHECK_REQ = 11; // File 다운로드 완료 요청
|
||||
export const SSVC_TYPE_FILE_DOWN_CHECK_RES = 12; // File 다운로드 완료 응답
|
|
@ -2,6 +2,12 @@
|
|||
* Public API Surface of ucap-webmessenger-protocol-file
|
||||
*/
|
||||
|
||||
export * from './lib/models/down-check';
|
||||
export * from './lib/models/info';
|
||||
|
||||
export * from './lib/services/file-protocol.service';
|
||||
|
||||
export * from './lib/types/file.type';
|
||||
export * from './lib/types/service';
|
||||
|
||||
export * from './lib/ucap-file-protocol.module';
|
||||
|
|
Loading…
Reference in New Issue
Block a user