public GameInstance(ServerManager manager, int maxPlayer = 32, int minPlayerToStart = 12, int timeBeforeStart = 60) { MaxPlayer = maxPlayer; MinPlayerToStart = minPlayerToStart; TimeBeforeStart = timeBeforeStart; _manager = manager; PlayerCount = 0; Id = IDGenerator.getInstance().GenerateUniqueID(); PlayerList = new Dictionary <int, InGamePlayer>(); SpectatorList = new Dictionary <int, InGamePlayer>(); AlivePlayerList = null; _expectedPlayers = new Dictionary <int, APlayer>(); GameStarted = false; GameEnded = false; Joinable = true; _server = new MyNetworkServer <InGamePlayer>(MaxPlayer); _server.OnDisconnect += OnPlayerDisconnect; /* TCP Protocol */ _server.RegisterHandler(InGameProtocol.TCPClientToServer.ConnectionConfirm, ConnectionConfirmMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.QuitRoom, QuitGameMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.Jump, PlayerJumpMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.Crouch, PlayerCrouchMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.DropTrain, DropTrainMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.Reloading, PlayerReloadingMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.EnigmaOpened, EnigmaOpenedMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.OpenCrate, OpenCrateMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.TakeItem, TakeItemMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.DropItem, DropItemMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.SwitchItem, SwitchItemMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.SwitchKnife, SwitchKnifeMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.UseItem, UseItemMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.Shoot, PlayerShootMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.HitPlayer, PlayerHitMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.StartThrowing, StartThrowingMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.Throwing, ThrowingMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.ThrowableEnd, ThrowableEndMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.RocketStart, RocketStartMessage); _server.RegisterHandler(InGameProtocol.TCPClientToServer.RocketEnd, RocketEndMessage); /* UDP Protocol */ _server.RegisterHandler(InGameProtocol.UDPClientToServer.Movement, PlayerMovementMessage); _server.RegisterHandler(InGameProtocol.UDPClientToServer.Turn, PlayerTurnMessage); _server.RegisterHandler(InGameProtocol.UDPClientToServer.ThrowableMove, ThrowableMoveMessage); _server.RegisterHandler(InGameProtocol.UDPClientToServer.RocketMove, RocketMoveMessage); _server.Start(); ListenPort = _server.Port; _stopRoom = false; _roomLoop = new Thread(RoomLoop); _roomLoop.Start(); _updater = new Thread(Updater); _updater.Start(); }