示例#1
0
文件: DJ.svc.cs 项目: jakub77/KServer
        /// <summary>
        /// Remove a user from the queue. All of the user's song requests are removed.
        /// </summary>
        /// <param name="userID">The userID of the user</param>
        /// <param name="DJKey">The DJ's assigned key.</param>
        /// <returns>The outcome of the operation.</returns>
        public Response DJRemoveUser(int userID, long DJKey)
        {
            int DJID = -1;
            using (DatabaseConnectivity db = new DatabaseConnectivity())
            {
                // Try to establish a database connection
                Response r = db.OpenConnection();
                if (r.error)
                    return r;

                // Convert the DJKey to a DJID
                r = DJKeyToID(DJKey, out DJID, db);
                if (r.error)
                    return r;

                // Make sure the DJ isn't logged out.
                r = DJValidateStatus(DJID, "2", db);
                if (r.error)
                    return r;

                // Get the current song Requests
                r = db.GetSongRequests(DJID);
                if (r.error)
                    return r;

                string requests = r.message;
                string newRequests = string.Empty;

                // If there were no requests, simply add the single request.
                if (requests.Trim().Length == 0)
                {
                    r.error = true;
                    r.message = "The queue is empty";
                    return r;
                }

                // Since there is a list of requests, call to parse the raw string data into an list of queuesingers.
                List<queueSinger> queue;
                r = Common.DBToMinimalList(requests, out queue);
                if (r.error)
                    return r;

                // Search to see if the user is already in this list of singers.
                for (int i = 0; i < queue.Count; i++)
                {
                    // We found the userID already in here.
                    if (queue[i].user.userID == userID)
                    {
                        queue.RemoveAt(i);

                        if (userID < 0)
                        {
                            r = db.DJRemoveTempUser(userID, DJID);
                            if (r.error)
                                return r;
                        }

                        Common.MinimalListToDB(queue, out newRequests);
                        r = db.SetSongRequests(DJID, newRequests);
                        if (r.error)
                            return r;
                        Common.PushMessageToUsersOfDJ(DJID, "queue", db);
                        return r;
                    }
                }

                r.error = true;
                r.message = "Could not find client in the queue.";
                return r;
            }
        }
示例#2
0
文件: DJ.svc.cs 项目: jakub77/KServer
        /// <summary>
        /// Pop the top song off the queue and updates the queue.
        /// </summary>
        /// <param name="sr">A Song request that represents the top song off the queue. Must match what the server believes is the top of the queue. Used to make sure the queues are in sync.</param>
        /// <param name="DJKey">The DJKey given to the DJ.</param>
        /// <returns>The outcome of the operaton.</returns>
        public Response DJPopQueue(SongRequest sr, long DJKey)
        {
            int DJID = -1;
            using (DatabaseConnectivity db = new DatabaseConnectivity())
            {
                // Try to establish a database connection
                Response r = db.OpenConnection();
                if (r.error)
                    return r;

                // Convert the DJKey to a DJID
                r = DJKeyToID(DJKey, out DJID, db);
                if (r.error)
                    return r;

                r = DJValidateStatus(DJID, "2", db);
                if (r.error)
                    return r;

                r = db.GetSongRequests(DJID);
                if (r.error)
                    return r;

                string raw = r.message;
                if (raw.Trim() == "")
                {
                    r.error = true;
                    r.message = "Empty Queue";
                    return r;
                }

                List<queueSinger> queue;
                r = Common.DBToMinimalList(raw, out  queue);
                if (r.error)
                    return r;

                if (queue[0].user.userID != sr.user.userID || queue[0].songs[0].ID != sr.songID)
                {
                    r.error = true;
                    r.message = "Song Request to Pop did not match first song Request, is your queue out of date?";
                    return r;
                }

                int nextUserID = queue[0].user.userID;
                Common.PushMessageToMobile(nextUserID, "turn", db);

                queue[0].songs.RemoveAt(0);
                if (queue[0].songs.Count == 0)
                {
                    if (queue[0].user.userID < 0)
                    {
                        r = db.DJRemoveTempUser(queue[0].user.userID, DJID);
                        queue.RemoveAt(0);
                        if (r.error)
                            return r;
                    }
                    else
                        queue.RemoveAt(0);

                }
                else
                {
                    queueSinger temp = queue[0];
                    queue.RemoveAt(0);
                    queue.Add(temp);
                }

                if (queue.Count > 0)
                {
                    nextUserID = queue[0].user.userID;
                    Common.PushMessageToMobile(nextUserID, "next", db);
                }

                raw = string.Empty;
                r = Common.MinimalListToDB(queue, out raw);
                if (r.error)
                    return r;
                r = db.SetSongRequests(DJID, raw);
                if (r.error)
                    return r;

                if (sr.user.userID > 0)
                {
                    r = db.MobileAddSongHistory(sr.user.userID, DJID, sr.songID, DateTime.Now);
                    if (r.error)
                        Common.LogError(r.message, Environment.StackTrace, r, 1);
                }

                Common.PushMessageToUsersOfDJ(DJID, "queue", db);

                r = Common.RunAchievements(DJID, db);
                if (r.error)
                    return r;

                return r;
            }
        }