一、传输
事例里的客户端与服务端是通过自定义的的数据结构进行传输(事例里带的 TSimpleMsgPack)
创建:
CMDObject: TSimpleMsgPack;
添加值:
1》
CMDObject.Clear;
CMDObject.ForcePathObject('cmdIndex').AsInteger := 5;
读取值:
1》
vReqUserID := AMsgPackFrom.ForcePathObject('requestID').AsString;
2》
lvCMDObj.O['cmdIndex']
3》取有子数组时(与下面的数组方式对应)
vUserCount := AMsgPack.ForcePathObject('list').Count; // 用户数
lvUser.Items.BeginUpdate;
try
for i := 0 to vUserCount - 1 do
begin
vListItem := lvUser.Items.Add;
vListItem.Caption := AMsgPack.ForcePathObject('list').Items[i].ForcePathObject('user.id').AsString; // 用户ID
vListItem.SubItems.Add(AMsgPack.ForcePathObject('list').Items[i].ForcePathObject('user.name').AsString); // 用户名
end;
finally
lvUser.Items.EndUpdate;
end;
数组或对象的添加
(特别注意,服务端在接收到客户端的请求时可以通过SELF对象直接调用WriteObject返回给客户端数据,那么需要对数据进行处理并回传给客户端,1或以通过新建TSimpleMsgPack对象进行回传
或者直接在对象里AddArrayChild数组,之后将对象重新回传也可以
事例时面是通过调用等操作将客户端的值添加了LIST的数组对象并将整个回传,如果不需要可以通过函数的返回值返回相应对象)
1》
var
vMsgList, lvItem: TSimpleMsgPack;
begin
vMsgList := AMsgPackFrom.ForcePathObject('list');
for i := 0 to lvUser.Items.Count - 1 do
begin
if lvUser.Items[i].Caption <> vReqUserID then
begin
lvItem := vMsgList.AddArrayChild;
lvItem.ForcePathObject('user.id').AsString := lvUser.Items[i].Caption;
lvItem.ForcePathObject('user.name').AsString := lvUser.Items[i].SubItems[0];
if lvUser.Items[i].SubItems[2] = '在线' then
lvItem.ForcePathObject('user.state').AsInteger := 1
else
lvItem.ForcePathObject('user.state').AsInteger := 0;
end;
end;
#### 加密解密(就是从数据类型和流之间的转换)
1、在发送时都需要进行加密操作
```
var
lvMS:TMemoryStream;
begin
lvMS := TMemoryStream.Create;
AMsgPack.EncodeToStream(lvMS); //AMsgPack是定义好的数据
lvContext.WriteObject(lvMS);//之后就可以发送了
end;
```
2、在接收时进行角密
```
var
lvCMDObj: TSimpleMsgPack;
begin
lvCMDObj := TSimpleMsgPack.Create;
TMemoryStream(pvObject).Position := 0;
lvCMDObj.DecodeFromStream(TMemoryStream(pvObject)); // 解密消息
//解密后就可以直接读取了
lvCMDIndex := pvCMDObject.ForcePathObject('cmdIndex').AsInteger;
end;
```
使用的是通讯框架下面地址
https://download.youkuaiyun.com/download/z123191456/11021119
里面的diocp-v5-master\samples\ChatDEMO By 彩蛋 DEMO进行的学习。