Example #1
0
 private void PlayerConnected(VirusPlayer player)
 {
     Dispatcher.Invoke(() => {
         InTextBox.Text += "Player " + player.Name + " connected with color " + player.Color.Name + "\n";
         TextScrollViewer.ScrollToBottom();
     });
 }
Example #2
0
 private void TextMessageRecieved(VirusPlayer player, string text)
 {
     Dispatcher.Invoke(() => {
         InTextBox.Text += player.Name + ":\n" + text + "\n";
         TextScrollViewer.ScrollToBottom();
     });
 }
Example #3
0
 private void PlayerDisconnected(VirusPlayer player)
 {
     Dispatcher.Invoke(() => {
         InTextBox.Text += "Player " + player.Name + " disconnected\n";
         TextScrollViewer.ScrollToBottom();
         EndGame();
     });
 }
Example #4
0
 private void NameUpdated(VirusPlayer player, string orig)
 {
     Dispatcher.Invoke(() => {
         InTextBox.Text += "Player " + orig + " changed name to " + player.Name + "\n";
         viruscontrol.Refresh();
         TextScrollViewer.ScrollToBottom();
     });
 }
Example #5
0
 private void ColorUpdated(VirusPlayer player, System.Drawing.Color orig)
 {
     Dispatcher.Invoke(() => {
         InTextBox.Text += "Player " + player.Name + " changed color to " + player.Color.Name + "\n";
         TextScrollViewer.ScrollToBottom();
         viruscontrol.Refresh();
     });
 }
Example #6
0
 public VirusLobby(VirusPlayer player)
 {
     Player            = player;
     ListeningStarted  = false;
     ConnectionStarted = false;
     Connected         = false;
     GameStarted       = false;
 }
Example #7
0
		private void StartGame(VirusPlayer[] players) {
			Dispatcher.Invoke(() => { 
				viruscontrol.StartGame(
					new VirusNameSpace.Virus(lobby.PlayerCount, 10),
					PerformedMoveCallback,
					null,
					EndGame,
					player.ID,
					players);
			});
		}
Example #8
0
		public MainWindow() {
			InitializeComponent();
			messageBox.KeyDown += new KeyEventHandler(messageBox_keyDown);
			player = new VirusPlayer("Player1", rand.Next().ToString(), System.Drawing.Color.Red);
			lobby = new VirusLobby(player);
			lobby.OnBadMessageRecieved += new VirusLobby.TextFunction(BadMessage);
			lobby.OnColorChanged += new VirusLobby.PlayerUpdateColorFunction(ColorUpdated);
			lobby.OnEveryoneReadyChanged += new VirusLobby.BoolFunction(EveryoneReadyUpdated);
			lobby.OnGameMove += new VirusLobby.GameMoveFunction(GameMove);
			lobby.OnNameChanged += new VirusLobby.PlayerUpdateTextFunction(NameUpdated);
			lobby.OnPlayerConnected += new VirusLobby.PlayerUpdateFunction(PlayerConnected);
			lobby.OnPlayerDisconnected += new VirusLobby.PlayerUpdateFunction(PlayerDisconnected);
			lobby.OnStartGame += new VirusLobby.StartFunction(StartGame);
			lobby.OnTextMessageRecieved += new VirusLobby.TextMessageFunction(TextMessageRecieved);
		}
Example #9
0
 public MainWindow()
 {
     InitializeComponent();
     messageBox.KeyDown += new KeyEventHandler(messageBox_keyDown);
     player              = new VirusPlayer("Player1", rand.Next().ToString(), System.Drawing.Color.Red);
     lobby = new VirusLobby(player);
     lobby.OnBadMessageRecieved   += new VirusLobby.TextFunction(BadMessage);
     lobby.OnColorChanged         += new VirusLobby.PlayerUpdateColorFunction(ColorUpdated);
     lobby.OnEveryoneReadyChanged += new VirusLobby.BoolFunction(EveryoneReadyUpdated);
     lobby.OnGameMove             += new VirusLobby.GameMoveFunction(GameMove);
     lobby.OnNameChanged          += new VirusLobby.PlayerUpdateTextFunction(NameUpdated);
     lobby.OnPlayerConnected      += new VirusLobby.PlayerUpdateFunction(PlayerConnected);
     lobby.OnPlayerDisconnected   += new VirusLobby.PlayerUpdateFunction(PlayerDisconnected);
     lobby.OnStartGame            += new VirusLobby.StartFunction(StartGame);
     lobby.OnTextMessageRecieved  += new VirusLobby.TextMessageFunction(TextMessageRecieved);
 }
