Beispiel #1
0
        private static bool ReceiveAndProcessData(Player player, BinaryReader br)
        {
            string playername = player.Name;

            try
            {
                NetUpdateType updatetype = (NetUpdateType)br.ReadInt32();
                switch (updatetype)
                {
                case NetUpdateType.Name:
                    string newname = br.ReadString();
                    player.Name = newname;
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {     //ForwardMessage prepares each send and then here the only thing to do is to send the extra data
                        bw.Write(newname);
                    }
                    break;

                case NetUpdateType.Color:
                    Color color = Color.FromArgb(br.ReadInt32());
                    player.Color = color;
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write(color.ToArgb());
                    }
                    break;

                case NetUpdateType.Move:
                    Direction direction = (Direction)br.ReadInt32();
                    Game.MovePlayerPost(player, Game.MovePlayerPre(player, direction));
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write((int)direction);
                    }
                    break;

                /*case NetUpdateType.Login:
                 *  ConnectedMatch.Players.Add(new Player(playername, ConnectedMatch.NextID));
                 *  break;*/
                case NetUpdateType.Leave:
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                    }
                    Network.ConnectedMatch.Players.RemoveAll(entry => entry.Name == playername);
                    player.Client.Close();
                    break;

                case NetUpdateType.Teleport:
                    player.Position = new Point(br.ReadInt32(), br.ReadInt32());
                    Console.WriteLine("Teleporting player " + player.Name + " to point " + player.Position);
                    Game.MovePlayerPost(player, player.Position);
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write(player.Position.X);
                        bw.Write(player.Position.Y);
                    }
                    break;

                case NetUpdateType.Score:
                    player.Score = br.ReadInt32();
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write(player.Score);
                    }
                    break;

                case NetUpdateType.Lives:
                    player.Lives = br.ReadInt32();
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write(player.Lives);
                    }
                    break;

                case NetUpdateType.Pause:
                    Form1.SetTimerWithoutSend(!br.ReadBoolean());
                    foreach (BinaryWriter bw in ForwardMessage(player, playername, (int)updatetype))
                    {
                        bw.Write(Game.Paused);
                    }
                    break;
                }
            }
            catch (IOException)
            {
                return(false);
            }
            catch (ObjectDisposedException)
            {
                return(false);
            }
            catch (Exception e)
            {
                Program.HandleException(e);
            }
            return(true);
        }