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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user