protected override void HandleCommon(Session session, PacketReader packet) { packet.ReadByte(); byte function = packet.ReadByte(); if (function == 1) { // Some random data that isn't text... // Example: 56 00 00 01 03 03 00 66 70 73 9B D2 6A 42 29 73 07 44 A3 45 00 00 00 00 00 00 00 00 70 42 03 00 6D 65 6D BC 2E 01 45 B4 FA B3 43 A3 45 00 00 00 A0 FE 44 00 80 01 45 03 00 6C 61 74 00 00 00 00 00 00 00 00 A3 45 00 00 00 00 00 00 00 00 00 00 return; } try { StringBuilder builder = new(); while (packet.Available > 2) { string message = packet.ReadUnicodeString(); if (message.Contains("exception")) { // Read remaining string string debug = packet.ReadUnicodeString(); SockExceptionInfo exceptionInfo = ErrorParser.Parse(debug); Logger.Error("[{message}] [SendOp: {sendOp}] [Offset: {offset}] [Hint: {hint}]", message, exceptionInfo.SendOp, exceptionInfo.Offset, exceptionInfo.Hint); session.OnError?.Invoke(session, debug); return; } builder.Append(message); } Logger.Warning("Client Log: {builder}", builder); } catch (Exception ex) { Logger.Error("Error parsing DEBUG_MSG packet:{packet} f({function}), {ex}", packet, function, ex); } }
private void AppendAndRetry(object session, string err) { SockExceptionInfo info = ParseError(err); Debug.Assert(OpCode == info.Type, $"Error for unexpected op code:{info.Type:X4}"); Debug.Assert(Packet.Length + HEADER_LENGTH == info.Offset, $"Offset:{info.Offset} does not match Packet length:{Packet.Length + HEADER_LENGTH}"); if (Overrides.ContainsKey(info.Offset)) { SockHintInfo @override = Overrides[info.Offset]; Debug.Assert(@override.Hint == info.Hint, $"Override does not match expected hint:{info.Hint}"); @override.Update(Packet); Logger.Info(info.Hint.GetScript($"{@override.Name}+{info.Offset}")); } else { new SockHintInfo(info.Hint, DefaultValue).Update(Packet); Logger.Info(info.Hint.GetScript($"Unknown+{info.Offset}")); } (session as Session)?.Send(Packet); }