EdgeJS.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. 
  2. using CommonLang;
  3. using CommonLang.Log;
  4. using CommonLang.Property;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Dynamic;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. namespace Pomelo
  11. {
  12. public class EdgeJS
  13. {
  14. private static object locker = new object();
  15. /// <summary>
  16. /// zone接口
  17. /// </summary>
  18. private IZone zone;
  19. /// <summary>
  20. /// 是否初始化
  21. /// </summary>
  22. private bool isInit = false;
  23. /// <summary>
  24. /// 日志
  25. /// </summary>
  26. private Logger log;
  27. /**
  28. public int open_old(ZoneConfig zoneConfig, LogConfig logConfig, IceConfig iceConfig, FastStreamConfig fastStreamConfig)
  29. {
  30. lock (locker)
  31. {
  32. if (this.isInit)
  33. {
  34. return 0;
  35. }
  36. this.isInit = true;
  37. //--------------------------------------------------------------------------------------------------------
  38. //加载所有dll
  39. ReflectionUtil.LoadDlls(new System.IO.DirectoryInfo(zoneConfig.startPath));
  40. //--------------------------------------------------------------------------------------------------------
  41. //创建日志
  42. try
  43. {
  44. LoggerFactory.SetFactory(new PomeloLog(logConfig));
  45. }
  46. catch (Exception err)
  47. {
  48. Console.WriteLine(err.Message);
  49. }
  50. this.log = LoggerFactory.GetLogger("PomeloService");
  51. //--------------------------------------------------------------------------------------------------------
  52. Properties class_config = Properties.LoadFromResource(zoneConfig.startPath + "/class_config.properties");
  53. //--------------------------------------------------------------------------------------------------------
  54. {
  55. //初始化IZone
  56. string zoneClass = class_config.Get("zone");
  57. this.zone = ReflectionUtil.CreateInterface<IZone>(zoneClass);
  58. //启动场景管理器
  59. zone.Start(zoneConfig);
  60. }
  61. //--------------------------------------------------------------------------------------------------------
  62. {
  63. //启动FastStream
  64. FastStream.init(class_config.Get("faststream"));
  65. FastStream.instance().Start(fastStreamConfig, zone);
  66. }
  67. //--------------------------------------------------------------------------------------------------------
  68. { //启动Ice
  69. Dictionary<string, Ice.ObjectImpl> proxys = new Dictionary<string, Ice.ObjectImpl>();
  70. proxys["zoneManager"] = new ZoneManagerI(this.zone);
  71. Properties iceImpConfig = class_config.SubProperties("ice.");
  72. foreach (string key in iceImpConfig.Keys)
  73. {
  74. log.Info(string.Format("load Ice Imp {0} = {1}", key, iceImpConfig[key]));
  75. proxys[key] = ReflectionUtil.CreateInterface<Ice.ObjectImpl>(iceImpConfig[key]);
  76. }
  77. IceManager.instance().Start(iceConfig, proxys);
  78. }
  79. }
  80. // Console.WriteLine("after isTraceNetwork:" + iceConfig.isTraceNetwork);
  81. return 0;
  82. }
  83. */
  84. public int open(ZoneConfig zoneConfig, LogConfig logConfig, IceConfig iceConfig, FastStreamConfig fastStreamConfig)
  85. {
  86. lock (locker)
  87. {
  88. Console.WriteLine("----------------------- 启动服务【" + logConfig.serverId +"】, (" +
  89. fastStreamConfig.port + ", " + iceConfig.port + ")");
  90. if (this.isInit)
  91. {
  92. log.Error("重复启动游戏!");
  93. return 0;
  94. }
  95. this.isInit = true;
  96. //--------------------------------------------------------------------------------------------------------
  97. //加载所有dll
  98. ReflectionUtil.LoadDlls(new System.IO.DirectoryInfo(zoneConfig.startPath));
  99. //--------------------------------------------------------------------------------------------------------
  100. //创建日志
  101. try
  102. {
  103. Console.WriteLine("----------------------- 创建日志");
  104. LoggerFactory.SetFactory(new PomeloLog(logConfig));
  105. }
  106. catch (Exception err)
  107. {
  108. Console.WriteLine(err.Message);
  109. }
  110. this.log = LoggerFactory.GetLogger("PomeloService");
  111. //--------------------------------------------------------------------------------------------------------
  112. Properties class_config = Properties.LoadFromResource(zoneConfig.startPath + "/class_config.properties");
  113. //--------------------------------------------------------------------------------------------------------
  114. {
  115. Console.WriteLine("----------------------- 启动场景管理器");
  116. //初始化IZone
  117. string zoneClass = class_config.Get("zone");
  118. this.zone = ReflectionUtil.CreateInterface<IZone>(zoneClass);
  119. //启动场景管理器
  120. zone.Start(zoneConfig);
  121. }
  122. //--------------------------------------------------------------------------------------------------------
  123. {
  124. Console.WriteLine("----------------------- 启动FastStream");
  125. //启动FastStream
  126. FastStream.init(class_config.Get("faststream"));
  127. FastStream.instance().Start(fastStreamConfig, zone);
  128. }
  129. //--------------------------------------------------------------------------------------------------------
  130. { //启动Ice
  131. Console.WriteLine("----------------------- 启动Ice");
  132. Dictionary<string, Ice.ObjectImpl> proxys = new Dictionary<string, Ice.ObjectImpl>();
  133. proxys["zoneManager"] = new ZoneManagerI(this.zone);
  134. Properties iceImpConfig = class_config.SubProperties("ice.");
  135. foreach (string key in iceImpConfig.Keys)
  136. {
  137. log.Info(string.Format("load Ice Imp {0} = {1}", key, iceImpConfig[key]));
  138. proxys[key] = ReflectionUtil.CreateInterface<Ice.ObjectImpl>(iceImpConfig[key]);
  139. }
  140. IceManager.instance().Start(iceConfig, proxys);
  141. }
  142. //Console.WriteLine("-----------------------END");
  143. }
  144. return 0;
  145. }
  146. public int close()
  147. {
  148. //关闭Ice
  149. IceManager.instance().Stop();
  150. //关闭FastStream
  151. FastStream.instance().Stop();
  152. //关闭场景管理器
  153. zone.Stop();
  154. return 0;
  155. }
  156. /// <summary>
  157. /// 初始化
  158. /// </summary>
  159. /// <param name="input"></param>
  160. /// <returns></returns>
  161. public async Task<object> init(dynamic input)
  162. {
  163. //解析参数
  164. ZoneConfig zoneConfig = new ZoneConfig();
  165. LogConfig logConfig = new LogConfig();
  166. IceConfig iceConfig = new IceConfig();
  167. FastStreamConfig fastStreamConfig = new FastStreamConfig();
  168. try
  169. {
  170. //zone配置
  171. zoneConfig.startPath = (string)input.zoneConfig.startPath;
  172. zoneConfig.assetPath = (string)input.zoneConfig.assetPath;
  173. //fastStream配置
  174. fastStreamConfig.port = (int)input.fastStreamConfig.port;
  175. //日志配置
  176. logConfig.configFile = (string)input.logConfig.configFile;
  177. logConfig.outputPath = (string)input.logConfig.outputPath;
  178. logConfig.level = (uint)input.logConfig.level;
  179. logConfig.serverId = (string)input.logConfig.serverId;
  180. //ice配置
  181. iceConfig.host = (string)input.iceConfig.host;
  182. iceConfig.port = (int)input.iceConfig.port;
  183. // Console.WriteLine("before isTraceNetwork:"+input.iceConfig.isTraceNetwork);
  184. try
  185. {
  186. iceConfig.isWarnConnections = (bool)input.iceConfig.isWarnConnections;
  187. iceConfig.isTraceNetwork = (bool)input.iceConfig.isTraceNetwork;
  188. iceConfig.isTraceProtocol = (bool)input.iceConfig.isTraceProtocol;
  189. }
  190. catch (Exception e)
  191. {
  192. Console.Error.WriteLine(e);
  193. }
  194. }
  195. catch (Exception e)
  196. {
  197. Console.Error.WriteLine(e);
  198. return 0;
  199. }
  200. return await Task.Run(() =>
  201. {
  202. return open(zoneConfig, logConfig, iceConfig, fastStreamConfig);
  203. });
  204. }
  205. /// <summary>
  206. /// 结束
  207. /// </summary>
  208. /// <param name="input"></param>
  209. /// <returns></returns>
  210. public async Task<object> fini(dynamic input)
  211. {
  212. return await Task.Run(() =>
  213. {
  214. return close();
  215. });
  216. }
  217. }
  218. }