Example #10
0
		private void ListenForClients() {
			this.tcpListener.Start();

			while (ListeningStarted) {
				try {
					TcpClient cl = this.tcpListener.AcceptTcpClient(); //blocks until a client has connected to the server
					VirusPlayer client = new VirusPlayer(cl);
					//Players.Add(client);

					//create a thread to handle communication with connected client
					Thread clientThread = new Thread(new ParameterizedThreadStart(AwaitCommunicationMaster));
					clientThread.Start(client);
				}
				catch { }
			}
			this.tcpListener.Stop();
		}
Example #11
0
        private void ListenForClients()
        {
            this.tcpListener.Start();

            while (ListeningStarted)
            {
                try {
                    TcpClient   cl     = this.tcpListener.AcceptTcpClient();               //blocks until a client has connected to the server
                    VirusPlayer client = new VirusPlayer(cl);
                    //Players.Add(client);

                    //create a thread to handle communication with connected client
                    Thread clientThread = new Thread(new ParameterizedThreadStart(AwaitCommunicationMaster));
                    clientThread.Start(client);
                }
                catch { }
            }
            this.tcpListener.Stop();
        }
Example #12
0
        public void StartConnection(IPAddress ip)
        {
            if (Master)
            {
                throw new ApplicationException("Master tried to connect to another master");
            }

            TcpClient  client         = new TcpClient();
            IPEndPoint serverEndPoint = new IPEndPoint(ip, Port);

            client.Connect(serverEndPoint);
            VirusPlayer pclient = new VirusPlayer(client);

            MasterPlayer = pclient;
            SendInitialiseMessage(Player);

            Thread clientThread = new Thread(new ParameterizedThreadStart(AwaitCommunicationClient));

            clientThread.Start(pclient);
            ConnectionStarted = true;
        }
Example #13
0
		private void SendReadyMessage(VirusPlayer player) {
			byte[] buffer = encoder.GetBytes(CodeReady + player.ID + " " + (player.Ready ? "1" : "0"));
			SendMessage(buffer);
		}
Example #14
0
		private void SendNameMessage(VirusPlayer player, string name) {
			byte[] buffer = encoder.GetBytes(CodeName + player.ID + " [" + name + "]");
			SendMessage(buffer);
		}
