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); }
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; } }
public void NewHand(PhazeRule pr) { _hand = new Hand(); _currentPhazeRule = pr; }