### Configure HermesProxy via Command Line Source: https://github.com/xian55/hermesproxy/blob/master/README.md Examples of overriding settings, using custom configuration files, and enabling metrics. ```bash # Use a custom appsettings file HermesProxy --config MyServer.json # Override server address (native section:key syntax) HermesProxy --LegacyServerOptions:Address=logon.example.com # Override multiple values HermesProxy --LegacyServerOptions:Address=logon.example.com --LegacyServerOptions:Port=3725 # Legacy --set form still works HermesProxy --set ServerAddress=logon.example.com --set ServerPort=3725 # Run with latency metrics enabled (a summary is written to the log every 60 seconds) HermesProxy --metrics # Metrics + verbose packet capture, handy when profiling a suspicious opcode HermesProxy --metrics --LoggingOptions:PacketLevel=Debug ``` -------------------------------- ### Log Line Example Source: https://github.com/xian55/hermesproxy/blob/master/docs/logging.md A concrete example of a packet-flow log entry showing the various components and their associated colors. ```text 17:09:19 | W | P | WorldSocket | C>P S | No handler for opcode CMSG_BATTLE_PAY_GET_PURCHASE_LIST (14019) ▲ ▲ ▲ ▲ ▲ ▲ ▲ │ │ │ │ │ │ └── number, yellow │ │ │ │ │ └── string, bright cyan │ │ │ │ └── optional network-direction tag (only on packet-flow events) │ │ │ └── caller file (class name, padded to 15 chars) — always default color │ │ └── category letter — blue(S) / green(N) / cyan(T) / magenta(P) │ └── severity letter — yellow(W) / red(E,F) / gray(V,D) / default(I) └── local clock (24h) ``` -------------------------------- ### Example Configuration JSON Source: https://github.com/xian55/hermesproxy/blob/master/README.md A comprehensive JSON configuration file defining client, server, network, logging, and diagnostic options for HermesProxy. ```json { "ClientOptions": { "ClientBuild": "V2_5_2_40892", "SeedHex": "179D3DC3235629D07113A9B3867F97A7", "ReportedOS": "OSX", "ReportedPlatform": "x86" }, "LegacyServerOptions": { "Build": "auto", "Address": "127.0.0.1", "Port": 3724 }, "ProxyNetworkOptions": { "ExternalAddress": "127.0.0.1", "RestPort": 8081, "BNetPort": 1119, "RealmPort": 8084, "InstancePort": 8086 }, "LoggingOptions": { "MinimumLevel": "Information", "ServerLevel": "Information", "NetworkLevel": "Information", "StorageLevel": "Information", "PacketLevel": "Warning", "ConsoleLevel": "Information", "ToFile": true, "Directory": "Logs" }, "DiagnosticsOptions": { "PacketsLog": true, "EnableMetrics": false, "EnableVersionCheck": true } } ``` -------------------------------- ### Latency Metrics Log Output Source: https://github.com/xian55/hermesproxy/blob/master/README.md Example of the log format produced when the --metrics flag is enabled. ```text 17:42:14 | I | S | Server | Latency Metrics: 842 C->S opcodes, 1203 S->C opcodes tracked 17:42:14 | I | S | Server | ``` -------------------------------- ### HermesProxy Log Output Format Source: https://github.com/xian55/hermesproxy/blob/master/docs/logging.md Example of the structured log output showing timestamp, severity, category, source, and message content. ```text 17:00:33 | I | S | Server | Starting WorldSocket service on 127.0.0.1:8086... 17:00:34 | I | S | BnetTcpSession | Accepting connection from 127.0.0.1:49695. 17:09:19 | W | P | WorldSocket | C>P S | No handler for opcode CMSG_BATTLE_PAY_GET_PURCHASE_LIST (14019) (Got unknown packet from ModernClient) ``` -------------------------------- ### Build and Run Commands Source: https://github.com/xian55/hermesproxy/blob/master/CLAUDE.md Standard CLI commands for building, running, testing, and benchmarking the HermesProxy solution. ```bash dotnet build # Build all projects dotnet run --project HermesProxy # Run the proxy dotnet test # Run all tests dotnet run --project HermesProxy.Benchmarks -c Release -- --filter "*Name*" # Run benchmarks ``` -------------------------------- ### Build and Run HermesProxy Source: https://github.com/xian55/hermesproxy/blob/master/HermesProxy/CLAUDE.md Commands to execute the proxy with various configuration options and flags. ```bash dotnet run --project HermesProxy dotnet run --project HermesProxy -- --config path/to/config dotnet run --project HermesProxy -- --set ServerAddress=logon.example.com --no-version-check dotnet run --project HermesProxy -- --metrics ``` -------------------------------- ### Run BenchmarkDotNet commands Source: https://github.com/xian55/hermesproxy/blob/master/HermesProxy.Benchmarks/CLAUDE.md Commands to execute, filter, or list benchmarks within the project. Always use the Release configuration to avoid BenchmarkDotNet errors. ```bash # Run all benchmarks dotnet run --project HermesProxy.Benchmarks -c Release # Filter by class name dotnet run --project HermesProxy.Benchmarks -c Release -- --filter "*SpanPacket*" # List available benchmarks dotnet run --project HermesProxy.Benchmarks -c Release -- --list flat ``` -------------------------------- ### Run HermesProxy Tests Source: https://github.com/xian55/hermesproxy/blob/master/HermesProxy.Tests/CLAUDE.md Commands to execute the test suite using the .NET CLI. ```bash dotnet test # Run all tests from repo root dotnet test HermesProxy.Tests # Run this project only dotnet test --filter "ClassName" # Filter by class or method name ``` -------------------------------- ### Enable Movement Tracing via Environment Variables Source: https://github.com/xian55/hermesproxy/blob/master/docs/logging.md Set the HERMES_TRACE_MOVEMENT environment variable before launching the proxy to enable detailed movement packet logging. ```bash # Linux / macOS HERMES_TRACE_MOVEMENT=1 dotnet run --project HermesProxy ``` ```powershell # Windows PowerShell $env:HERMES_TRACE_MOVEMENT='1'; dotnet run --project HermesProxy ``` -------------------------------- ### Log Line Structure Source: https://github.com/xian55/hermesproxy/blob/master/docs/logging.md The standard format for every log entry in the system. ```text HH:mm:ss | L | C | SourceFile | [NetDir | ] message ``` -------------------------------- ### Run Generated Serializer Tests Source: https://github.com/xian55/hermesproxy/blob/master/wotlk.md Execute tests specifically targeting the generated serializers using the dotnet CLI. ```bash dotnet test --filter Category=GeneratedSerializers ``` -------------------------------- ### WriteCreateObjectData Implementation for V3_4_3_54261 Source: https://github.com/xian55/hermesproxy/blob/master/HermesProxy.Tests/SourceGen/ObjectUpdateBuilderGeneratorTests.WriteCreateObjectData_V3_4_3_54261.verified.txt This method serializes EntryID, DynamicFlags, and Scale into the provided WorldPacket. It uses default values for nullable fields. ```csharp // #nullable enable namespace HermesProxy.World.Objects.Version.V3_4_3_54261; public partial class ObjectUpdateBuilder { private void WriteCreateObjectData(HermesProxy.World.WorldPacket data) { var obj = _updateData.ObjectData; data.WriteInt32(obj.EntryID.GetValueOrDefault()); data.WriteUInt32(obj.DynamicFlags.GetValueOrDefault()); data.WriteFloat(obj.Scale ?? 1f); } } ``` -------------------------------- ### Configure Logging via CLI Flags Source: https://github.com/xian55/hermesproxy/blob/master/docs/logging.md Use the --set flag to override logging settings at runtime. Multiple flags can be chained to customize console, file, and category-specific verbosity. ```bash # Capture packet-level debug detail in the log file while keeping the console quiet. # Ideal default for "always-on" logging — when a user reports an issue, ask for # Logs/hermes-YYYYMMDD.log and you already have the Debug-level context. HermesProxy --set Log.Packet.MinimumLevel=Debug --set Log.Console.MinimumLevel=Information # Crank everything to maximum verbosity (console included) for interactive debugging. HermesProxy --set Log.MinimumLevel=Verbose --set Log.Console.MinimumLevel=Verbose --set Log.Packet.MinimumLevel=Verbose # Enable per-packet SpanStats output to the file only (useful for profiling packet serialization). HermesProxy --set Log.Packet.MinimumLevel=Verbose --set Log.Console.MinimumLevel=Information # Reduce noise on a long-running proxy — warnings and above only, even in the file. HermesProxy --set Log.MinimumLevel=Warning --set Log.Console.MinimumLevel=Warning # Silence the Packet category entirely (e.g. when you're debugging auth and don't care about # "No handler for opcode" warnings), while leaving Server/Network/Storage at defaults. HermesProxy --set Log.Packet.MinimumLevel=Error # Opt out of the rolling file sink if disk writes are undesirable (headless containers, etc.). HermesProxy --set Log.ToFile=false # Point the file sink at a different location. HermesProxy --set Log.Directory=D:/HermesLogs # Legacy flags still work via the back-compat shortcuts. HermesProxy --set DebugOutput=true # == Log.MinimumLevel=Debug + Log.Console.MinimumLevel=Debug HermesProxy --set SpanStatsLog=true # == Log.Packet.MinimumLevel=Verbose ``` -------------------------------- ### Configure Generated File Emission Source: https://github.com/xian55/hermesproxy/blob/master/wotlk.md Enable the emission of compiler-generated files to the obj/GeneratedFiles/ directory for debugging purposes. ```xml true ``` -------------------------------- ### Disable autoRangedCombat CVar Source: https://github.com/xian55/hermesproxy/blob/master/docs/known-issues.md Use these commands to prevent the client from automatically cancelling wand attacks when a target enters melee range. ```text /console autoRangedCombat 0 ``` ```text SET autoRangedCombat "0" ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.