/// <summary> /// Only call this method on an another thread /// Starts the thread running the match /// </summary> public void ThreadStart() { MatchGameMessageHandler matchGameHandler = new MatchGameMessageHandler(logger, this); MatchServerCoreEventHandler eventHandler = new MatchServerCoreEventHandler(); server = new ServerCore(matchGameHandler, new ServerConnectionInfo(port), logger, eventHandler); pingDeterminer = new PingDeterminer(server.clientManager, server.messageSender, miliSecondPerTick, clock, updater); matchGameHandler.Init(serverExtensions, clock, eventHandler); var time = clock.GetTime(); while (server.clientManager.GetClients().Count > 0 || timeClientsHaveToConnectWithin > clock.GetTime()) { updater.Update(); server.Update(); System.Threading.Thread.Sleep(miliSecondPerTick); } logger.Log("Match ended"); }
/// <summary> /// Setup extensions /// </summary> /// <param name="serverExtensions">Extensions</param> /// <param name="matchClock">Clock of the match</param> /// <param name="serverCoreEventHandler">Eventhandler of the ServerCore</param> internal void Init(List <IServerExtension> serverExtensions, Clock matchClock, MatchServerCoreEventHandler serverCoreEventHandler) { commandHandler.Add(new MessageHandler_Request_JoinGame(logger, matchThread.GetServer().messageSender, matchThread, serverExtensions, matchGameEventWrapper)); commandHandler.Add(new MessageHandler_ServerRoundTrip_Ping(logger, matchThread.GetServer().messageSender, matchThread, serverExtensions)); foreach (var extension in serverExtensions) { foreach (var msgHandler in extension.CreateMessageHandlers(matchThread.GetServer(), matchThread.pingDeterminer, matchGameEventWrapper, matchClock)) { commandHandler.Add(msgHandler); } extension.SetupSubscribers(matchThread.GetServer(), serverCoreEventHandler); } }