msgpack的数据序列和还原

msgpack不仅可以序列一些常规的数据类型的数据,比如:string、datetime、integer。。。。。。

还能序列olevariant、stream

这就非常强大而完美了。

procedure TynTcpMethod.SendPicture(AReceiverID: string; APicture: TMemoryStream);
var
LMsgPack: TSimpleMsgPack;
LStream: TMemoryStream;
begin
LMsgPack := TSimpleMsgPack.Create;
LStream := TMemoryStream.Create;
try
LMsgPack.clear;
LMsgPack.ForcePathObject('command').AsString := 'picture';
LMsgPack.ForcePathObject('senderid').AsString := User.UserID;
LMsgPack.ForcePathObject('sendername').AsString := User.UserName;
LMsgPack.ForcePathObject('receiverid').AsString := AReceiverID;
LMsgPack.ForcePathObject('picture').LoadBinaryFromStream(APicture); // 流序列图片或文件
LMsgPack.ForcePathObject('time').AsDateTime := Now;
LMsgPack.EncodeToStream(LStream);
LStream.Position := 0;
IdTCPClient1.IOHandler.Write(LStream, LStream.Size, True);
finally
LMsgPack.Free;
LStream.Free;
end;
end;
procedure TynTcpMethod.RecvPicture;
var
LUserMsg: TUserMsg;
LMyMsg: TMyMSG;
begin
if FMsgDict.TryGetValue(FMsgPack.ForcePathObject('senderid').AsString, LUserMsg) then // 查字典
begin
LMyMsg.IsMSG := False;
LMyMsg.IsFile := False;
LMyMsg.IsPicture := True;
LMyMsg.PictureStream := TMemoryStream.Create;
FMsgPack.ForcePathObject('picture').SaveBinaryToStream(LMyMsg.PictureStream); LMyMsg.Time := FMsgPack.ForcePathObject('time').AsDateTime;
LMyMsg.Command := FMsgPack.ForcePathObject('command').AsString;
LMyMsg.SenderId := FMsgPack.ForcePathObject('senderid').AsString;
LMyMsg.SenderName := FMsgPack.ForcePathObject('sendername').AsString;
LMyMsg.ReceiverId := FMsgPack.ForcePathObject('receiverid').AsString;
LUserMsg.EnQueue(LMyMsg); // 消息入队
end;
end;

  

msgpack的数据序列和还原的更多相关文章

  1. cross socket和msgpack的数据序列和还原

    cross socket和msgpack的数据序列和还原 procedure TForm1.Button1Click(Sender: TObject); begin var pack: TSimple ...

  2. 优秀的数据序列和还原类----TSimpleMsgPack

    优秀的数据序列和还原类----TSimpleMsgPack TSimpleMsgPack是D10天地弦的作品. 优点:至简,就一个单元文件实现,不需要引用其他单元. 缺点:不是标准的MSGPACK实现 ...

  3. DATASNAP高效的FIREDAC数据序列和还原

    变量定义: varFDConnection: TFDConnection;qCustomers: TFDQuery; qOrders: TFDQuery;FDSchemaAdapter: TFDSch ...

  4. firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集

    使用流做中转 procedure CopyDataSet(const ASource, ADest: TFDAdaptedDataSet);var LStream: TStream;begin LSt ...

  5. MSGPACK序列和还原TFDParams

    MSGPACK序列和还原TFDParams unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, S ...

  6. ARIMA模型——本质上是error和t-?时刻数据差分的线性模型!!!如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

    https://www.cnblogs.com/bradleon/p/6827109.html 文章里写得非常好,需详细看.尤其是arima的举例! 可以看到:ARIMA本质上是error和t-?时刻 ...

  7. QJSON封装好的序列和还原方法

    QJSON封装好的序列和还原方法 {*******************************************************}{ }{ QJSON与数据集互转 }{ }{ 版权所 ...

  8. TynSerial序列(还原)TFDMemTable

    TynSerial序列(还原)TFDMemTable 1)TFDMemTable查询数据 procedure TForm1.Qrys(accountno, sql, sql2: string; Dat ...

  9. TynSerial序列(还原)TClientDataSet

    TynSerial序列(还原)TClientDataSet 可以一次性序列(还原)多个TClientDataSet. 1)TClientDataSet查询数据 procedure TForm1.Qry ...

随机推荐

  1. CentOS版本区别及 Linux目录结构及其详解

    CentOS 7.0体验与之前版本的不同http://www.linuxidc.com/Linux/2014-07/104196.htm CentOS版本选择http://www.centoscn.c ...

  2. 解决win10 关键错误开始菜单和cortana无法工作 的问题

    问题描述: 一次强制关机后出现了这个对话框,注销.重启均无法解决问题 解决过程[因为我用的英文版操作系统,所以截图都是英文,请大家自行对照自己的操作系统]: 1.ctrl+alt+del 打开任务管理 ...

  3. java Set(集合)

    set不保存重复的元素(至于如何判断元素相同则较为复杂,后面将会看到).Set中最常被使用的是测试归属表,你可以很容易地询问某个对象是否在某个Set中,正因如此,查找就成了Set最重要的操作,因此通常 ...

  4. Codeforces 219C Color Stripe(思维+字符串)

    题目链接:http://codeforces.com/problemset/problem/219/C 题目大意: 给出一个字符串,只包含k种字符,问最少修改多少个字符(不增长新的种类)能够得到一个新 ...

  5. 为什么要做A.prototype.constructor=A这样的修正?

    问题 虽然看过这篇博文JavaScript prototype之后对原型理解不再那么模糊了,但是依然还有很多理解不甚透彻的地方.比如,今天看到一个原型式继承的例子,又有些困惑,于是找了些帖子看看,有了 ...

  6. Git(五)IDEA应用Git

    一.IDEA客户端git 1.提交代码到本地仓库 1. 关联Git,创建本地库 关联git 配置git环境变量 设置本地仓库目录,一般是IDEA工作空间,选择VCS->Import into V ...

  7. 【LOJ】#2126. 「HAOI2015」数组游戏

    题解 简单分析一下就知道\(\lfloor \frac{N}{i} \rfloor\)相同的\(i\)的\(sg\)函数相同 所以我们只要算\(\sqrt{n}\)个\(sg\)函数就好 算每一个\( ...

  8. Codeforces 280C Game on Tree 期望

    Game on Tree 这种题好像在wannfly训练营讲过, 我怎么又不会写啦, 我好菜啊啊啊. 我们按每个点算贡献, 一个点有贡献就说明它是被选中的点, 那么它被选中的概率就为1 / depth ...

  9. C#并行编程(4):基于任务的并行

    C#中的任务Task 在C#编程中,实现并行可以直接使用线程,但使用起来很繁琐:也可以使用线程池,线程池很大程度上简化了线程的使用,但是也有着一些局限,比如我们不知道作业什么时候完成,也取不到作业的返 ...

  10. maven自定义脚手架(快速生成项目)

    Maven之自定义archetype生成项目骨架 利用脚手架生成 新项目 命令行方式 mvn archetype:generate \ -DarchetypeGroupId=com.xxx \ -Da ...