Program.cs 2.9 KB
Newer Older
1 2 3
using System;
using Base;
using Model;
4
using NLog;
5 6 7

namespace App
{
T
tanghai 已提交
8
	internal static class Program
9
	{
T
tanghai 已提交
10
		private static void Main(string[] args)
11 12 13
		{
			try
			{
T
tanghai 已提交
14
				Game.EntityEventManager.Register("Model", typeof(Game).Assembly);
15
				Game.EntityEventManager.Register("Hotfix", DllHelper.GetHotfixAssembly());
16

T
tanghai 已提交
17
				Options options = Game.Scene.AddComponent<OptionComponent, string[]>(args).Options;
18 19 20
				StartConfig startConfig = Game.Scene.AddComponent<StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;

				IdGenerater.AppId = options.AppId;
21

22
				LogManager.Configuration.Variables["appType"] = startConfig.AppType.ToString();
23
				LogManager.Configuration.Variables["appId"] = startConfig.AppId.ToString();
24 25

				Log.Info("server start........................");
26
				
27
				Game.Scene.AddComponent<MessageDispatherComponent, AppType>(startConfig.AppType);
28

T
tanghai 已提交
29
				// 根据不同的AppType添加不同的组件
30
				OuterConfig outerConfig = startConfig.GetComponent<OuterConfig>();
31 32
				InnerConfig innerConfig = startConfig.GetComponent<InnerConfig>();
				ClientConfig clientConfig = startConfig.GetComponent<ClientConfig>();
33
				switch (startConfig.AppType)
T
tanghai 已提交
34
				{
35
					case AppType.Manager:
36
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
37
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
38 39 40
						Game.Scene.AddComponent<AppManagerComponent>();
						break;
					case AppType.Realm:
41
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
42
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
43
						Game.Scene.AddComponent<RealmGateAddressComponent>();
T
tanghai 已提交
44
						break;
45
					case AppType.Gate:
46
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
47
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
48
						Game.Scene.AddComponent<GateSessionKeyComponent>();
T
tanghai 已提交
49
						break;
50
					case AppType.AllServer:
51
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
52 53 54 55 56
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
						Game.Scene.AddComponent<AppManagerComponent>();
						Game.Scene.AddComponent<RealmGateAddressComponent>();
						Game.Scene.AddComponent<GateSessionKeyComponent>();
						break;
57 58
					case AppType.Benchmark:
						Game.Scene.AddComponent<NetOuterComponent>();
T
tanghai 已提交
59
						Game.Scene.AddComponent<BenchmarkComponent, string>(clientConfig.Address);
T
tanghai 已提交
60
						break;
T
tanghai 已提交
61
					default:
62
						throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}");
T
tanghai 已提交
63 64
				}

65 66
				while (true)
				{
67 68
					try
					{
T
tanghai 已提交
69
						Game.EntityEventManager.Update();
70 71 72 73 74
					}
					catch (Exception e)
					{
						Log.Error(e.ToString());
					}
75 76 77 78 79 80 81 82 83
				}
			}
			catch (Exception e)
			{
				Log.Error(e.ToString());
			}
		}
	}
}