public void ProcessDiscardSkipMessage(DiscardSkipMessage m) { if (_Client == null) { return; } if (_DiscardSkipMessageDelegate != null) { Player p = _Client.FindPlayer(m.PlayerId, true); _DiscardSkipMessageDelegate(p); } }
protected Message getMessage() { byte[] b; int avail; try { //while we're here, look for data in the buffer avail = _sock.Available; if (avail > 0) { buffer.ReadFromSocket(_sock, avail); this.BytesReceived += avail; } //first see if we can actually decode something if (buffer.CanDecode()) { b = buffer.Decode(); } else { return(null); } } catch (Exception ex) { PhazeXLog.LogError(ex, GameLibraryVersion.VersionString, 104); _connected = false; return(null); } Message m = null; if (b.Length == 0) { return(m); } else if (b[0] == (byte)pxMessages.Heartbeat) { m = new HeartBeatMessage(b); } else if (b[0] == (byte)pxMessages.ChangeName) { m = new ChangeNameMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.ChangeNameReject) { m = new ChangeNameRejectMessage(b); } else if (b[0] == (byte)pxMessages.Chat) { m = new ChatMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.CompletedPhaze) { m = new CompletedPhazeMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.CurrentPhaze) { m = new CurrentPhazeMessage(b, this.GameRules); } else if (b[0] == (byte)pxMessages.DiscardSkip) { m = new DiscardSkipMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.DialogMessage) { m = new DialogMessage(b); } else if (b[0] == (byte)pxMessages.ErrorMessage) { m = new ErrorMessage(b); } else if (b[0] == (byte)pxMessages.GameOver) { m = new GameOverMessage(b); } else if (b[0] == (byte)pxMessages.GameRules) { m = new GameRulesMessage(b); } else if (b[0] == (byte)pxMessages.GameStarting) { m = new GameStartingMessage(b); } else if (b[0] == (byte)pxMessages.Goodbye) { m = new GoodbyeMessage(b); } else if (b[0] == (byte)pxMessages.GotCards) { m = new GotCardsMessage(b, this.GameRules); } else if (b[0] == (byte)pxMessages.GotDeckCard) { m = new GotDeckCardMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.GotDiscard) { m = new GotDiscardMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.Hand) { m = new HandMessage(b, this.GameRules); } else if (b[0] == (byte)pxMessages.Login) { m = new LoginMessage(b); } else if (b[0] == (byte)pxMessages.LoginAcknowledgment) { m = new LoginAckMessage(b); } else if (b[0] == (byte)pxMessages.LogOff) { m = new LogOffMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.NewHand) { m = new NewHandMessage(b); } else if (b[0] == (byte)pxMessages.PlayedCardOnTable) { m = new PlayedCardOnTableMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.Ready) { m = new ReadyMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.Scoreboard) { m = new ScoreboardMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.SkipNotification) { m = new SkipNotificationMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.StartGameTimer) { m = new StartGameTimerMessage(b); } else if (b[0] == (byte)pxMessages.Status) { m = new StatusMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.SystemMessage) { m = new SystemMessage(b); } else if (b[0] == (byte)pxMessages.Table) { m = new TableMessage(b, this.GameRules); } else if (b[0] == (byte)pxMessages.TurnEnd) { m = new TurnEndMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.TurnStart) { m = new TurnStartMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.UpdateDiscard) { m = new UpdateDiscardMessage(b, this.GetPlayerIDs(), this.GameRules); } else if (b[0] == (byte)pxMessages.WentOut) { m = new WentOutMessage(b, this.GetPlayerIDs()); } else if (b[0] == (byte)pxMessages.Won) { m = new WonMessage(b, this.GetPlayerIDs()); } else { m = new UnknownMessage(b); } return(m); }
public void AddMessageToProcess(ServerPlayer sp, byte [] b) { if (b.Length < 1) { PhazeXLog.LogError ( new Exception("Attempted to process 0 byte message!") , GameLibraryVersion.ProgramIdentifier , 0 ); } byte start = b[0]; try { Message msg = null; switch (start) { case (byte)pxMessages.Heartbeat: msg = new HeartBeatMessage(b); break; case (byte)pxMessages.SystemMessage: msg = new SystemMessage(b); break; case (byte)pxMessages.Chat: msg = new ChatMessage(b, this.getIDs()); break; case (byte)pxMessages.Ready: msg = new ReadyMessage(b, this.getIDs()); break; case (byte)pxMessages.ChangeName: msg = new ChangeNameMessage(b, this.getIDs()); break; case (byte)pxMessages.PlayOnGroup: msg = new PlayOnGroupMessage(b, this.rules); break; case (byte)pxMessages.Meld: msg = new MeldMessage(b, this.rules); break; case (byte)pxMessages.GetTopDiscard: msg = new GetTopDiscardMessage(b); break; case (byte)pxMessages.GetTopDeckCard: msg = new GetTopDeckCardMessage(b); break; case (byte)pxMessages.DiscardSkip: msg = new DiscardSkipMessage(b, this.getIDs(), this.rules); break; case (byte)pxMessages.Discard: msg = new DiscardMessage(b, this.rules); break; case (byte)pxMessages.RequestHand: msg = new RequestHandMessage(b); break; case (byte)pxMessages.RequestTable: msg = new RequestTableMessage(b); break; default: msg = new UnknownMessage(b); break; } lock (this) { _messagesToProcess.Add(new PlayerMessage(sp, msg)); } } catch (BadMessageException bme) { PhazeXLog.LogError ( bme , GameLibraryVersion.ProgramIdentifier , 109 ); string info = ""; foreach (byte tmp in b) { info += ((int)tmp).ToString() + " "; } PhazeXLog.LogInformation(info, pid); } }
private void handleDiscardSkipMessage(DiscardSkipMessage m, ServerPlayer p) { if (!p.MyTurn) { //invalid request p.Send(new ErrorMessage("It is not your turn to discard a skip card!")); return; } if (!p.PickedUpCard) { //invalid request p.Send(new ErrorMessage("You did not yet pick up a card from the discard pile or deck!")); return; } if (p.GetHand().RemoveCardWithId(m.CardObj.Id) == null) { //invalid request //send cards back, biotches! p.Send(new ErrorMessage("You do not have the skip card in your hand. Returning card. [" + m.CardObj.Id + "]")); p.Send(new HandMessage(p.GetHand(), true)); return; } if (p.GetHand().Count == 0) { endTurn(p, false); SendAll(new WentOutMessage(p.PlayerID)); EndHand(p, m.CardObj); return; } ServerPlayer playerToSkip = findPlayer(m.PlayerId); if (playerToSkip == null) { //logError("No player with specified ID!"); p.Send(new ErrorMessage("No player with specified ID! (" + m.PlayerId + ")")); p.AddHandCard(m.CardObj); p.Send(new HandMessage(p.GetHand(), false)); return; //invalid request! } if (!playerToSkip.Connected) { p.AddHandCard(m.CardObj); p.Send(new ErrorMessage("Unable to skip player; player is no longer playing.")); p.Send(new HandMessage(p.GetHand(), false)); return; //invalid request } //make sure we can't pick any skip cards up _firstDiscard = false; _discard.AddTopCard(m.CardObj); SendAll(new UpdateDiscardMessage(m.CardObj, p, true)); playerToSkip.SkippedBy(p); p.Skip(playerToSkip); SendAll(new DiscardSkipMessage(m.CardObj, playerToSkip.PlayerID)); updateClientsStatuses(); //update scoreboards! updateClientsScoreboards(); Thread.Sleep(TimingDefinitions.pxcpArtificalWait); endTurn(p, true); }