聊天软件的用户消息结构设计
聊天软件的用户消息结构设计
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