聊天软件的用户消息结构设计

聊天软件的用户消息结构设计

type
  /// <summary>
  /// 消息,
  /// 消息分为:文字、图片、文件。
  /// </summary>
  TMyMSG = record
    IsMSG: Boolean;                          // 是文字消息?
    MSG: string;                             // 文字消息
    IsFile: Boolean;                         // 是文件?
    FileName: string;                        // 文件名
    FileStream: TStream;                     // 文件流
    IsPicture: Boolean;                      // 是图片?
    PictureName: string;                     // 图片名字
    PictureStream: TStream;                  // 图片流
    Time: TDateTime;                         // 时间
    Command: string;                         // 命令字
    SenderId, SenderName: string;            // 发送方
    ReceiverId, ReceiverName: string;        // 接收方
  end;

type
  /// <summary>
  /// 用户消息对象,
  /// 每个用户都有属于自己的消息队列
  /// </summary>
  TUserMsg = record
  private
     FMSGQueue: TQueue<TMyMSG>;
    function GetMsgCount: Integer;
  public
    procedure Create;
    procedure Free;
    procedure EnQueue(AMyMsg: TMyMSG);
    function DeQueue: TMyMSG;
    property MsgCount: Integer read GetMsgCount;
  end;

  FMsgDict: TDictionary<string, TUserMsg>;  // 用户消息字典

procedure TynTcpMethod.RecvMSG;
var
  LUserMsg: TUserMsg;
  LMyMsg: TMyMSG;
begin
  if FMsgDict.TryGetValue(FMsgPack.ForcePathObject('senderid').AsString, LUserMsg) then // 查字典
  begin
    LMyMsg.IsMSG := true;
    LMyMsg.MSG := FMsgPack.ForcePathObject('msg').AsString;
    LMyMsg.IsFile := False;
    LMyMsg.IsPicture := False;
    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;

  

转载于:https://www.cnblogs.com/hnxxcxg/p/9929464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值