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;
    

      

  • 相关阅读:
    如何调试在OJ中的代码
    在linux命令行中调试在OJ上的c++代码
    jar包
    stanford core
    decode encode
    访问服务器,远程访问linux主机
    代码18
    删除列表中的元素
    if __name__ == '__main__'
    苹果要求全部新app以及版本号更新必须支持iOS 8 SDK和64-bit
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/9929464.html
Copyright © 2011-2022 走看看