Exemplo n.º 1
0
 public void DispatchNext()
 {
     Call        c = calls.NextToDispatch();
     QueueMember m = members.NextAvailable();
     //Aca mandar mensaje akka al callhandler con el contacto del miembro para que intente conectarlo
     //debería recibir un mensaje trying y luego failed o success para poder saber en que anda la llamada
     //que mandamos a hacer desde acá
 }
Exemplo n.º 2
0
 /// <summary>
 /// Remueve un miembro de la lista
 /// </summary>
 /// <param name="member"></param>
 public void RemoveMember(QueueMember member)
 {
     for (int i = members.Count - 1; i >= 0; --i)
     {
         if (members[i].Id == member.Id)
         {
             this.members.RemoveAt(i);
         }
     }
 }
Exemplo n.º 3
0
        public QueueMember GetNext()
        {
            QueueMember next = null;

            if (members != null && members.Count > 0)
            {
                do
                {
                    //Implementación muy simple de round robin con memoria
                    next = members[0];
                    members.RemoveAt(0);
                    members.Add(next);
                } while (!next.IsPaused);
            }
            //Si next es nulo no hay agentes disponibles
            return(next);
        }
Exemplo n.º 4
0
        public QueueMember GetNext(int wrapupTime)
        {
            QueueMember next = null;
            QueueMember last = null;

            if (members != null && members.Count > 0)
            {
                last = members[0];
                bool allBusy = false;
                bool hasOne  = false;
                do
                {
                    //Implementación muy simple de round robin con memoria
                    next = members[0];
                    members.RemoveAt(0);
                    members.Add(next);

                    //TODO: poner esta logica dentro del queuemember cosa de solo consultar una propiedad
                    if ((!next.Member.DeviceIsInUse && next.Member.IsAvailable && !next.IsPaused && next.LastCall.AddSeconds((double)wrapupTime) < DateTime.Now)) //!next.Member.IsAvailable ||
                    {
                        hasOne = true;
                        next.Member.IsAvailable = false;
                    }

                    if (next == last) //ya recorri todos y etan ocupados
                    {
                        allBusy = true;
                    }
                } while (!allBusy && !hasOne);

                if (!hasOne)
                {
                    next = null;
                }
            }
            //Si next es nulo no hay agentes disponibles
            return(next);
        }
Exemplo n.º 5
0
 public void RemoveQueueMember(QueueMember queueMember)
 {
     queueMeberList.RemoveMember(queueMember);
 }
Exemplo n.º 6
0
 //Este método agrega un QueueMember a la cola, el queue memeber ya me tiene que llegar con los dato de prioridad y demas cargados
 //La idea es que una cola solo tenga lo miembros que va a utlizar, esto es para no tener una lista de 1000 miembros para recorrer
 //y que solo 10 se encuentren logueados en la cola
 public void AddQueueMember(QueueMember queueMember)
 {
     queueMeberList.AddMember(queueMember);
 }
Exemplo n.º 7
0
 /// <summary>
 /// Agrega un miembro a la lista
 /// </summary>
 /// <param name="member"></param>
 public void AddMember(QueueMember member)
 {
     this.members.Add(member);
 }