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;
    

      

  • 相关阅读:
    PHP+MySQL
    Appstore排名前十的程序员应用软件
    架构师的平凡之路
    程序员,如何三十而立?
    不懂技术也可以轻松开发一款APP
    php语法学习:轻松看懂PHP语言
    你真的了解软件测试行业吗?
    十个程序员必备的网站推荐
    从更高点看软件开发的侧重点
    php如何实现文件下载
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9929464.html
Copyright © 2011-2022 走看看