public MainManager(int simulatorID, RedisNetworkingService redisNetworkingService, SimulatorGameTimeService gameTimeService, SimulatorConfig simulatorConfig, PhysicsConfig physicsConfig) { _simulatorID = simulatorID; _redisServer = redisNetworkingService.RedisServer; _networkingService = redisNetworkingService; _gameTimeService = gameTimeService; _simulatorConfig = simulatorConfig; _physicsConfig = physicsConfig; Utilities.NextUnique();//Force the static to initialize now }
//First argument is simulatorID (int), all subsequent arguments follow the format in _parseSimulationDatum public static void Main(string[] simulationData) { try { ConsoleManager.WriteLine("Starting simulator instance...", ConsoleMessageType.Debug); Logger.Initialize(); TimeKeeper.Initialize(); _simulatorConfig = new SimulatorConfig(); _physicsConfig = new PhysicsConfig(); RedisServer redisServer = new RedisServer(Logger.LogRedisError, Logger.LogRedisInfo, new RedisConfig().Address); RedisNetworkingService redisNetworkingService = new RedisNetworkingService(_simulatorConfig, redisServer); int simulatorID = int.Parse(simulationData[0]); List <string> dataArray = new List <string>(); for (int i = 1; i < simulationData.Length; i++) { dataArray.Add(simulationData[i]); } _mainManager = new MainManager(simulatorID, redisNetworkingService, new SimulatorGameTimeService(), _simulatorConfig, _physicsConfig); //IDs are parsed, then each ID is used to subscribe to a redis channel, which the server uses to communicate data about each system foreach (string s in dataArray) { if (s == "") { continue; } var data = _parseSimulationDatum(s); _mainManager.StartSimulatingArea(data.Item2, data.Item1); } _mainManager.ConnectToServer(); Run(); } catch (Exception e) { ConsoleManager.WriteLine("Exception in simulator", ConsoleMessageType.Error); ConsoleManager.WriteLine(e.ToString(), ConsoleMessageType.Error); ConsoleManager.WriteLine(e.Message, ConsoleMessageType.Error); Run(); } }