设为首页 加入收藏

TOP

【笔记本】第二阶段工作完成(二)
2017-10-10 12:05:51 】 浏览:3525
Tags:笔记本 第二 阶段 工作 完成
der);
65 FDiocpContext.OnContextAction:= OnRecvObject; 66 if not FDiocpContext.Active then 67 begin 68 FDiocpContext.Host:= pvHost; 69 FDiocpContext.Port:= pvPort; 70 FDiocpContext.Connect; 71 end; 72 end; 73 74 procedure TSNTFileTransContext.SendCMDObject(pvCMDObject: TSimpleMsgPack); 75 var 76 lvCMDStream:TMemoryStream; 77 begin 78 lvCMDStream := TMemoryStream.Create; 79 try 80 pvCMDObject.EncodeToStream(lvCMDStream); 81 FDiocpContext.WriteObject(lvCMDStream); 82 finally 83 lvCMDStream.Free; 84 end; 85 end; 86 87 function TSNTFileTransContext.GetFileSize(const pvFile: string): Int64; 88 var 89 lvFileStream: TFileStream; 90 begin 91 lvFileStream:= TFileStream.Create(FLocalFile, fmOpenRead); 92 try 93 result:= lvFileStream.Size; 94 finally 95 lvFileStream.Free; 96 end; 97 end; 98 99 procedure TSNTFileTransContext.requestUpload(const pvLocalFile, pvToken: string); 100 var 101 lvMsgData: TSimpleMsgPack; 102 begin 103 lvMsgData:= TSimpleMsgPack.Create; 104 try 105 FLocalFile:= pvLocalFile; 106 lvMsgData.I['service.type'] := MSG_SERVICE_FILE; 107 lvMsgData.I['msg.code'] := MSG_FILE_REQ_UPLOAD; 108 lvMsgData.S['params.filename'] := ExtractFileName(pvLocalFile); 109 lvMsgData.I['params.filesize'] := GetFileSize(pvLocalFile); 110 lvMsgData.S['params.token'] := pvToken; 111 SendCMDObject(lvMsgData); 112 finally 113 FreeAndNil(lvMsgData); 114 end; 115 end; 116 117 procedure TSNTFileTransContext.requestDownload(const pvLocalFile, pvToken: string); 118 var 119 lvMsgData: TSimpleMsgPack; 120 begin 121 lvMsgData:= TSimpleMsgPack.Create; 122 try 123 FLocalFile:= pvLocalFile; 124 lvMsgData.I['service.type'] := MSG_SERVICE_FILE; 125 lvMsgData.I['msg.code'] := MSG_FILE_REQ_DOWNLOAD; 126 lvMsgData.S['params.filename'] := ExtractFileName(pvLocalFile); 127 lvMsgData.S['params.token'] := pvToken; 128 SendCMDObject(lvMsgData); 129 finally 130 FreeAndNil(lvMsgData); 131 end; 132 end; 133 134 function TSNTFileTransContext.upload(const pvRemoteFile, pvToken: string): Int64; 135 begin 136 FFileStream:= TFileStream.Create(FLocalFile, fmOpenRead); 137 FRemoteFile:= pvRemoteFile; 138 uploadNextBlock(pvToken); 139 end; 140 141 procedure TSNTFileTransContext.uploadNextBlock(const pvToken: string); 142 var 143 lvPosition, lvSize: Int64; 144 begin 145 lvPosition:= FFileStream.Position; 146 if (FFileStream.Position = FFileStream.Size) then exit; 147 148 FCMDMsgPack.clear(); 149 FCMDMsgPack.I['service.type'] := MSG_SERVICE_FILE; 150 FCMDMsgPack.I['msg.code'] := MSG_FILE_UPLOADING; 151 FCMDMsgPack.S['params.filename']:= FRemoteFile; 152 FCMDMsgPack.S['params.token'] := pvToken; 153 FCMDMsgPack.I['params.start'] := lvPosition; 154 lvSize:= Min(SEC_SIZE, FFileStream.Size- FFileStream.Position); 155 FCMDMsgPack.ForcePathObject('params.data').LoadBinaryFromStream(FFileStream, lvSize); 156 if (FFileStream.Position = FFileStream.Size) then 157 FCMDMsgPack.B['params.isend'] := True; 158 // 159 FCMDStream.Clear; 160 FCMDMsgPack.EncodeToStream(FCMDStream); 161 FDiocpContext.WriteObject(FCMDStream); 162 end; 163 164 165 function TSNTFileTransContext.download(const pvRemo
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇咏南 DELPHI DATASNAP LINUX中间件 下一篇这两天测试软件发现的问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目