コード例 #1
0
    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);
        }
    }
コード例 #2
0
        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);
        }