public static void SendMessageToAllExcept(Packet packet, ushort id, NetDeliveryMethod method = NetDeliveryMethod.ReliableOrdered) { if (server == null) return; foreach (var serverClient in Clients.Where(c => c.Id != id)) serverClient.Connection.SendMessage(packet, method); }
public void HandleMessage(Packet msg) { switch (msg.Type) { case PacketType.Voice: Server.SendMessageToAll(msg); break; case PacketType.DeclareWinner: Server.DeclareWinner(((DeclareWinner)msg).Id); Server.StartMatch(true); break; case PacketType.EndTurn: { EndTurn endTurn = (EndTurn)msg; SelectedCards.Clear(); foreach (CardInfo info in endTurn.Cards) SelectedCards.Add(info.Value); CardCount -= endTurn.Cards.Count; Ready = true; Server.SendMessageToAllExcept(new SetStatus(Id, false), Id); break; } case PacketType.LobbyBeginGame: Server.SendMessageToAll(new BeginGame()); Server.State = Server.States.InGame; Server.StartMatch(false); Server.Greet(); break; case PacketType.ServerJoin: { ServerJoin serverJoin = (ServerJoin)msg; // Check version if (serverJoin.Version != Program.Version) { Connection.Disconnect("Host is running on a different version."); return; } Name = serverJoin.Name; Server.SendMessageToAllExcept(new PlayerNew(Name, Id), Id); foreach (ServerClient c in Server.Clients.Where(a => a.Id != Id)) Connection.SendMessage(new PlayerNew(c.Name, c.Id)); Verified = true; Server.SendMessageToAllExcept(new ChatMessage(String.Format("{0} has joined the game!", Name)), Id); break; } case PacketType.ChatMessage: { ChatMessage chatMessage = (ChatMessage)msg; Server.SendMessageToAllExcept(new ChatMessage(chatMessage.Value), Id); break; } default: Console.WriteLine("Unhandled packet {0}", msg.Type.ToString()); break; } }
public static void SendMessageToAll(Packet packet, NetDeliveryMethod method = NetDeliveryMethod.ReliableOrdered, Func<ServerClient, bool> condition = null) { if (server == null) return; foreach (var serverClient in Clients.Where(c => condition == null || condition(c))) serverClient.Connection.SendMessage(packet, method); }
public static NetSendResult SendMessage(this NetConnection connection, Packet packet, NetDeliveryMethod method = NetDeliveryMethod.ReliableOrdered) { var msg = server.CreateMessage(); Packet.WriteToMessage(msg, packet); return connection.SendMessage(msg, method, 0); }
public static void WriteToMessage(NetOutgoingMessage msg, Packet packet) { msg.Write((byte)packet.Type); packet.Write(msg); }
private static void HandlePacket(Packet packet) { Console.WriteLine(packet.Type); switch (packet.Type) { case PacketType.ServerTime: SecondsLeft = ((ServerTime)packet).Seconds; break; case PacketType.SetStatus: { SetStatus setStatus = (SetStatus)packet; players[setStatus.Id].Thinking = setStatus.TurnOver; break; } case PacketType.GameOver: Game.PushState(new GameOverScreen()); break; case PacketType.InitSelectionScreen: { InitSelectionScreen initSelectionScreen = (InitSelectionScreen)packet; Game.PushState(new SelectionScreen(initSelectionScreen.Options)); InMatch = false; break; } case PacketType.SelectCardCzar: { SelectCardCzar selectCardCzar = (SelectCardCzar)packet; InGame game = (InGame)Game.PeekFirstState(); foreach (Player p in game.Players) p.Czar = false; if (players.ContainsKey(selectCardCzar.Id)) players[selectCardCzar.Id].Czar = true; else game.LocalPlayer.Czar = true; foreach (Player p in game.Entities.OfType<Player>()) p.Thinking = !p.Czar; break; } case PacketType.WinnerPicked: { if (Game.PeekState().GetType() != typeof(GameOverScreen)) { InMatch = true; Game.PopState(); WinnerPicked winnerPicked = (WinnerPicked)packet; InGame game = (InGame)Game.PeekState(); if (winnerPicked.Id != 0) { Player player = players.ContainsKey(winnerPicked.Id) ? players[winnerPicked.Id] : game.LocalPlayer; ++player.Score; Game.PushState(new WinnerScreen(player.Name, CurrentBlackCard.Info.Value, winnerPicked.Cards)); } else Game.PushState(new WinnerScreen("No one", CurrentBlackCard.Info.Value, new List<string>())); } break; } case PacketType.WhiteCard: { WhiteCard whiteCards = (WhiteCard)packet; foreach (CardInfo c in whiteCards.Cards) { Card card = new Card(c) { Position = new Vector2f(-1024.0f, -1024.0f), Scale = new Vector2f(0.643f * 0.8f, 0.643f * 0.8f) }; Hand.Add(card); Game.PeekFirstState().Entities.Add(card); } if (Hand.Any(c => c.Info.Value.Contains("brain")) && !gotBrainTumorOnce) { Assets.PlaySound("BrainTumorCardStart.wav"); gotBrainTumorOnce = true; } else if (random.Next(100) < 5) Assets.PlaySound("NoBrainTumorCardStart5.wav"); break; } case PacketType.BlackCard: { BlackCard blackCard = (BlackCard)packet; if (CurrentBlackCard != null) Game.PeekFirstState().Entities.Remove(CurrentBlackCard); CurrentBlackCard = new Card(blackCard.Card) { Position = new Vector2f(GameOptions.Width - 256.0f + 4.0f, 48.0f + 32.0f) }; Game.PeekFirstState().Entities.Add(CurrentBlackCard); break; } case PacketType.LobbyBeginGame: Game.SetState(new InGame(((Lobby)Game.PeekState()).Players)); InMatch = true; break; case PacketType.PlayerDelete: { PlayerDelete playerDelete = (PlayerDelete)packet; Game.PeekFirstState().Entities.Remove(players[playerDelete.Id]); players.Remove(playerDelete.Id); break; } case PacketType.PlayerNew: { PlayerNew playerNew = (PlayerNew)packet; Player player = new Player(playerNew.Name); players.Add(playerNew.Id, player); Game.PeekState().Entities.Add(player); break; } case PacketType.ChatMessage: { ChatMessage chatMessage = (ChatMessage)packet; if (Game.PeekState().GetType() == typeof(Lobby)) ((Lobby)Game.PeekState()).ChatBacklog.Add(chatMessage.Value); else ((InGame)Game.PeekFirstState()).ChatBacklog.Add(chatMessage.Value); GameUtility.PlayTaunt(chatMessage.Value); Assets.PlaySound("Bubble.wav"); break; } default: Console.WriteLine("Unhandled packet!"); break; } }
public static void SendMessage(Packet packet, NetDeliveryMethod method = NetDeliveryMethod.ReliableOrdered) { if (client == null) return; NetOutgoingMessage msg = client.CreateMessage(); Packet.WriteToMessage(msg, packet); client.SendMessage(msg, method); }