using System.Net; namespace ET.Server { public static class SceneFactory { public static async ETTask Create(Entity parent, string name, SceneType sceneType) { long instanceId = IdGenerater.Instance.GenerateInstanceId(); return await Create(parent, instanceId, instanceId, parent.DomainZone(), name, sceneType); } public static async ETTask Create(Entity parent, long id, long instanceId, int zone, string name, SceneType sceneType, StartSceneConfig startSceneConfig = null) { await ETTask.CompletedTask; Scene scene = EntitySceneFactory.CreateScene(id, instanceId, zone, sceneType, name, parent); scene.AddComponent(MailboxType.UnOrderMessageDispatcher); switch (scene.SceneType) { case SceneType.Router: scene.AddComponent(startSceneConfig.OuterIPPort, startSceneConfig.StartProcessConfig.InnerIP ); break; case SceneType.RouterManager: scene.AddComponent($"http://{startSceneConfig.OuterIPPort}/"); break; case SceneType.Realm: scene.AddComponent(startSceneConfig.InnerIPOutPort, CallbackType.SessionStreamDispatcherServerOuter); break; case SceneType.Gate: scene.AddComponent(startSceneConfig.InnerIPOutPort, CallbackType.SessionStreamDispatcherServerOuter); scene.AddComponent(); scene.AddComponent(); break; case SceneType.Map: scene.AddComponent(); scene.AddComponent(); break; case SceneType.Location: scene.AddComponent(); break; case SceneType.Robot: scene.AddComponent(); break; } return scene; } } }