Program.cs 5.1 KB
Newer Older
1
using System;
2
using System.Net;
3
using System.Threading;
4
using Model;
5
using NLog;
6 7 8

namespace App
{
T
tanghai 已提交
9
	internal static class Program
10
	{
T
tanghai 已提交
11
		private static void Main(string[] args)
12
		{
13
			// 异步方法全部会回掉到主线程
14 15
			OneThreadSynchronizationContext contex = new OneThreadSynchronizationContext();
			SynchronizationContext.SetSynchronizationContext(contex);
16

17 18
			MongoHelper.Init();
			
19 20
			try
			{
21 22
				ObjectEvents.Instance.Add("Model", typeof(Game).Assembly);
				ObjectEvents.Instance.Add("Hotfix", DllHelper.GetHotfixAssembly());
23

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

27
				if (!options.AppType.Is(startConfig.AppType))
T
tanghai 已提交
28 29 30 31 32
				{
					Log.Error("命令行参数apptype与配置不一致");
					return;
				}

33
				IdGenerater.AppId = options.AppId;
34

35
				LogManager.Configuration.Variables["appType"] = startConfig.AppType.ToString();
36
				LogManager.Configuration.Variables["appId"] = startConfig.AppId.ToString();
37 38
				LogManager.Configuration.Variables["appTypeFormat"] = $"{startConfig.AppType,-8}";
				LogManager.Configuration.Variables["appIdFormat"] = $"{startConfig.AppId:D3}";
39 40

				Log.Info("server start........................");
41 42

				Game.Scene.AddComponent<OpcodeTypeComponent>();
T
tanghai 已提交
43
				Game.Scene.AddComponent<MessageDispatherComponent>();
44

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

114 115
				while (true)
				{
116 117
					try
					{
118
						Thread.Sleep(1);
119
						contex.Update();
120
						ObjectEvents.Instance.Update();
121 122 123 124 125
					}
					catch (Exception e)
					{
						Log.Error(e.ToString());
					}
126 127 128 129 130 131 132 133 134
				}
			}
			catch (Exception e)
			{
				Log.Error(e.ToString());
			}
		}
	}
}