Example #15
0
        private void HandleMessageClient(string message, MessageType type)
        {
            VirusPlayer origin = null;
            string      text   = "";
            string      id     = "";
            string      name   = "";
            Color       color  = Color.Red;
            bool        ready;

            string[] sequence;
            int      x, y, dx, dy = 0;

            switch (type)
            {
            case MessageType.Initialise:
                if (TryParseInitialiseMessage(message, out id, out name, out color))
                {
                    origin = GetPlayerFromID(id);

                    if (origin == null)
                    {
                        Players.Add(new VirusPlayer(name, id, color));
                    }
                    else
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got a second initialise message for player id: " + origin.ID);
                        }
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse new initialise message from master");
                    }
                }
                break;

            case MessageType.Text:
                if (TryParseTextMessage(message, out id, out text))
                {
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got text message without origin");
                        }
                    }
                    else
                    if (OnTextMessageRecieved != null)
                    {
                        OnTextMessageRecieved(origin, text);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse text message from master");
                    }
                }
                break;

            case MessageType.Color:
                if (TryParseColorMessage(message, out id, out color))
                {
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got color message without origin");
                        }
                    }
                    else
                    {
                        Color orig = origin.Color;
                        origin.Color = color;
                        if (OnColorChanged != null)
                        {
                            OnColorChanged(origin, orig);
                        }
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse color message from master");
                    }
                }
                break;

            case MessageType.Name:
                if (TryParseNameMessage(message, out id, out name))
                {
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got name message without origin");
                        }
                    }
                    else
                    {
                        string orig = origin.Name;
                        origin.Name = name;
                        if (OnNameChanged != null)
                        {
                            OnNameChanged(origin, orig);
                        }
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse name message from master");
                    }
                }
                break;

            case MessageType.Ready:
                if (TryParseReadyMessage(message, out id, out ready))
                {
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got ready message without origin");
                        }
                    }
                    else
                    {
                        bool orig = origin.Ready;
                        origin.Ready = ready;
                        if (OnReadyChanged != null)
                        {
                            OnReadyChanged(origin, orig);
                        }
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse ready message from master");
                    }
                }
                break;

            case MessageType.StartGame:
                if (TryParseStartGameMessage(message, out sequence))
                {
                    if (PlayerCount == sequence.Length)
                    {
                        VirusPlayer[] list = new VirusPlayer[PlayerCount];
                        VirusPlayer[] all  = AllPlayers;
                        for (int i = 0; i < PlayerCount; i++)
                        {
                            foreach (VirusPlayer p in all)
                            {
                                if (p.ID == sequence[i])
                                {
                                    list[i] = p;
                                    break;
                                }
                            }
                        }
                        GameStarted = true;
                        if (OnStartGame != null)
                        {
                            OnStartGame(list);
                        }
                    }
                    else
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Start game message from master had different number of players than locally");
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse start game message from master");
                    }
                }
                break;

            case MessageType.GameMessage:
                if (TryParseGameMessage(message, out id, out x, out y, out dx, out dy))
                {
                    if (id == Player.ID)
                    {
                        break;
                    }
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got game message without origin");
                        }
                    }
                    else
                    if (OnGameMove != null)
                    {
                        OnGameMove(origin, x, y, dx, dy);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse game message from master");
                    }
                }
                break;

            case MessageType.Disconnect:
                if (TryParseDisconnectMessage(message, out id))
                {
                    origin = GetPlayerFromID(id);
                    if (origin == null)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got disconnect message without origin");
                        }
                    }
                    else if (origin.ID == MasterPlayer.ID)
                    {
                        origin.TcpClient.Close();
                        origin.Connected = false;
                    }
                    else
                    {
                        if (OnPlayerDisconnected != null)
                        {
                            OnPlayerDisconnected(origin);
                        }
                        Players.Remove(origin);
                        GameStarted = false;
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse ready message from master");
                    }
                }
                break;

            default:
                if (OnBadMessageRecieved != null)
                {
                    OnBadMessageRecieved("Couldn't recognise message from master");
                }
                break;
            }
        }
Example #16
0
 private void SendDisconnectMessage(VirusPlayer player)
 {
     byte[] buffer = encoder.GetBytes(CodeDisconnect + player.ID);
     SendMessage(buffer);
 }
Example #17
0
 private void SendReadyMessage(VirusPlayer player)
 {
     byte[] buffer = encoder.GetBytes(CodeReady + player.ID + " " + (player.Ready ? "1" : "0"));
     SendMessage(buffer);
 }
Example #18
0
 private void SendColorMessage(VirusPlayer player, Color color)
 {
     byte[] buffer = encoder.GetBytes(CodeColor + player.ID + " " + color.Name);
     SendMessage(buffer);
 }
Example #19
0
 private void SendInitialiseMessage(VirusPlayer player)
 {
     byte[] buffer = encoder.GetBytes(CodeInitialise + player.ID + " [" + player.Name + "] " + player.Color.Name);
     SendMessage(buffer);
 }
