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

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

type
  /// 
  /// 消息,
  /// 消息分为:文字、图片、文件。
  /// 
  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
  /// 
  /// 用户消息对象,
  /// 每个用户都有属于自己的消息队列
  /// 
  TUserMsg = record
  private
     FMSGQueue: TQueue;
    function GetMsgCount: Integer;
  public
    procedure Create;
    procedure Free;
    procedure EnQueue(AMyMsg: TMyMSG);
    function DeQueue: TMyMSG;
    property MsgCount: Integer read GetMsgCount;
  end;

  FMsgDict: TDictionary;  // 用户消息字典

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

你可能感兴趣的:(聊天软件的用户消息结构设计)