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); }