Example #20
0
        private void AwaitCommunicationMaster(object client)
        {
            VirusPlayer   player       = (VirusPlayer)client;
            TcpClient     tcpClient    = player.TcpClient;
            NetworkStream clientStream = tcpClient.GetStream();

            while (player.Connected)
            {
                String message = "";

                try {                 //blocks until a client sends a message
                    message = ReadMessage(clientStream);
                }
                catch {                 //a socket error has occured
                    player.Connected = false;
                    break;
                }

                if (message == "")
                {
                    continue;
                }

                MessageType type = VirusLobby.ParseMessageType(message);

                // -- The player should start by initialising
                if (!player.Initialised)
                {
                    if (type != MessageType.Initialise)
                    {
                        player.Connected = false;
                        break;
                    }
                    bool success = TryParseInitialiseMessage(message, out player.ID, out player.Name, out player.Color);
                    if (!success)
                    {
                        player.Connected = false;
                        break;
                    }
                    player.Initialised = true;
                    Players.Add(player);
                    Connected = true;
                    if (OnPlayerConnected != null)
                    {
                        OnPlayerConnected(player);
                    }
                    List <VirusPlayer> list  = new List <VirusPlayer>();
                    List <VirusPlayer> list2 = new List <VirusPlayer>();
                    list.Add(player);
                    foreach (VirusPlayer p in Players)
                    {
                        if (p.ID != player.ID)
                        {
                            SendInitialiseMessage(p, list);                             //send init message to new player about the existing players
                            list2.Add(p);
                        }
                    }
                    SendInitialiseMessage(Player, list);                     //send init message to new player about the host
                    SendInitialiseMessage(player, list2);                    //send init message to existing players about the new player

                    bool allreadyprev = true;
                    foreach (VirusPlayer p in Players)
                    {
                        if (p.ID != player.ID)
                        {
                            if (!p.Ready)
                            {
                                allreadyprev = false;
                            }
                        }
                    }

                    bool allreadynow = true;
                    foreach (VirusPlayer p in Players)
                    {
                        if (!p.Ready)
                        {
                            allreadynow = false;
                        }
                    }

                    if (allreadynow != allreadyprev)
                    {
                        if (OnEveryoneReadyChanged != null)
                        {
                            OnEveryoneReadyChanged(allreadynow);
                        }
                    }

                    continue;
                }

                // -- Player is already initialised, so the message needs other handling
                HandleMessageMaster(player, message, type);
            }
            player.TcpClient.Close();
            if (OnPlayerDisconnected != null)
            {
                try {
                    OnPlayerDisconnected(player);
                }
                catch { }
            }
            Players.Remove(player);
            SendDisconnectMessage(player);
        }
Example #21
0
		private void GameMove(VirusPlayer player, int x, int y, int dx, int dy) {
			Dispatcher.Invoke(() => {
				viruscontrol.NetworkMove(x, y, dx, dy);
			});
		}
Example #22
0
		private void PlayerDisconnected(VirusPlayer player) {
			Dispatcher.Invoke(() => {
				InTextBox.Text += "Player " + player.Name + " disconnected\n";
				TextScrollViewer.ScrollToBottom();
				EndGame();
			});
		}
Example #23
0
		private void PlayerConnected(VirusPlayer player) {
			Dispatcher.Invoke(() => {
				InTextBox.Text += "Player " + player.Name + " connected with color " + player.Color.Name + "\n";
				TextScrollViewer.ScrollToBottom();
			});
		}
Example #24
0
		private void ColorUpdated(VirusPlayer player, System.Drawing.Color orig) {
			Dispatcher.Invoke(() => {
				InTextBox.Text += "Player " + player.Name + " changed color to " + player.Color.Name + "\n";
				TextScrollViewer.ScrollToBottom();
				viruscontrol.Refresh();
			});
		}
Example #25
0
		private void SendGameMessage(VirusPlayer player, int x, int y, int dx, int dy) {
			byte[] buffer = encoder.GetBytes(CodeGameMessage + player.ID + " " + x + " " + y + " " + dx + " " + dy);
			SendMessage(buffer);
		}
Example #26
0
		private void SendDisconnectMessage(VirusPlayer player) {
			byte[] buffer = encoder.GetBytes(CodeDisconnect + player.ID);
			SendMessage(buffer);
		}
