Example #1
0
        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();
        }