Diocp学习笔记 1、通讯传值(DELPHI 通讯框架)

一、传输

事例里的客户端与服务端是通过自定义的的数据结构进行传输(事例里带的 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进行的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值