Beispiel #1
0
        private void Login()
        {
            //Check input isn't empty, else error message is shown
            if (usernameBox.TextLength > 0 && passwordBox.TextLength > 0)
            {
                //Sends input to login function, if input is good, sends user to main menu
                //Else error message is shown
                var result = NetworkClasses.Login(usernameBox.Lines[0], passwordBox.Lines[0],
                                                  Helpers.GetLocalIpAddress());
                if (result == "good" || result == "online")
                {
                    NetworkClasses.UpdateUserValue("User_List", "Online", "Online", User.PlayerId);
                    Form form = new MainMenuForm();
                    form.Show();
                    Dispose();
                }
                else if (result == "pass" || result == "user")
                {
                    MessageBox.Show("Invalid Username/Password", "Login error", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }

                /*else if (result == "online")
                 * {
                 *  MessageBox.Show("User already logged in", "Login error", MessageBoxButtons.OK,
                 *      MessageBoxIcon.Error);
                 * }*/
            }
            else
            {
                MessageBox.Show("Username and password cannot be blank.", "Login error", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
        }
Beispiel #2
0
 /// <summary>
 /// On click, sends username,password, and IP to createUser function
 /// Also checks validity of username and password
 ///     i.e. Can't be blank, must contain letters and numbers only, and username can't already exist
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void newUserButton_Click(object sender, EventArgs e)
 {
     errorLabel.Hide();
     //Check that the inputs are not empty
     if (newUsername.TextLength > 0 && newPassword.TextLength > 0)
     {
         if (ContainsVaildChars(newUsername.Text) && ContainsVaildChars(newPassword.Text))
         {
             var good = NetworkClasses.CreateUser(newUsername.Lines[0], newPassword.Lines[0],
                                                  Helpers.GetLocalIpAddress());
             if (good)
             {
                 Form form = new LoginForm();
                 form.Show();
                 Dispose();
             }
             else
             {
                 errorLabel.Text = "Username already exists.";
                 errorLabel.Show();
             }
         }
         else
         {
             errorLabel.Text = "LETTERS AND NUMBERS ONLY";
             errorLabel.Show();
         }
     }
     else
     {
         errorLabel.Text = "Username/Password cannot be blank.";
         errorLabel.Show();
     }
 }
 private void passChange_Click(object sender, EventArgs e)
 {
     if (passChangeText.TextLength >= 5 && passChangeText.TextLength <= 20)
     {
         if (ContainsVaildChars(passChangeText.Text))
         {
             if (NetworkClasses.UpdateUserValue("User_List", "Password", StringCipher.Encrypt(passChangeText.Text, "thomas").ToString(), User.PlayerId))
             {
                 MessageBox.Show("Password has been changed", "Password Updated", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 passChangeText.Text = "";
             }
             else
             {
                 MessageBox.Show("Something went wrong", "Password Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
             }
         }
         else
         {
             MessageBox.Show("Password must contain only letters and numbers.", "Password Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
     else
     {
         MessageBox.Show("Password must be between 5 and 20 characters.", "Password Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
 }
        private void banPlayer_Click(object sender, EventArgs e)
        {
            var n = -1;

            //Checks if user is admin
            if (NetworkClasses.GetPlayer(User.PlayerId).Tables[0].Rows[0]["IsAdmin"].ToString() == "1")
            {
                //Checks for empty textbox and if the value is an int
                if (banPlayerText.TextLength > 0 && int.TryParse(banPlayerText.Lines[0], out n))
                {
                    //Bans the selected player id
                    if (NetworkClasses.BanPlayer(n))
                    {
                        MessageBox.Show("Successfully Banned Player ID: " + banPlayerText.Lines[0], "Player Banned", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        banPlayerText.Lines[0] = "";
                    }
                    else
                    {
                        MessageBox.Show("Invalid Player ID", "Ban Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("Player ID must be numeric.", "Ban Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            else
            {
                MessageBox.Show("You are not an admin, contact an admin for privileges.", "Admin Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
 private void spectateButton_Click(object sender, EventArgs e)
 {
     if (!spectateButton.Enabled)
     {
         return;
     }
     //Checks if user is banned
     if (NetworkClasses.GetPlayer(User.PlayerId).Tables[0].Rows[0]["IsBanned"].ToString() == "0")
     {
         //Connect as a spectator
         if (Client.Connect(false))
         {
             try
             {
                 NetworkClasses.UpdateUserValue("User_List", "Online", "Spectating", User.PlayerId);
                 //TODO Start game?
             }
             catch (Exception exception)
             {
                 Console.WriteLine(exception);
             }
         }
         else
         {
             Console.WriteLine("Couldn't Connect");
         }
     }
     else
     {
         MessageBox.Show("Can't connect to game, you have been banned. Please contact administrator to lift ban.", "Join Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
        /// <summary>
        /// On click, queries the database to check if user exsits, and input is correct
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void loginButton_Click(object sender, EventArgs e)
        {
            //Check input isn't empty, else error message is shown
            if (usernameBox.TextLength > 0 && passwordBox.TextLength > 0)
            {
                //Hide existing error label, if any
                errorLabel.Hide();

                //Sends input to login function, if input is good, sends user to main menu
                //Else error message is shown
                if (NetworkClasses.Login(usernameBox.Lines[0], passwordBox.Lines[0], Helpers.GetLocalIpAddress()))
                {
                    Form form = new MainMenuForm();
                    form.Show();
                    Dispose();
                }
                else
                {
                    errorLabel.Text = "Invalid Username/Password";
                    errorLabel.Show();
                }
            }
            else
            {
                errorLabel.Text = "Username/Password cannot be blank.";
                errorLabel.Show();
            }
        }
        /// <summary>
        /// Once all players are ready, adds players to the Game controller and starts the game
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void start_game_Click(object sender, EventArgs e)
        {
            var ds  = NetworkClasses.GetServer(User.PlayerId, User.LocalIp);
            var row = ds.Tables[0].Rows[0];

            var grabber = NetworkClasses.GetPlayer(int.Parse(row["Host"].ToString()));

            //Host
            LobbyController.AddPlayer(int.Parse(grabber.Tables[0].Rows[0]["Player_ID"].ToString()), grabber.Tables[0].Rows[0]["_Character"].ToString());

            for (var i = 2; i <= 6; i++)
            {
                if (string.IsNullOrEmpty(row["Player_" + i].ToString()))
                {
                    continue;
                }
                grabber = NetworkClasses.GetPlayer(int.Parse(row["Player_" + i].ToString()));
                LobbyController.AddPlayer(int.Parse(grabber.Tables[0].Rows[0]["Player_ID"].ToString()), grabber.Tables[0].Rows[0]["_Character"].ToString());
            }
            NetworkClasses.UpdateServerValue("Status", "In Progress", "Host", User.PlayerId);
            NetworkClasses.UpdateUserValue("User_List", "Online", "In Game", User.PlayerId);
            LobbyController.StartGame();
            Host.StartGame();
            _timer.Stop();
            //_chat.Dispose();
            _gameTimer.Start();
            if (!_profile.IsDisposed)
            {
                _profile.Dispose();
            }
            Hide();

            //MainMenuForm waiter = new MainMenuForm();
            //waiter.Show();
        }
 private void AddFriend()
 {
     if (username.Text.Length > 0)
     {
         if (ContainsVaildChars(username.Text))
         {
             var status = NetworkClasses.AddFriend(username.Text);
             switch (status)
             {
                 case "Done":
                     username.Text = "";
                     Hide();
                     break;
                 case "Nonexistant":
                     MessageBox.Show("Username doesn't exist", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     break;
                 case "Preexisting":
                     MessageBox.Show("Already Friends with " + username.Text, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     break;
             }
         }
         else
         {
             MessageBox.Show("Username can only contian letters and numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     else
     {
         MessageBox.Show("Please enter a username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
 private void nameChange_Click(object sender, EventArgs e)
 {
     if (nameChangeText.TextLength > 0 && nameChangeText.TextLength <= 20)
     {
         if (ContainsVaildChars(nameChangeText.Text))
         {
             if (NetworkClasses.UpdateUserValue("User_List", "_Character", nameChangeText.Text, User.PlayerId))
             {
                 MessageBox.Show("Username has been changed to " + nameChangeText.Text + ".", "Username Updated",
                                 MessageBoxButtons.OK, MessageBoxIcon.Information);
                 nameChangeText.Text = "";
             }
             else
             {
                 MessageBox.Show("Username is already taken.", "Username Error", MessageBoxButtons.OK,
                                 MessageBoxIcon.Warning);
             }
         }
         else
         {
             MessageBox.Show("Username must contain only letters and numbers.", "Username Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
     else
     {
         MessageBox.Show("Username must be between 1 and 20 characters.", "Username Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
 }
 /// <summary>
 /// Automatic update of the list of players and their characters every 1 seconds
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void timer_Tick(object sender, EventArgs e)
 {
     if (Host.Players.Count > 1)
     {
         start_game.Enabled = NetworkClasses.CheckReady(Host.Players);
     }
     UpdateList();
 }
        /// <summary>
        /// On click, starts the NetHost and takes user to the host lobby
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HostButton_Click(object sender, EventArgs e)
        {
            Host.ServerStart();
            NetworkClasses.UpdatePlayerStat(User.PlayerId, "Games_Hosted", 1);
            Form gameList = new HostGameListForm();

            gameList.Show();
            Dispose();
        }
        public void GetFriends()
        {
            var playerFriends =
                NetworkClasses.GetPlayer(User.PlayerId).Tables[0].Rows[0]["Friends"].ToString().Split(',');

            if (playerFriends[0] == "0")
            {
                if (BoxOFriends.Items.Count == 1)
                {
                    BoxOFriends.Items.Clear();
                    delFriend.Enabled                    = false;
                    addToolStripMenuItem.Visible         = true;
                    viewProfileToolStripMenuItem.Visible = false;
                    deleteToolStripMenuItem.Visible      = false;
                    joinGameToolStripMenuItem.Visible    = false;
                    spectateToolStripMenuItem.Visible    = false;
                    _friendInfo = new List <DataSet>();
                }
                return;
            }
            var datasets = playerFriends.Select(friend => NetworkClasses.GetPlayer(int.Parse(friend))).ToList();

            if (datasets.Count != _friendInfo.Count)
            {
                BoxOFriends.Items.Clear();
                foreach (var player in datasets)
                {
                    var listItem = new ListViewItem(player.Tables[0].Rows[0]["Username"].ToString());
                    listItem.SubItems.Add(player.Tables[0].Rows[0]["Online"].ToString());
                    BoxOFriends.Items.Add(listItem);
                }
                _friendInfo = datasets;
                return;
            }
            for (var i = 0; i < datasets.Count; i++)
            {
                if (datasets[i].Tables[0].Rows[0]["Online"].ToString() ==
                    _friendInfo[i].Tables[0].Rows[0]["Online"].ToString())
                {
                    continue;
                }
                BoxOFriends.Items.Clear();
                foreach (var player in datasets)
                {
                    var listItem = new ListViewItem(player.Tables[0].Rows[0]["Username"].ToString());
                    listItem.SubItems.Add(player.Tables[0].Rows[0]["Online"].ToString());
                    BoxOFriends.Items.Add(listItem);
                }
                _friendInfo = datasets;
                if (BoxOFriends.Items.Count == 10)
                {
                    addToolStripMenuItem.Visible = false;
                    addFriend.Enabled            = false;
                }
                return;
            }
        }
        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var result = MessageBox.Show("Are you sure?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                NetworkClasses.DelFriend(BoxOFriends.SelectedItems[0].Text);
            }
        }
        private void logoutButton_Click(object sender, EventArgs e)
        {
            _timer.Stop();
            NetworkClasses.UpdateUserValue("User_List", "Online", "Offline", User.PlayerId);
            Form login = new LoginForm();

            _friends.Dispose();
            login.Show();
            Dispose();
        }
        private void spectateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var ds = NetworkClasses.GetServerByPlayerId(NetworkClasses.GetPlayer(BoxOFriends.SelectedItems[0].Text).Tables[0].Rows[0]["Player_ID"].ToString());

            Client.Conn = ds.Tables[0].Rows[0]["Host_IP"].ToString();
            Client.NetClient.Start();
            Client.Connect(false);
            NetworkClasses.UpdateUserValue("User_List", "Online", "Spectating", User.PlayerId);
            //Dispose();
        }
        /// <summary>
        /// On click, resets character to null, stops NetServer, and takes user back to main menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void leaveGame_Click(object sender, EventArgs e)
        {
            _timer.Stop();
            NetworkClasses.UpdateCharacter(User.PlayerId, null);
            Host.ServerStop();
            var main = new MainMenuForm();

            main.Show();
            Dispose();
        }
Beispiel #17
0
        /// <summary>
        /// On click, resets character to null, removes player from server, stops NetClient, and takes user back to main menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void leaveGame_Click(object sender, EventArgs e)
        {
            _timer.Stop();
            NetworkClasses.UpdateCharacter(User.PlayerId, null);
            NetworkClasses.FindRemovePlayer(Client.Conn, User.PlayerId);
            Client.ClientStop();
            var form = new MainMenuForm();

            form.Show();
            Dispose();
        }
 /// <summary>
 /// Checks if user is closing the application, closes accordingly
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void MainMenuForm_Closing(object sender, FormClosingEventArgs e)
 {
     if (e.CloseReason != CloseReason.UserClosing)
     {
         return;
     }
     _friends.Dispose();
     _timer.Stop();
     Dispose();
     NetworkClasses.UpdateUserValue("User_List", "Online", "Offline", User.PlayerId);
     Environment.Exit(0);
 }
        /// <summary>
        /// On click, starts the NetHost and takes user to the host lobby
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HostButton_Click(object sender, EventArgs e)
        {
            Host.ServerStart();
            NetworkClasses.UpdateUserValue("User_Stats", "Games_Hosted", "Games_Hosted + 1", User.PlayerId);
            NetworkClasses.UpdateUserValue("User_List", "Online", "In Lobby", User.PlayerId);
            _timer.Stop();
            Form gameList = new HostGameListForm();

            _friends.Dispose();
            gameList.Show();
            Dispose();
        }
Beispiel #20
0
 /// <summary>
 /// Checks if user is closing the application, clsoes accordingly
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void PlayerLobby_Closing(object sender, FormClosingEventArgs e)
 {
     if (e.CloseReason != CloseReason.UserClosing)
     {
         return;
     }
     _timer.Stop();
     Dispose();
     NetworkClasses.UpdateCharacter(User.PlayerId, null);
     NetworkClasses.FindRemovePlayer(Client.Conn, User.PlayerId);
     Client.ClientStop();
     Environment.Exit(0);
 }
        /// <summary>
        /// Deletes the server from the database, and stop the NetServer
        /// </summary>
        public static void ServerStop()
        {
            //Disconnects local Client
            Client.ClientStop();
            //Sends message to clients that the server is closing
            var outMsg = _server.CreateMessage();

            outMsg.Write((byte)PacketTypes.Closed);
            _server.SendToAll(outMsg, NetDeliveryMethod.ReliableOrdered);
            //Shuts down server and deletes it from the database
            _shouldStop = true;
            _server.Shutdown("Closed");
            NetworkClasses.DeleteServer(User.PlayerId);
            NetworkClasses.UpdateUserValue("User_List", "_Character", null, User.PlayerId);
        }
 /// <summary>
 /// When the window is closed, the server is stopped, and the application is closed
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void HostGameListForm_Closing(object sender, FormClosingEventArgs e)
 {
     //if (e.CloseReason == CloseReason.UserClosing)
     //{
     _timer.Stop();
     _chat.Dispose();
     if (!_profile.IsDisposed)
     {
         _profile.Dispose();
     }
     Dispose();
     NetworkClasses.UpdateUserValue("User_List", "Online", "Offline", User.PlayerId);
     Host.ServerStop();
     Environment.Exit(0);
     //}
 }
        /// <summary>
        /// On click, resets character to null, stops NetServer, and takes user back to main menu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void leaveGame_Click(object sender, EventArgs e)
        {
            _timer.Stop();
            NetworkClasses.UpdateUserValue("User_List", "_Character", null, User.PlayerId);
            NetworkClasses.UpdateUserValue("User_List", "Online", "Online", User.PlayerId);
            Host.ServerStop();
            Form form = new MainMenuForm();

            form.Show();
            _chat.Dispose();
            if (!_profile.IsDisposed)
            {
                _profile.Dispose();
            }
            Dispose();
        }
Beispiel #24
0
        private void gameTimer_tick(object sender, EventArgs e)
        {
            if (!Client.gameClose)
            {
                return;
            }
            _gameTimer.Stop();
            if (!_chat.IsDisposed)
            {
                _chat.Dispose();
            }
            NetworkClasses.UpdateUserValue("User_List", "Online", "Online", User.PlayerId);
            MessageBox.Show("Game Closed.", "Update", MessageBoxButtons.OK);
            Form form = new MainMenuForm();

            form.Show();
        }
        /// <summary>
        /// Updates the form view with the current list of servers in the database
        /// </summary>
        private void ListServers()
        {
            var ds = NetworkClasses.GetServers();

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                var grabber = NetworkClasses.GetPlayer(int.Parse(row["Host"].ToString()));

                var listItem = new ListViewItem(grabber.Tables[0].Rows[0]["Username"].ToString());
                listItem.SubItems.Add(grabber.Tables[0].Rows[0]["Local_IP"].ToString());
                listItem.SubItems.Add(NetworkClasses.GetNumPlayers(int.Parse(row["Server_ID"].ToString())) + "/6");
                listItem.SubItems.Add(row["Status"].ToString());

                //Add the row entry to the listview
                serverList.Items.Add(listItem);
            }
        }
        private void joinGameToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var ds = NetworkClasses.GetServerByPlayerId(NetworkClasses.GetPlayer(BoxOFriends.SelectedItems[0].Text).Tables[0].Rows[0]["Player_ID"].ToString());

            //Console.WriteLine(ds.Tables[0].Rows[0]["Host"]);
            Client.Conn = ds.Tables[0].Rows[0]["Host_IP"].ToString();
            Client.NetClient.Start();
            Client.Connect();
            NetworkClasses.JoinServer(Client.Conn, User.PlayerId);
            //Increments games joined
            NetworkClasses.UpdateUserValue("User_Stats", "Games_Joined", "Games_Joined+1", User.PlayerId);
            NetworkClasses.UpdateUserValue("User_List", "Online", "In Lobby", User.PlayerId);
            Form form = new PlayerLobby();

            form.Show();
            Dispose();
        }
 /// <summary>
 /// Checks validity of username and password and sends info to database
 ///     i.e. Length must be between 1 and 20, must contain letters and numbers only, and username can't already exist
 /// </summary>
 private void Create()
 {
     //Check that the inputs are not empty
     if (newUsername.TextLength > 0 && newPassword.TextLength >= 5 && newUsername.TextLength <= 20 && newPassword.TextLength < 20)
     {
         if (ContainsVaildChars(newUsername.Text) && ContainsVaildChars(newPassword.Text))
         {
             var good = NetworkClasses.CreateUser(newUsername.Lines[0], newPassword.Lines[0],
                                                  Helpers.GetLocalIpAddress());
             if (good)
             {
                 Form form = new LoginForm();
                 form.Show();
                 Dispose();
             }
             else
             {
                 MessageBox.Show("Username already exists.", "Error", MessageBoxButtons.OK,
                                 MessageBoxIcon.Exclamation);
             }
         }
         else
         {
             MessageBox.Show("LETTERS AND NUMBERS ONLY", "Error", MessageBoxButtons.OK,
                             MessageBoxIcon.Exclamation);
         }
     }
     else
     {
         if (newUsername.Text.Length < 1 || newUsername.Text.Length > 20)
         {
             MessageBox.Show(
                 "Username must be between 1 and 20 characters",
                 "Error", MessageBoxButtons.OK,
                 MessageBoxIcon.Exclamation);
         }
         if (newPassword.Text.Length < 5 || newPassword.Text.Length < 20)
         {
             MessageBox.Show(
                 "Password must be between 5 and 20 characters",
                 "Error", MessageBoxButtons.OK,
                 MessageBoxIcon.Exclamation);
         }
     }
 }
 private void char_list_SelectedIndexChanged(object sender, EventArgs e)
 {
     try
     {
         if (NetworkClasses.CheckCharacterAvailable(Client.Conn, char_list.SelectedItem.ToString()))
         {
             NetworkClasses.UpdateUserValue("User_List", "_Character", char_list.SelectedItem.ToString(), User.PlayerId);
         }
         else
         {
             MessageBox.Show("Character Unavailable", "Character has already been selected", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
     catch (Exception)
     {
         MessageBox.Show("Invalid character", "Please choose a valid character", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Beispiel #29
0
 /// <summary>
 /// Checks if user is closing the application, clsoes accordingly
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void PlayerLobby_Closing(object sender, FormClosingEventArgs e)
 {
     if (e.CloseReason != CloseReason.UserClosing)
     {
         return;
     }
     _timer.Stop();
     _chat.Dispose();
     if (!_profile.IsDisposed)
     {
         _profile.Dispose();
     }
     Dispose();
     NetworkClasses.UpdateUserValue("User_List", "_Character", null, User.PlayerId);
     NetworkClasses.UpdateUserValue("User_List", "Online", "Offline", User.PlayerId);
     NetworkClasses.FindRemovePlayer(Client.Conn, User.PlayerId);
     Client.ClientStop();
     Environment.Exit(0);
 }
        /// <summary>
        /// Tells the server to delete it from list, stops loop and shuts down NetClient
        /// </summary>
        public static void ClientStop()
        {
            var outMsg = NetClient.CreateMessage();

            outMsg.Write((byte)PacketTypes.Leave);
            outMsg.Write(User.PlayerId);
            NetClient.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered);
            NetClient.WaitMessage(1000);
            NetClient.Shutdown("Closed");
            //ends the receive loop
            _shouldStop = true;
            Conn        = "";
            isSpectator = false;
            NetworkClasses.UpdateUserValue("User_List", "_Character", null, User.PlayerId);
            GameLoop = new Thread(Program.Run);
            if (GameLoop.IsAlive)
            {
                GameLoop.Abort();
            }
        }