zoukankan      html  css  js  c++  java
  • 聊天软件的用户消息结构设计

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

    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;
    

      

  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9929464.html
Copyright © 2011-2022 走看看