Exemplo n.º 1
0
        /// <summary>
        /// Processes the User Move queue, either periodically or based on the manual reset event.
        /// </summary>
        /// <returns> Nothing.</returns>
        static private void ProcessEvents()
        {
            store  = Store.GetStore();
            domain = store.GetDomain(store.DefaultDomain);
            iFolderUserMove ifUserMove = null;

            while (down == false)
            {
                queueEvent.WaitOne(QueEventScheduleTime * 1000, false);
                if (down == true)
                {
                    break;
                }
                try
                {
                    iFolderUserMove.UpdateUserMoveQueue();
                }
                catch (Exception e)
                {
                    log.Debug("ProcessEvents: Update User Move Queue Failed {0}:{1}", e.Message, e.StackTrace);
                }
                QueueProcessingState = true;
                while (true)
                {
                    ifUserMove = null;
                    lock ( eventQueue )
                    {
                        if (eventQueue.Count == 0)
                        {
                            queueEvent.Reset();
                            break;
                        }
                        ifUserMove = eventQueue.Dequeue() as iFolderUserMove;
                    }
                    Member tmpmember = domain.GetMemberByID(ifUserMove.member.UserID);
                    if (tmpmember != null)
                    {
                        ifUserMove.member = tmpmember;
                    }
                    try
                    {
                        if (!ifUserMove.ProcessMovement(domain.ID))
                        {
                            Add(ifUserMove);
                            Thread.Sleep(5 * 1000);
                        }
                    }
                    catch (Exception e)
                    {
                        log.Debug("ProcessEvents: Exception {0} {1} received for {2}", e.Message, e.StackTrace, ifUserMove.member.UserID);
                        Add(ifUserMove);
                        Thread.Sleep(30 * 1000);
                    }
                }
                QueueProcessingState = false;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// IsUserAlreadyInQueue check users presence in the move queue
        /// </summary>
        /// <param name="ifUserMove">iFolder user move object</param>
        /// <returns> True if user exists in the queue,
        /// false if the user is not in the queue.</returns>
        static public bool IsUserAlreadyInQueue(iFolderUserMove ifUserMove)
        {
            log.Debug("IsUserAlreadyInQueue: Checking User id {0}:{1} in the User Move Queue", ifUserMove.member.FN, ifUserMove.member.UserID);

            lock ( eventQueue )
            {
                if (eventQueue.Count != 0)
                {
                    Array ifUserMoveList = Array.CreateInstance(typeof(iFolderUserMove), eventQueue.Count);
                    eventQueue.CopyTo(ifUserMoveList, 0);
                    foreach (iFolderUserMove ifUM in ifUserMoveList)
                    {
                        if (ifUM.member.UserID == ifUserMove.member.UserID)
                        {
                            log.Debug("IsUserAlreadyInQueue: User {0}:{1} is already in the queue", ifUserMove.member.FN, ifUserMove.member.UserID);
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }