VoteOnSong() private method

Checks to see if a song is in the database already. If it isn't, the song is added to the database with a single vote. If it is, add the vote to that song.
private VoteOnSong ( SongParameters song, bool vote, int userID ) : SongParameters
song BlottoBeats.Library.SongData.SongParameters The song object to vote on
vote bool The vote. True if upvote, false if downvote.
userID int The ID of the user who voted
return BlottoBeats.Library.SongData.SongParameters
Example #1
0
        private int logLevel;           // How verbose the logs should be.  Higher is more verbose.

        /// <summary>
        /// Starts up the server
        /// </summary>
        public static void Main()
        {
            // Create a new server that listens on port 3000;
            //Database database = new Database("Server=localhost;Port=3306;Database=songdatabase;Uid=root;password=joeswanson;");
            //Database database = new Database("Server=68.234.183.70;Port=3001;Database=songdatabase;Uid=BlottoServer;password=JJLrDtcrfvjym8gh1zUVklF19KDf1CTM;");
            //Database database = new Database("Server=BlottoBeats.db.11772669.hostedresource.com;Port=3306;Database=BlottoBeats;Uid=BlottoBeats;password=JoeSwanson307!;");
            //Server server = new Server(3000, database, "server.log", 3);
            Database database = null;
            Server   server   = null;

            // Server startup screen
            CommandLine.WriteLine("---------------------------------------------");
            CommandLine.WriteLine("      BlottoBeats Server v1.0 (Stopped)");
            CommandLine.WriteLine("---------------------------------------------");
            CommandLine.WriteLine("Host ID: " + Properties.Settings.Default.hostID);
            CommandLine.WriteLine("Port:    " + Properties.Settings.Default.port);
            CommandLine.WriteLine();
            CommandLine.WriteLine("Database Name: " + Properties.Settings.Default.databaseName);
            CommandLine.WriteLine();
            CommandLine.WriteLine("Username: "******"---------------------------------------------");
            CommandLine.WriteLine("Type upstart <password> to log into the database and start the server.");
            CommandLine.WriteLine("Type help or ? for more commands.");

            while (true)
            {
                CommandLine line = CommandLine.Prompt();

                switch (line.command.ToLower())
                {
                // SERVER COMMANDS
                case "start":
                    if (server != null && server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: Can't start the server, the server is already started");
                    }
                    else if (database == null || server == null)
                    {
                        CommandLine.WriteLine("ERROR: The update command needs to be run first");
                    }
                    else
                    {
                        server.Start();
                    }
                    break;

                case "stop":
                    if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: Can't stop the server, the server is already stopped");
                    }
                    else
                    {
                        server.Stop();
                    }
                    break;

                case "restart":
                    if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: Can't restart the server, the server is stopped");
                    }
                    else
                    {
                        server.Restart();
                    }
                    break;

                case "update":
                case "updatedb":
                case "updatedatabase":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server != null && server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: Can't update the database if the server is running.  Stop the server first.");
                    }
                    else
                    {
                        database = new Database(Properties.Settings.Default.hostID,
                                                Properties.Settings.Default.port,
                                                Properties.Settings.Default.databaseName,
                                                Properties.Settings.Default.userID,
                                                line.args[0]);
                        server = new Server(3000, database, "server.log", 3);
                        CommandLine.WriteLine("Database updated successfully.");
                    }
                    break;

                case "upstart":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server != null && server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: Can't update the database if the server is running.  Stop the server first.");
                    }
                    else
                    {
                        database = new Database(Properties.Settings.Default.hostID,
                                                Properties.Settings.Default.port,
                                                Properties.Settings.Default.databaseName,
                                                Properties.Settings.Default.userID,
                                                line.args[0]);
                        server = new Server(3000, database, "server.log", 3);
                        CommandLine.WriteLine("Database updated successfully.");

                        server.Start();
                    }
                    break;

                // DATABASE COMMANDS
                case "dbhost":
                case "dbhostid":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else
                    {
                        Properties.Settings.Default.hostID = line.args[0];
                        Properties.Settings.Default.Save();
                        CommandLine.WriteLine("Setting is updated.  You need to run the update command in order for the changes to be applied to the server.");
                    }
                    break;

                case "dbport":
                    int port;
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (int.TryParse(line.args[0], out port) && port > 1024 && port <= 65535)
                    {
                        Properties.Settings.Default.port = port;
                        Properties.Settings.Default.Save();
                        CommandLine.WriteLine("Setting is updated.  You need to run the update command in order for the changes to be applied to the server.");
                    }
                    else
                    {
                        CommandLine.WriteLine("ERROR: The argument must be an integer between 1024 and 65535");
                    }
                    break;

                case "database":
                case "databasename":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else
                    {
                        Properties.Settings.Default.databaseName = line.args[0];
                        Properties.Settings.Default.Save();
                        CommandLine.WriteLine("Setting is updated.  You need to run the update command in order for the changes to be applied to the server.");
                    }
                    break;

                case "dbuser":
                case "dbuserid":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else
                    {
                        Properties.Settings.Default.userID = line.args[0];
                        Properties.Settings.Default.Save();
                        CommandLine.WriteLine("Setting is updated.  You need to run the update command in order for the changes to be applied to the server.");
                    }
                    break;

                case "info":
                case "dbinfo":
                    string health = "Stopped";
                    if (server != null && server.IsAlive())
                    {
                        health = "Running";
                    }

                    CommandLine.WriteLine("---------------------------------------------");
                    CommandLine.WriteLine("      BlottoBeats Server v1.0 (" + health + ")");
                    CommandLine.WriteLine("---------------------------------------------");
                    CommandLine.WriteLine("Host ID: " + Properties.Settings.Default.hostID);
                    CommandLine.WriteLine("Port:    " + Properties.Settings.Default.port);
                    CommandLine.WriteLine();
                    CommandLine.WriteLine("Database Name: " + Properties.Settings.Default.databaseName);
                    CommandLine.WriteLine();
                    CommandLine.WriteLine("Username: "******"---------------------------------------------");
                    break;

                // USER ACCOUNT COMMANDS
                case "newaccount":
                    if (line.numArgs < 2)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires two arguments");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            UserToken token = database.Authenticate(new Credentials(line.args[0], line.args[1]), true);
                            if (token != null)
                            {
                                CommandLine.WriteLine("Registration Successful");
                            }
                            else
                            {
                                CommandLine.WriteLine("Registration Failed");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Registration could not proceed");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "deleteaccount":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int id = database.GetID(line.args[0]);
                            if (id != 0)
                            {
                                database.deleteUser(id);
                                CommandLine.WriteLine("User '" + line.args[0] + "' deleted.");
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR:User '" + line.args[0] + "' does not exist");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: User could not be deleted");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "resetpassword":
                    if (line.numArgs < 2)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires two arguments");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            Credentials credentials = new Credentials(line.args[0], line.args[1]);
                            int         id          = database.GetID(credentials.username);
                            if (id != 0)
                            {
                                database.changePassword(id, credentials.GenerateHash());
                                CommandLine.WriteLine("Password Change Successful");
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR:User '" + credentials.username + "' does not exist");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Password could not be changed");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "refreshtoken":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            if (database.RefreshToken(line.args[0]))
                            {
                                CommandLine.WriteLine("Refreshed token");
                            }
                            else
                            {
                                CommandLine.WriteLine("User '" + line.args[0] + "' does not exist");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Refresh could not proceed");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "whois":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int id;
                            if (int.TryParse(line.args[0], out id))
                            {
                                string name = database.GetUsername(id);
                                if (name != null)
                                {
                                    CommandLine.WriteLine("Username of user " + id + " is '" + name + "'");
                                }
                                else
                                {
                                    CommandLine.WriteLine("User " + id + " does not exist");
                                }
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR: Argument 1 must be an integer");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Refresh could not proceed");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                // SONG COMMANDS
                case "newsong":
                    if (line.numArgs < 3)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires three arguments");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int seed, tempo;
                            if (line.numArgs < 4)
                            {
                                if (int.TryParse(line.args[0], out seed) && int.TryParse(line.args[1], out tempo))
                                {
                                    SongParameters song = new SongParameters(seed, tempo, line.args[2]);
                                    song = database.VoteOnSong(song, true, -1);

                                    CommandLine.WriteLine("Created new song with ID '" + song.ID + "' as anonymous");
                                }
                                else
                                {
                                    CommandLine.WriteLine("Arguments 1 and 2 must be integers");
                                }
                            }
                            else
                            {
                                int userID;
                                if (int.TryParse(line.args[0], out seed) && int.TryParse(line.args[1], out tempo) && int.TryParse(line.args[3], out userID))
                                {
                                    SongParameters song = new SongParameters(seed, tempo, line.args[2], userID);
                                    song = database.VoteOnSong(song, true, -1);

                                    CommandLine.WriteLine("Created new song with ID '" + song.ID + "' belonging to user " + userID);
                                }
                                else
                                {
                                    CommandLine.WriteLine("Arguments 1, 2, and 4 must be integers");
                                }
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Could not create song");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "deletesong":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int id;
                            if (int.TryParse(line.args[0], out id) && database.SongExists(id))
                            {
                                database.deleteSong(id);
                                CommandLine.WriteLine("Song '" + id + "' deleted.");
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR:Song '" + id + "' does not exist");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Song could not be deleted");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "setscore":
                    if (line.numArgs < 2)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires two arguments");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int id, score;
                            if (int.TryParse(line.args[0], out id) && int.TryParse(line.args[1], out score) && database.SongExists(id))
                            {
                                database.changeVoteScore(id, score);
                                CommandLine.WriteLine("Song " + id + " score set to " + score);
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR:Song " + id + " does not exist");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Score could not be changed");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                case "songinfo":
                    if (line.numArgs < 1)
                    {
                        CommandLine.WriteLine("ERROR: The command '" + line.command + "' requires an argument");
                    }
                    else if (server == null || !server.IsAlive())
                    {
                        CommandLine.WriteLine("ERROR: The server is offline");
                    }
                    else
                    {
                        try {
                            int id;
                            if (int.TryParse(line.args[0], out id))
                            {
                                if (database.SongExists(id))
                                {
                                    SongParameters song = database.GetSong(id);
                                    CommandLine.WriteLine("Song " + song.ID);
                                    CommandLine.WriteLine();
                                    CommandLine.WriteLine("Seed:  " + song.seed);
                                    CommandLine.WriteLine("Tempo: " + song.tempo);
                                    CommandLine.WriteLine("Genre: " + song.genre);
                                    CommandLine.WriteLine();
                                    CommandLine.WriteLine("Score: " + song.score);
                                    CommandLine.WriteLine("User:  "******"Song " + id + " does not exist");
                                }
                            }
                            else
                            {
                                CommandLine.WriteLine("ERROR: Argument 1 must be an integer");
                            }
                        } catch (DatabaseException ex) {
                            CommandLine.WriteLine("DATABASE ERROR: Could not get song info");
                            CommandLine.WriteLine(ex.Message);
                        }
                    }
                    break;

                // Shell commands
                case "quit":
                case "exit":
                    if (server != null && server.IsAlive())
                    {
                        server.Stop();
                    }
                    return;

                case "help":
                case "?":
                    CommandLine.WriteLine("-------------------------");
                    CommandLine.WriteLine("      COMMAND LIST");
                    CommandLine.WriteLine("-------------------------");
                    CommandLine.WriteLine("SERVER COMMANDS");
                    CommandLine.WriteLine("Start");
                    CommandLine.WriteLine("    Starts the server");
                    CommandLine.WriteLine("Stop");
                    CommandLine.WriteLine("    Stops the server");
                    CommandLine.WriteLine("Restart");
                    CommandLine.WriteLine("    Restarts the server");
                    CommandLine.WriteLine("Update <password>");
                    CommandLine.WriteLine("    Modifies the database according to the changes.  The server must be stopped.");
                    CommandLine.WriteLine("Upstart <password>");
                    CommandLine.WriteLine("    Modifies the database according to the changes and starts the server.  The server must be stopped.");
                    CommandLine.WriteLine();
                    CommandLine.WriteLine("DATABASE COMMANDS");
                    CommandLine.WriteLine("DBHost/DBHostID <new ID>");
                    CommandLine.WriteLine("    Changes the hostID of the database.  Requires an update to take effect.");
                    CommandLine.WriteLine("DBPort <new Port>");
                    CommandLine.WriteLine("    Changes the port of the database.  Requires an update to take effect.");
                    CommandLine.WriteLine("Database/DatabaseName <new name>");
                    CommandLine.WriteLine("    Changes the name of the database.  Requires an update to take effect.");
                    CommandLine.WriteLine("DBUser/DBUserID <new id>");
                    CommandLine.WriteLine("    Changes the userID to use with the database.  Requires an update to take effect.");
                    CommandLine.WriteLine("DBInfo");
                    CommandLine.WriteLine("    Displays information about the server.");
                    CommandLine.WriteLine();
                    CommandLine.WriteLine("USER ACCOUNT COMMANDS");
                    CommandLine.WriteLine("Newaccount <username> <password>");
                    CommandLine.WriteLine("    Creates a new user account with the given username and password.");
                    CommandLine.WriteLine("Deleteaccount <username>");
                    CommandLine.WriteLine("    Deletes a user account with the given username.");
                    CommandLine.WriteLine("Resetpassword <username> <password>");
                    CommandLine.WriteLine("    Resets the password of the given username to the given password.");
                    CommandLine.WriteLine("Refreshtoken <username>");
                    CommandLine.WriteLine("    Refreshes the token associated with the given user account.");
                    CommandLine.WriteLine("Whois <id>");
                    CommandLine.WriteLine("    Returns the username of the user with the given ID.");
                    CommandLine.WriteLine();
                    CommandLine.WriteLine("SONG COMMANDS");
                    CommandLine.WriteLine("Newsong <seed> <tempo> <genre> [<userID>]");
                    CommandLine.WriteLine("    Adds a new song to the database with the given seed, tempo, and genre, and optionally, userID.  Displays the ID of the newly-added song.");
                    CommandLine.WriteLine("Deletesong <id>");
                    CommandLine.WriteLine("    Removes the given song from the database.");
                    CommandLine.WriteLine("Setscore <id> <score>");
                    CommandLine.WriteLine("    Sets the score of a given song to the given score.");
                    CommandLine.WriteLine("Songinfo <id>");
                    CommandLine.WriteLine("    Gets all the info about the given song.");

                    break;

                default:
                    CommandLine.WriteLine("'" + line.command + "' is not a valid command.  Type help or ? for a list of commands.");
                    break;
                }
            }
        }