Example #27
0
        private void HandleMessageMaster(VirusPlayer player, string message, MessageType type)
        {
            string text  = "";
            string id    = "";
            string name  = "";
            Color  color = Color.Red;
            bool   ready;
            int    x, y, dx, dy = 0;

            switch (type)
            {
            // ###### ------ Initialise ------ ###### //
            case MessageType.Initialise:
                if (OnBadMessageRecieved != null)
                {
                    OnBadMessageRecieved("Got a second initialise message from player with id " + player.ID);
                }
                break;

            // ###### ------ Text ------ ###### //
            case MessageType.Text:
                if (TryParseTextMessage(message, out id, out text))
                {
                    if (player.ID != id)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got text message with id " + id + " from player with id " + player.ID);
                        }
                    }
                    else
                    {
                        if (OnTextMessageRecieved != null)
                        {
                            OnTextMessageRecieved(player, text);
                        }
                        SendTextMessage(player, text);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse text message from player with id " + player.ID);
                    }
                }
                break;

            // ###### ------ Color ------ ###### //
            case MessageType.Color:
                if (TryParseColorMessage(message, out id, out color))
                {
                    if (player.ID != id)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got color message with id " + id + " from player with id " + player.ID);
                        }
                    }
                    else
                    {
                        Color orig = player.Color;
                        player.Color = color;
                        if (OnColorChanged != null)
                        {
                            OnColorChanged(player, orig);
                        }
                        SendColorMessage(player, color);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse color message from player with id " + player.ID);
                    }
                }
                break;

            // ###### ------ Name ------ ###### //
            case MessageType.Name:
                if (TryParseNameMessage(message, out id, out name))
                {
                    if (player.ID != id)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got name message with id " + id + " from player with id " + player.ID);
                        }
                    }
                    else
                    {
                        string orig = Player.Name;
                        player.Name = name;
                        if (OnNameChanged != null)
                        {
                            OnNameChanged(player, orig);
                        }
                        SendNameMessage(player, name);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse name message from player with id " + player.ID);
                    }
                }
                break;

            // ###### ------ Ready ------ ###### //
            case MessageType.Ready:
                if (TryParseReadyMessage(message, out id, out ready))
                {
                    if (player.ID != id)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got ready message with id " + id + " from player with id " + player.ID);
                        }
                    }
                    else
                    {
                        bool allreadyprev = true;
                        foreach (VirusPlayer p in Players)
                        {
                            if (!p.Ready)
                            {
                                allreadyprev = false;
                            }
                        }
                        bool orig = player.Ready;
                        player.Ready = ready;
                        if (OnReadyChanged != null)
                        {
                            OnReadyChanged(player, orig);
                        }
                        SendReadyMessage(player);
                        bool allreadynow = true;
                        foreach (VirusPlayer p in Players)
                        {
                            if (!p.Ready)
                            {
                                allreadynow = false;
                            }
                        }
                        if (allreadynow != allreadyprev)
                        {
                            if (OnEveryoneReadyChanged != null)
                            {
                                OnEveryoneReadyChanged(allreadynow);
                            }
                        }
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse ready message from player with id " + player.ID);
                    }
                }
                break;

            // ###### ------ StartGame ------ ###### //
            case MessageType.StartGame:
                if (OnBadMessageRecieved != null)
                {
                    OnBadMessageRecieved("Got start game message from player with id " + player.ID);
                }
                break;

            // ###### ------ GameMessage ------ ###### //
            case MessageType.GameMessage:
                if (TryParseGameMessage(message, out id, out x, out y, out dx, out dy))
                {
                    if (player.ID != id)
                    {
                        if (OnBadMessageRecieved != null)
                        {
                            OnBadMessageRecieved("Got game message with id " + id + " from player with id " + player.ID);
                        }
                    }
                    else
                    {
                        if (OnGameMove != null)
                        {
                            OnGameMove(player, x, y, dx, dy);
                        }
                        SendGameMessage(player, x, y, dx, dy);
                    }
                }
                else
                {
                    if (OnBadMessageRecieved != null)
                    {
                        OnBadMessageRecieved("Couldn't parse game message from player with id " + player.ID);
                    }
                }
                break;

            // ###### ------ Disconnect ------ ###### //
            case MessageType.Disconnect:
                player.TcpClient.Close();
                player.Connected = false;
                //if (OnBadMessageRecieved != null)
                //	OnBadMessageRecieved("Got disconnect message from player with id " + player.ID);
                break;

            // ###### ------ default ------ ###### //
            default:
                if (OnBadMessageRecieved != null)
                {
                    OnBadMessageRecieved("Couldn't recognise message from player with id " + player.ID);
                }
                break;
            }
        }
