Program.cs 3.0 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
			{
14 15
				Game.ComponentEventManager.Register("Model", typeof(Game).Assembly);
				Game.ComponentEventManager.Register("Controller", DllHelper.GetController());
16

17 18 19 20
				Options options = Game.Scene.AddComponent<OptionComponent>().Options;
				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
				
T
tanghai 已提交
27 28
				Game.Scene.AddComponent<EventComponent>();
				Game.Scene.AddComponent<TimerComponent>();
29
				Game.Scene.AddComponent<MessageDispatherComponent, AppType>(startConfig.AppType);
30

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

67 68
				while (true)
				{
69 70
					try
					{
71
						Game.ComponentEventManager.Update();
72 73 74 75 76
					}
					catch (Exception e)
					{
						Log.Error(e.ToString());
					}
77 78 79 80 81 82 83 84 85
				}
			}
			catch (Exception e)
			{
				Log.Error(e.ToString());
			}
		}
	}
}