12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System.Net;
- using System.Net.Sockets;
- namespace ET.Server
- {
- public static class SceneFactory
- {
- public static async ETTask<Scene> CreateServerScene(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<MailBoxComponent, MailboxType>(MailboxType.UnOrderMessageDispatcher);
- switch (scene.SceneType)
- {
- case SceneType.Router:
- // 云服务器中,一般来说router要单独部署,不过大家经常放在一起,那么下面要修改
- // startSceneConfig.OuterIPPort改成startSceneConfig.InnerIPOutPort
- // 然后云服务器防火墙把端口映射过来
- scene.AddComponent<RouterComponent, IPEndPoint, string, NetworkProtocol>(
- startSceneConfig.InnerIPOutPort,
- startSceneConfig.StartProcessConfig.InnerIP,
- NetworkProtocol.TCP
- );
- break;
- case SceneType.RouterManager: // 正式发布请用CDN代替RouterManager
- // 云服务器在防火墙那里做端口映射
- scene.AddComponent<HttpComponent, string>($"http://+:{startSceneConfig.OuterPort}/");
- break;
- case SceneType.Realm:
- scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
- scene.AddComponent<UserSessionComponent>();
- break;
- case SceneType.Game:
- ConstGame.GameServerId = startSceneConfig.Id;
- ConstGame.GameServerUUID = System.Guid.NewGuid().ToString();
- scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
- scene.AddComponent<GameTokenInfoComponent>();
- scene.AddComponent<GamePlayerComponent>();
- scene.AddComponent<GameMapComponent>();
- // 战斗服的Ice会话组件
- scene.AddComponent<BattleIceAgentComponent>();
- scene.AddComponent<ObjectWait>();
- // 抖音AccessToken组件
- if (Options.Instance.InitAccessToken == 1)
- {
- scene.AddComponent<GameDouyinComponent>();
- }
- break;
- case SceneType.Location:
- scene.AddComponent<LocationComponent>();
- break;
- case SceneType.Robot:
- scene.AddComponent<RobotManagerComponent>();
- break;
- case SceneType.BenchmarkServer:
- scene.AddComponent<BenchmarkServerComponent>();
- scene.AddComponent<NetServerComponent, IPEndPoint, NetworkProtocol>(startSceneConfig.InnerIPOutPort, NetworkProtocol.KCP);
- break;
- case SceneType.BenchmarkClient:
- scene.AddComponent<BenchmarkClientComponent>();
- break;
- }
- return scene;
- }
- }
- }
|