Program.cs 4.9 KB
Newer Older
1
using System;
2
using System.Threading;
3
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 14
			OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();
			SynchronizationContext.SetSynchronizationContext(contex);
15

16 17
			try
			{
18 19
				ObjectEvents.Instance.Add("Model", typeof(Game).Assembly);
				ObjectEvents.Instance.Add("Hotfix", DllHelper.GetHotfixAssembly());
20

T
tanghai 已提交
21
				Options options = Game.Scene.AddComponent<OptionComponent, string[]>(args).Options;
22 23 24
				StartConfig startConfig = Game.Scene.AddComponent<StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig;

				IdGenerater.AppId = options.AppId;
25

26
				LogManager.Configuration.Variables["appType"] = startConfig.AppType.ToString();
27
				LogManager.Configuration.Variables["appId"] = startConfig.AppId.ToString();
28 29

				Log.Info("server start........................");
30 31

				Game.Scene.AddComponent<OpcodeTypeComponent>();
32
				Game.Scene.AddComponent<MessageDispatherComponent, AppType>(startConfig.AppType);
33

T
tanghai 已提交
34
				// 根据不同的AppType添加不同的组件
35
				OuterConfig outerConfig = startConfig.GetComponent<OuterConfig>();
36 37
				InnerConfig innerConfig = startConfig.GetComponent<InnerConfig>();
				ClientConfig clientConfig = startConfig.GetComponent<ClientConfig>();
38
				switch (startConfig.AppType)
T
tanghai 已提交
39
				{
40
					case AppType.Manager:
41
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
42
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
43 44 45
						Game.Scene.AddComponent<AppManagerComponent>();
						break;
					case AppType.Realm:
46 47
						Game.Scene.AddComponent<ActorMessageDispatherComponent>();
						Game.Scene.AddComponent<ActorManagerComponent>();
48
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
49
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
50 51
						Game.Scene.AddComponent<LocationProxyComponent>();
						Game.Scene.AddComponent<ActorComponent>();
52
						Game.Scene.AddComponent<RealmGateAddressComponent>();
T
tanghai 已提交
53
						break;
54
					case AppType.Gate:
55
						Game.Scene.AddComponent<PlayerComponent>();
56 57
						Game.Scene.AddComponent<ActorMessageDispatherComponent>();
						Game.Scene.AddComponent<ActorManagerComponent>();
58
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
59
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
60 61
						Game.Scene.AddComponent<LocationProxyComponent>();
						Game.Scene.AddComponent<ActorComponent>();
T
tanghai 已提交
62
						Game.Scene.AddComponent<ActorProxyComponent>();
63
						Game.Scene.AddComponent<GateSessionKeyComponent>();
T
tanghai 已提交
64
						break;
65 66 67 68
					case AppType.Location:
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
						Game.Scene.AddComponent<LocationComponent>();
						break;
69 70
					case AppType.Map:
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
T
tanghai 已提交
71
						Game.Scene.AddComponent<ActorManagerComponent>();
72 73 74
						Game.Scene.AddComponent<UnitComponent>();
						Game.Scene.AddComponent<LocationProxyComponent>();
						Game.Scene.AddComponent<ActorComponent>();
T
tanghai 已提交
75 76
						Game.Scene.AddComponent<ActorProxyComponent>();
						Game.Scene.AddComponent<ActorMessageDispatherComponent>();
77
						break;
78
					case AppType.AllServer:
79 80
						Game.Scene.AddComponent<ActorProxyComponent>();
						Game.Scene.AddComponent<PlayerComponent>();
81
						Game.Scene.AddComponent<UnitComponent>();
82 83
						Game.Scene.AddComponent<DBComponent>();
						Game.Scene.AddComponent<DBProxyComponent>();
84
						Game.Scene.AddComponent<LocationComponent>();
T
tanghai 已提交
85
						Game.Scene.AddComponent<ActorMessageDispatherComponent>();
86
						Game.Scene.AddComponent<ActorManagerComponent>();
87
						Game.Scene.AddComponent<NetInnerComponent, string, int>(innerConfig.Host, innerConfig.Port);
88
						Game.Scene.AddComponent<NetOuterComponent, string, int>(outerConfig.Host, outerConfig.Port);
89 90
						Game.Scene.AddComponent<LocationProxyComponent>();
						Game.Scene.AddComponent<ActorComponent>();
91
						Game.Scene.AddComponent<AppManagerComponent>();
92 93 94
						Game.Scene.AddComponent<RealmGateAddressComponent>();
						Game.Scene.AddComponent<GateSessionKeyComponent>();
						break;
95 96
					case AppType.Benchmark:
						Game.Scene.AddComponent<NetOuterComponent>();
T
tanghai 已提交
97
						Game.Scene.AddComponent<BenchmarkComponent, string>(clientConfig.Address);
T
tanghai 已提交
98
						break;
T
tanghai 已提交
99
					default:
100
						throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}");
T
tanghai 已提交
101 102
				}

103 104
				while (true)
				{
105 106
					try
					{
107
						Thread.Sleep(1);
108
						contex.Update();
109
						ObjectEvents.Instance.Update();
110 111 112 113 114
					}
					catch (Exception e)
					{
						Log.Error(e.ToString());
					}
115 116 117 118 119 120 121 122 123
				}
			}
			catch (Exception e)
			{
				Log.Error(e.ToString());
			}
		}
	}
}