Example #28
0
 private void SendTextMessage(VirusPlayer player, string text)
 {
     byte[] buffer = encoder.GetBytes(CodeText + player.ID + " [" + text + "]");
     SendMessage(buffer);
 }
Example #29
0
		public VirusLobby(VirusPlayer player) {
			Player = player;
			ListeningStarted = false;
			ConnectionStarted = false;
			Connected = false;
			GameStarted = false;
		}
Example #30
0
 private void SendNameMessage(VirusPlayer player, string name)
 {
     byte[] buffer = encoder.GetBytes(CodeName + player.ID + " [" + name + "]");
     SendMessage(buffer);
 }
Example #31
0
		private void SendTextMessage(VirusPlayer player, string text) {
			byte[] buffer = encoder.GetBytes(CodeText + player.ID + " [" + text + "]");
			SendMessage(buffer);
		}
Example #32
0
 private void SendGameMessage(VirusPlayer player, int x, int y, int dx, int dy)
 {
     byte[] buffer = encoder.GetBytes(CodeGameMessage + player.ID + " " + x + " " + y + " " + dx + " " + dy);
     SendMessage(buffer);
 }
Example #33
0
		private void SendColorMessage(VirusPlayer player, Color color) {
			byte[] buffer = encoder.GetBytes(CodeColor + player.ID + " " + color.Name);
			SendMessage(buffer);
		}
Example #34
0
		private void HandleMessageClient(string message, MessageType type) {
			VirusPlayer origin = null;
			string text = "";
			string id = "";
			string name = "";
			Color color = Color.Red;
			bool ready;
			string[] sequence;
			int x, y, dx, dy = 0;
			switch (type) {
				case MessageType.Initialise:
					if (TryParseInitialiseMessage(message, out id, out name, out color)) {
						origin = GetPlayerFromID(id);

						if (origin == null) {
							Players.Add(new VirusPlayer(name, id, color));
						}
						else {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got a second initialise message for player id: " + origin.ID);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse new initialise message from master");
					}
					break;
				case MessageType.Text:
					if (TryParseTextMessage(message, out id, out text)) {
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got text message without origin");
						}
						else
							if (OnTextMessageRecieved != null)
								OnTextMessageRecieved(origin, text);
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse text message from master");
					}
					break;
				case MessageType.Color:
					if (TryParseColorMessage(message, out id, out color)) {
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got color message without origin");
						}
						else {
							Color orig = origin.Color;
							origin.Color = color;
							if (OnColorChanged != null)
								OnColorChanged(origin, orig);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse color message from master");
					}
					break;
				case MessageType.Name:
					if (TryParseNameMessage(message, out id, out name)) {
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got name message without origin");
						}
						else {
							string orig = origin.Name;
							origin.Name = name;
							if (OnNameChanged != null)
								OnNameChanged(origin, orig);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse name message from master");
					}
					break;
				case MessageType.Ready:
					if (TryParseReadyMessage(message, out id, out ready)) {
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got ready message without origin");
						}
						else {
							bool orig = origin.Ready;
							origin.Ready = ready;
							if (OnReadyChanged != null)
								OnReadyChanged(origin, orig);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse ready message from master");
					}
					break;
				case MessageType.StartGame:
					if (TryParseStartGameMessage(message, out sequence)) {
						if(PlayerCount == sequence.Length){
							VirusPlayer[] list = new VirusPlayer[PlayerCount];
							VirusPlayer[] all = AllPlayers;
							for (int i = 0; i < PlayerCount; i++ ) {
								foreach (VirusPlayer p in all) {
									if (p.ID == sequence[i]) {
										list[i] = p;
										break;
									}
								}
							}
							GameStarted = true;
							if (OnStartGame != null)
								OnStartGame(list);
						}
						else
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Start game message from master had different number of players than locally");
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse start game message from master");
					}
					break;
				case MessageType.GameMessage:
					if (TryParseGameMessage(message, out id, out x, out y, out dx, out dy)) {
						if (id == Player.ID)
							break;
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got game message without origin");
						}
						else
							if (OnGameMove != null)
								OnGameMove(origin, x, y, dx, dy);
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse game message from master");
					}
					break;
				case MessageType.Disconnect:
					if (TryParseDisconnectMessage(message, out id)) {
						origin = GetPlayerFromID(id);
						if (origin == null) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got disconnect message without origin");
						}
						else if (origin.ID == MasterPlayer.ID) {
							origin.TcpClient.Close();
							origin.Connected = false;
						}
						else {
							if (OnPlayerDisconnected != null)
								OnPlayerDisconnected(origin);
							Players.Remove(origin);
							GameStarted = false;
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse ready message from master");
					}
					break;
				default:
					if (OnBadMessageRecieved != null)
						OnBadMessageRecieved("Couldn't recognise message from master");
					break;
			}
		}
