private void ProcessRingingEvent(IAgentStatusEvent objRoutingEventAssignedEvent) { int index; Agent agent; string callID; try { if (objRoutingEventAssignedEvent != null) { callID = objRoutingEventAssignedEvent.CallID; _logger.Info("RoutingEvent Assigned ## CallID: " + callID + " AgentKey: " + objRoutingEventAssignedEvent.AgentKey + " AgentStation: " + objRoutingEventAssignedEvent.Extension); callDetailGridUpdateEvent?.Invoke(false, callID, "assigned", "ringing"); if (AgentsListFromServer.Contains(objRoutingEventAssignedEvent.AgentKey.ToString())) { agent = (Agent)AgentsListFromServer[objRoutingEventAssignedEvent.AgentKey.ToString()]; agent.Status = "Ringing"; agent.CallID = callID; index = listViewAgentsList.Items.IndexOfKey(agent.Name); listViewAgentsList.Items[index].BackColor = Color.OrangeRed; listViewAgentsList.Items[index].SubItems[2].Text = agent.Status; listViewAgentsList.Items[index].SubItems[5].Text = callID; if (!agentsQueue.ContainsKey(agent.AgentID)) { _logger.Info("Adding Time for Agent: " + agent.AgentID); lock (agentsQueue) agentsQueue.Add(agent.AgentID, agent); if (agentsRingingTime.Contains(agent.AgentID)) { lock (agentsRingingTime) agentsRingingTime[agent.AgentID] = DateTime.Now; } else { lock (agentsRingingTime) agentsRingingTime.Add(agent.AgentID, DateTime.Now); } agentsQueueWait.Set(); } else { _logger.Info("Agent already present in Ringing Queue " + agent.AgentID); } } } } catch (Exception ex) { _logger.Error("Exception in ProcessRingingEvent " + ex); } }
private void ProcessMediaEvent(MediaEvent mediaEvent) { switch (mediaEvent.ObjectType) { case enMediaEventObjectTypes.MediaEventObjectType_AgentStatus: IAgentStatusEvent statusEvent = (IAgentStatusEvent)mediaEvent; ProcessAgentStatusEvent(statusEvent); break; case enMediaEventObjectTypes.MediaEventObjectType_Delivered: var objDeliveredEvent = mediaEvent as DeliveredEvent; _logger.Info("MediaEventObjectType_Delivered callID: " + objDeliveredEvent.CallID); break; case enMediaEventObjectTypes.MediaEventObjectType_Established: var objEstablishedEvent = mediaEvent as EstablishedEvent; _logger.Info("MediaEventObjectType_Established " + objEstablishedEvent.CallID); break; case enMediaEventObjectTypes.MediaEventObjectType_Queued: var objQueuedEvent = mediaEvent as QueuedEvent; _logger.Info("MediaEventObjectType_Queued " + objQueuedEvent.CallID); break; case enMediaEventObjectTypes.MediaEventObjectType_Diverted: var objDivertedEvent = mediaEvent as DivertedEvent; _logger.Info("MediaEventObjectType_Diverted " + objDivertedEvent.CallID); break; case enMediaEventObjectTypes.MediaEventObjectType_Disconnected: var objDisconnectEvent = mediaEvent as DisconnectedEvent; _logger.Info("MediaEventObjectType_Disconnected CallID: " + objDisconnectEvent.CallID + " Reason " + objDisconnectEvent.Reason); callDetailGridUpdateEvent?.Invoke(true, objDisconnectEvent.CallID); lock (activeCallsDict) activeCallsDict.Remove(objDisconnectEvent.CallID); break; case enMediaEventObjectTypes.MediaEventObjectType_ManagerStateChanged: IManagerStateChangedEvent stateEvent = (IManagerStateChangedEvent)mediaEvent; _logger.Info("MediaEvent ManagerStateChanged ## " + stateEvent.State); break; } }
private void ProcessAgentStatusEvent(IAgentStatusEvent statusEvent) { int index; Agent agent; try { if (AgentsListFromServer.Contains(statusEvent.AgentKey.ToString())) { agent = (Agent)AgentsListFromServer[statusEvent.AgentKey.ToString()]; index = listViewAgentsList.Items.IndexOfKey(agent.Name); switch (statusEvent.State) { case enAgentStates.AgentState_Unavailable: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is now UnAvailable on " + " Extension = " + statusEvent.Extension + " " + statusEvent.AgentID); UpdateAgentList(agent, "UnAvailable", Color.DarkGray, index); break; case enAgentStates.AgentState_Working: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is now on work on " + " Extension = " + statusEvent.Extension + " " + statusEvent.AgentID); UpdateAgentList(agent, "work", Color.Yellow, index); break; case enAgentStates.AgentState_LoggedOff: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is now on LoggedOFF " + " Extension = " + statusEvent.Extension + " " + statusEvent.AgentID); UpdateAgentList(agent, "LoggedOUT", Color.AliceBlue, index); break; case enAgentStates.AgentState_Ringing: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is now Ringing " + " Extension = " + statusEvent.Extension + " " + statusEvent.AgentID); ProcessRingingEvent(statusEvent); break; case enAgentStates.AgentState_Connected: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is on callID: " + statusEvent.CallID); UpdateAgentList(agent, "On Call", Color.Orchid, index); break; case enAgentStates.AgentState_Available: _logger.Info("AgentStatusEvent " + statusEvent.AgentID + " is now available on " + " Extension = " + statusEvent.Extension + " " + statusEvent.AgentID); ProcessAvailableAgentEvent(agent.AgentID); UpdateAgentList(agent, "Available", Color.Aqua, index); listViewAgentsList.Items[index].SubItems[5].Text = ""; break; case enAgentStates.AgentState_Pending: _logger.Info("AgentStatusEvent Pending State " + statusEvent.ACDState); break; default: _logger.Info("AgentStatusEvent Unhandeled Event " + statusEvent.State); break; } } } catch (Exception ex) { _logger.Error("Exception in ProcessAgentStatusEvent " + ex); } }