private void AddEntry(List <Tuple <string, Color> > entries) { DataInterceptedEventArgs args = _intercepted.Dequeue(); if (!IsLoggingAuthorized(args)) { return; } if (args.IsBlocked) { entries.Add(Tuple.Create("[Blocked]\r\n", FilterHighlight)); } if (!args.IsOriginal) { entries.Add(Tuple.Create("[Replaced]\r\n", FilterHighlight)); } if (IsDisplayingTimestamp) { entries.Add(Tuple.Create($"[{args.Timestamp:M/d H:mm:ss}]\r\n", DetailHighlight)); } MessageItem message = GetMessage(args); if (IsDisplayingHash && message != null && !string.IsNullOrWhiteSpace(message.Hash)) { entries.Add(Tuple.Create($"[{message.Hash}]\r\n", DetailHighlight)); } if (IsDisplayingHexadecimal) { string hex = BitConverter.ToString(args.Packet.ToBytes()); entries.Add(Tuple.Create($"[{hex.Replace("-", string.Empty)}]\r\n", DetailHighlight)); } string arrow = "->"; string title = "Outgoing"; Color entryHighlight = OutgoingHighlight; if (!args.IsOutgoing) { arrow = "<-"; title = "Incoming"; entryHighlight = IncomingHighlight; } entries.Add(Tuple.Create(title + "[", entryHighlight)); entries.Add(Tuple.Create(args.Packet.Id.ToString(), DetailHighlight)); if (message != null) { if (IsDisplayingMessageName) { entries.Add(Tuple.Create(", ", entryHighlight)); entries.Add(Tuple.Create(message.Class.QName.Name, DetailHighlight)); } if (IsDisplayingParserName && message.Parser != null) { entries.Add(Tuple.Create(", ", entryHighlight)); entries.Add(Tuple.Create(message.Parser.QName.Name, DetailHighlight)); } } entries.Add(Tuple.Create("]", entryHighlight)); entries.Add(Tuple.Create($" {arrow} ", DetailHighlight)); entries.Add(Tuple.Create($"{args.Packet}\r\n", entryHighlight)); if (IsDisplayingStructure && message?.Structure?.Length >= 0) { int position = 0; HPacket packet = args.Packet; string structure = ("{id:" + packet.Id + "}"); foreach (string valueType in message.Structure) { switch (valueType.ToLower()) { case "int": structure += ("{i:" + packet.ReadInt32(ref position) + "}"); break; case "string": structure += ("{s:" + packet.ReadUTF8(ref position) + "}"); break; case "double": structure += ("{d:" + packet.ReadDouble(ref position) + "}"); break; case "byte": structure += ("{b:" + packet.ReadByte(ref position) + "}"); break; case "boolean": structure += ("{b:" + packet.ReadBoolean(ref position) + "}"); break; } } if (packet.GetReadableBytes(position) == 0) { entries.Add(Tuple.Create(structure + "\r\n", StructureHighlight)); } } entries.Add(Tuple.Create("--------------------\r\n", DetailHighlight)); }