egametang/ET · error · Exception

router manager address is empty.

Error message

router manager address is empty.

What it means

Thrown by ClientSenderComponentSystem.LoginAsync when the address parameter for the router manager is null, empty, or whitespace. The router manager address is required to create the NetClient fiber that handles the actual login connection.

Source

Thrown at Packages/cn.etetet.login/Scripts/Hotfix/Client/Login/ClientSenderComponentSystem.cs:46

            long fiberId = self.fiberId;
            self.fiberId = 0;
            await self.Fiber().RemoveFiber(fiberId);
        }

        public static async ETTask DisposeAsync(this ClientSenderComponent self)
        {
            EntityRef<ClientSenderComponent> selfRef = self;
            await self.RemoveFiberAsync();
            self = selfRef;
            self?.Dispose();
        }

        public static async ETTask<long> LoginAsync(this ClientSenderComponent self, string address, string account, string password)
        {
            EntityRef<ClientSenderComponent> selfRef = self;
            if (string.IsNullOrWhiteSpace(address))
            {
                throw new Exception("router manager address is empty.");
            }

            self.fiberId = await self.Fiber().CreateFiber(SchedulerType.ThreadPool, IdGenerater.Instance.GenerateId(), SceneType.NetClient, "NetClient");
            self = selfRef;
            self.FiberInstanceId = new FiberInstanceId(self.fiberId);

            Main2NetClient_Login main2NetClientLogin = Main2NetClient_Login.Create();
            main2NetClientLogin.OwnerFiberId = self.Fiber().Id;
            main2NetClientLogin.Account = account;
            main2NetClientLogin.Password = password;
            main2NetClientLogin.Address = address;
            
            NetClient2Main_Login response = await self.Root().GetComponent<ProcessInnerSender>().Call(self.FiberInstanceId, main2NetClientLogin) as NetClient2Main_Login;
            
            return response.PlayerId;
        }

        public static void Send(this ClientSenderComponent self, IMessage message)

View on GitHub (pinned to 5cab01f7a8)

Solutions

  1. Set the router manager address in the login configuration or pass a valid address to LoginAsync.
  2. Validate the address is non-empty before calling LoginAsync — show a UI error if blank.
  3. Check config loading logs to ensure the address field was deserialized correctly.

Example fix

// before
if (string.IsNullOrWhiteSpace(address))
    throw new Exception("router manager address is empty.");
// caller validation before the call
if (string.IsNullOrWhiteSpace(address))
{
    Log.Error("router manager address is empty");
    return 0;
}
Defensive patterns

Strategy: validation

Validate before calling

// Validate address before calling LoginAsync
if (string.IsNullOrWhiteSpace(address))
{
    Log.Error("Router manager address is empty — check login config");
    // show user-facing error or use default address
    return;
}

Prevention

When it happens

Trigger: LoginAsync is called with an empty or whitespace-only address string. Typically the address comes from config or a UI input field; if that source is not populated, the guard fires.

Common situations: Router manager address not configured in the login config or start config. UI text field for server address was left blank by the user. Config deserialization failed silently and the address field defaulted to null/empty.

Related errors


AI-assisted analysis of egametang/ET@5cab01f7a8 (2026-08-13). Data as JSON: /api/errors/938ea22a2d7ab470. Report an issue: GitHub.