Exemple #1
0
        public ServerPlayer(Socket sock, ServerGame sg)
            : base()
        {
            this.Connected        = true;
            _listening            = true;
            _shouldRemoveFromGame = false;
            _invalidMessages      = 0;
            _hand             = null;
            _currentPhazeRule = null;

            _socket     = sock;
            _serverGame = sg;
            _address    = _socket.RemoteEndPoint.ToString();

            _buffer = new Buffer();

            //start 5 seconds timer for a login message
            Thread t = new Thread(new ThreadStart(this.listenForLogin));

            t.IsBackground = true;
            t.Name         = "Login listener for " + _address;
            t.Start();

            //create new login timer
            new Timer(
                new TimerCallback(this.checkForLogin)
                , null
                , TimingDefinitions.LoginTimeout_Server
                , Timeout.Infinite);
        }
Exemple #2
0
        public GameRulesMessage(GameRules gr) : base()
        {
            ExceptionHelpers.CheckNotNull(gr, "gr");

            short length = 20;

            for (int i = 0; i < gr.PhazeRules.Count(); i++)
            {
                length += 1; //group kind
                length += (short)(gr.PhazeRules.Phaze(i).Count() * 2);
            }
            length += (short)(gr.CardPoints.Length * 2); //2 for each card

            msg     = new byte[length];
            msg[0]  = (byte)pxMessages.GameRules;
            msg[1]  = (byte)(gr.MinimumPlayers);
            msg[2]  = (byte)(gr.MaximumPlayers);
            msg[3]  = (byte)(gr.HandCards);
            msg[4]  = (byte)(gr.DeckCards);
            msg[5]  = (byte)(gr.MinimumCardNumber);
            msg[6]  = (byte)(gr.MaximumCardNumber);
            msg[7]  = (byte)(gr.MinimumCardColor);
            msg[8]  = (byte)(gr.MaximumCardColor);
            msg[9]  = (byte)(gr.MinimumGroupType);
            msg[10] = (byte)(gr.MaximumGroupType);

            if (gr.SkipCardsEnabled)
            {
                msg[11] = (byte)1;
            }
            else
            {
                msg[11] = (byte)0;
            }
            if (gr.DrawCardsEnabled)
            {
                msg[12] = (byte)1;
            }
            else
            {
                msg[12] = (byte)0;
            }
            if (gr.ReverseCardsEnabled)
            {
                msg[13] = (byte)1;
            }
            else
            {
                msg[13] = (byte)0;
            }
            if (gr.WildCardsEnabled)
            {
                msg[14] = (byte)1;
            }
            else
            {
                msg[14] = (byte)0;
            }
            if (gr.ExtraSetPlayable)
            {
                msg[15] = (byte)1;
            }
            else
            {
                msg[15] = (byte)0;
            }
            if (gr.AllowWildColor)
            {
                msg[16] = (byte)1;
            }
            else
            {
                msg[16] = (byte)0;
            }
            if (gr.SkipAnybody)
            {
                msg[17] = (byte)1;
            }
            else
            {
                msg[17] = (byte)0;
            }
            if (gr.SkipOncePerHand)
            {
                msg[18] = (byte)1;
            }
            else
            {
                msg[18] = (byte)0;
            }

            msg[19] = (byte)gr.PhazeRules.Count();

            short ptr = 20;

            for (int ctr = 0; ctr < gr.PhazeRules.Count(); ctr++)
            {
                PhazeRule pr = gr.PhazeRules.Phaze(ctr);
                msg[ptr] = (byte)pr.Count();
                ptr     += 1;
                for (int ctr2 = 0; ctr2 < pr.Count(); ctr2++)
                {
                    Group g = pr.GetGroup(ctr2);
                    msg[ptr]     = (byte)g.GroupType;
                    msg[ptr + 1] = (byte)g.CardsRequired;
                    ptr         += 2;
                }
            }

            foreach (int i in gr.CardPoints)
            {
                msg[ptr]     = (byte)(i >> 8);
                msg[ptr + 1] = (byte)(i);
                ptr         += 2;
            }
        }
Exemple #3
0
 public void NewHand(PhazeRule pr)
 {
     _hand             = new Hand();
     _currentPhazeRule = pr;
 }