Example #35
0
        private void AwaitCommunicationClient(object client)
        {
            VirusPlayer   player       = (VirusPlayer)client;
            TcpClient     tcpClient    = player.TcpClient;
            NetworkStream clientStream = tcpClient.GetStream();

            while (player.Connected)
            {
                String message = "";

                try {                 //blocks until a client sends a message
                    message = ReadMessage(clientStream);
                }
                catch {                 //a socket error has occured
                    player.Connected = false;
                    break;
                }

                if (message == "")
                {
                    continue;
                }

                MessageType type = VirusLobby.ParseMessageType(message);

                // -- The player should start by initialising
                if (!player.Initialised)
                {
                    if (type != MessageType.Initialise)
                    {
                        player.Connected = false;
                        break;
                    }
                    bool success = TryParseInitialiseMessage(message, out player.ID, out player.Name, out player.Color);
                    if (!success)
                    {
                        player.Connected = false;
                        break;
                    }
                    player.Initialised = true;
                    Players.Add(player);
                    MasterPlayer = player;
                    Connected    = true;
                    if (OnPlayerConnected != null)
                    {
                        OnPlayerConnected(player);
                    }
                    continue;
                }

                // -- Player is already initialised, so the message needs other handling
                HandleMessageClient(message, type);
            }
            //player.TcpClient.Close();
            if (OnPlayerDisconnected != null)
            {
                try {
                    OnPlayerDisconnected(player);
                }
                catch { }
            }
            Players.Clear();
            GameStarted = false;
        }
Example #36
0
		private void TextMessageRecieved(VirusPlayer player, string text) {
			Dispatcher.Invoke(() => {
				InTextBox.Text += player.Name + ":\n" + text + "\n";
				TextScrollViewer.ScrollToBottom();
			});
		}
