コード例 #1
0
        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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public static void WriteToMessage(NetOutgoingMessage msg, Packet packet)
 {
     msg.Write((byte)packet.Type);
     packet.Write(msg);
 }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
        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);
        }