{"record":{"id":"3bf7188ba85834c7","repo":"egametang/ET","slug":"process-fiber-address-not-found-scenetype-scene","errorCode":null,"errorMessage":"process fiber address not found, sceneType: {sceneType}","messagePattern":"process fiber address not found, sceneType: (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"Packages/cn.etetet.core/Scripts/Core/Share/World/Fiber/ProcessFiberAddressSingleton.cs","lineNumber":50,"sourceCode":"            }\n\n            if (existing == fiberInstanceId)\n            {\n                return;\n            }\n\n            throw new Exception(\n                $\"process fiber address already registered, sceneType: {sceneType}, existing: {existing}, new: {fiberInstanceId}\");\n        }\n\n        public FiberInstanceId Get(int sceneType)\n        {\n            if (this.TryGet(sceneType, out FiberInstanceId fiberInstanceId))\n            {\n                return fiberInstanceId;\n            }\n\n            throw new Exception($\"process fiber address not found, sceneType: {sceneType}\");\n        }\n\n        public bool TryGet(int sceneType, out FiberInstanceId fiberInstanceId)\n        {\n            return this.fiberInstanceIds.TryGetValue(sceneType, out fiberInstanceId);\n        }\n\n        public void Unregister(int sceneType, FiberInstanceId fiberInstanceId)\n        {\n            if (!this.fiberInstanceIds.TryGetValue(sceneType, out FiberInstanceId existing))\n            {\n                return;\n            }\n\n            if (existing != fiberInstanceId)\n            {\n                return;\n            }","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.core/Scripts/Core/Share/World/Fiber/ProcessFiberAddressSingleton.cs#L32-L68","documentation":"ProcessFiberAddressSingleton.Get (line 50) throws when no fiber is registered for the requested sceneType. This singleton maps sceneType -> FiberInstanceId for in-process cross-fiber addressing; an unregistered sceneType means the process has no fiber serving that scene type to route to.","triggerScenarios":"Calling addressSingleton.Get(sceneType) for a sceneType that was never created/registered in this process (e.g. routing a message to a scene type not present in this process's StartConfig), or calling before the target fiber finished registering.","commonSituations":"Cross-process/routing configuration that assumes a scene type exists in a process where it is not configured, startup ordering (Get called before Register), wrong sceneType id, or a process role mismatch.","solutions":["Confirm the sceneType is actually configured to run in this process (StartSceneConfig for the process/role).","Ensure Get is called after the target fiber has registered (check startup ordering).","Use TryGet(sceneType, out _) before Get to handle the absent case gracefully.","Verify the sceneType id matches between the router and the scene config."],"exampleFix":"// before\nFiberInstanceId id = addressSingleton.Get(sceneType);\n\n// after\nif (!addressSingleton.TryGet(sceneType, out FiberInstanceId id))\n{ Log.Warning($\"no process fiber for sceneType {sceneType}\"); return; }","handlingStrategy":"validation","validationCode":"if (!addressSingleton.TryGet(sceneType, out var fid))\n    throw new InvalidOperationException($\"sceneType {sceneType} not registered in this process\");","typeGuard":"static bool HasProcessFiber(ProcessFiberAddressSingleton s, int sceneType) => s.TryGet(sceneType, out _);","tryCatchPattern":null,"preventionTips":["Use TryGet before Get for cross-fiber routing.","Verify sceneType is configured for this process role.","Register fibers before any router can issue Get."],"tags":["fiber","routing","config","startup-ordering"],"backgroundTag":null,"analyzedSha":"5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f","analyzedAt":"2026-08-13T21:10:40.377Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}