Example #37
0
		private void HandleMessageMaster(VirusPlayer player, string message, MessageType type) {
			string text = "";
			string id = "";
			string name = "";
			Color color = Color.Red;
			bool ready;
			int x, y, dx, dy = 0;
			switch (type) {

				// ###### ------ Initialise ------ ###### //
				case MessageType.Initialise:
					if (OnBadMessageRecieved != null)
						OnBadMessageRecieved("Got a second initialise message from player with id " + player.ID);
					break;

				// ###### ------ Text ------ ###### //
				case MessageType.Text:
					if (TryParseTextMessage(message, out id, out text)) {
						if (player.ID != id) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got text message with id " + id + " from player with id " + player.ID);
						}
						else {
							if (OnTextMessageRecieved != null)
								OnTextMessageRecieved(player, text);
							SendTextMessage(player, text);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse text message from player with id " + player.ID);
					}
					break;

				// ###### ------ Color ------ ###### //
				case MessageType.Color:
					if (TryParseColorMessage(message, out id, out color)) {
						if (player.ID != id) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got color message with id " + id + " from player with id " + player.ID);
						}
						else {
							Color orig = player.Color;
							player.Color = color;
							if (OnColorChanged != null)
								OnColorChanged(player, orig);
							SendColorMessage(player, color);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse color message from player with id " + player.ID);
					}
					break;

				// ###### ------ Name ------ ###### //
				case MessageType.Name:
					if (TryParseNameMessage(message, out id, out name)) {
						if (player.ID != id) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got name message with id " + id + " from player with id " + player.ID);
						}
						else {
							string orig = Player.Name;
							player.Name = name;
							if (OnNameChanged != null)
								OnNameChanged(player, orig);
							SendNameMessage(player, name);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse name message from player with id " + player.ID);
					}
					break;

				// ###### ------ Ready ------ ###### //
				case MessageType.Ready:
					if (TryParseReadyMessage(message, out id, out ready)) {
						if (player.ID != id) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got ready message with id " + id + " from player with id " + player.ID);
						}
						else {
							bool allreadyprev = true;
							foreach (VirusPlayer p in Players)
								if (!p.Ready)
									allreadyprev = false;
							bool orig = player.Ready;
							player.Ready = ready;
							if (OnReadyChanged != null)
								OnReadyChanged(player, orig);
							SendReadyMessage(player);
							bool allreadynow = true;
							foreach (VirusPlayer p in Players)
								if (!p.Ready)
									allreadynow = false;
							if (allreadynow != allreadyprev)
								if (OnEveryoneReadyChanged != null)
									OnEveryoneReadyChanged(allreadynow);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse ready message from player with id " + player.ID);
					}
					break;

				// ###### ------ StartGame ------ ###### //
				case MessageType.StartGame:
					if (OnBadMessageRecieved != null)
						OnBadMessageRecieved("Got start game message from player with id " + player.ID);
					break;

				// ###### ------ GameMessage ------ ###### //
				case MessageType.GameMessage:
					if (TryParseGameMessage(message, out id, out x, out y, out dx, out dy)) {
						if (player.ID != id) {
							if (OnBadMessageRecieved != null)
								OnBadMessageRecieved("Got game message with id " + id + " from player with id " + player.ID);
						}
						else {
							if (OnGameMove != null)
								OnGameMove(player, x, y, dx, dy);
							SendGameMessage(player, x, y, dx, dy);
						}
					}
					else {
						if (OnBadMessageRecieved != null)
							OnBadMessageRecieved("Couldn't parse game message from player with id " + player.ID);
					}
					break;

				// ###### ------ Disconnect ------ ###### //
				case MessageType.Disconnect:
					player.TcpClient.Close();
					player.Connected = false;
					//if (OnBadMessageRecieved != null)
					//	OnBadMessageRecieved("Got disconnect message from player with id " + player.ID);
					break;

				// ###### ------ default ------ ###### //
				default:
					if (OnBadMessageRecieved != null)
						OnBadMessageRecieved("Couldn't recognise message from player with id " + player.ID);
					break;
			}
		}
Example #38
0
 private void GameMove(VirusPlayer player, int x, int y, int dx, int dy)
 {
     Dispatcher.Invoke(() => {
         viruscontrol.NetworkMove(x, y, dx, dy);
     });
 }
Example #39
0
		private void NameUpdated(VirusPlayer player, string orig) {
			Dispatcher.Invoke(() => {
				InTextBox.Text += "Player " + orig + " changed name to " + player.Name + "\n";
				viruscontrol.Refresh();
				TextScrollViewer.ScrollToBottom();
			});
		}
Example #40
0
		private void SendInitialiseMessage(VirusPlayer player) {
			byte[] buffer = encoder.GetBytes(CodeInitialise + player.ID + " [" + player.Name + "] " + player.Color.Name);
			SendMessage(buffer);
		}
Example #41
0
		public void StartConnection(IPAddress ip) {
			if(Master)
				throw new ApplicationException("Master tried to connect to another master");

			TcpClient client = new TcpClient();
			IPEndPoint serverEndPoint = new IPEndPoint(ip, Port);
			client.Connect(serverEndPoint);
			VirusPlayer pclient = new VirusPlayer(client);
			MasterPlayer = pclient;
			SendInitialiseMessage(Player);

			Thread clientThread = new Thread(new ParameterizedThreadStart(AwaitCommunicationClient));
			clientThread.Start(pclient);
			ConnectionStarted = true;
		}