protected void OnCallTimeOut(CallTimeOut callTimeOut) { if (callTimeOut != null) { CallTimeOutEvent(callTimeOut); } }
public void AddCallTimeOut(CallTimeOut callTimeOut) { lock (locker) { callTimeOutList.Add(callTimeOut.CallHandlerId, callTimeOut); } }
/// <summary> /// This event fires every time that a call has timeout waiting on the queue /// </summary> /// <param name="callTimeOut">Holds the call id and the timeout</param> private void CallTimeOutHandler_CallTimeOutEvent(CallTimeOut callTimeOut) { ProtocolMessages.Message msg = null; try { //TODO: no olvidar manerjar la concurrencia sobre el callHandlerCache !!! sobre ese objeto trabajan el thread del timeouthandler, el de los evenntos del ari, y uno mas de los eventos del pbxproxy! //TODO: ver como hago que la llamada continue y enviar el msg adecuado al callditributor //Esto deberia generar un mensaje EXIT WITH TIMEOUT lock (_locker) { CallHandler callHandler = callHandler = callHandlerCache.GetByCallHandlerlId(callTimeOut.CallHandlerId); if (callHandler != null) { msg = callHandler.CancelCall(); callHandlerCache.RemoveCallHandler(callHandler.Id); //lo hago aca, o dejo que lo haga el stasisend? pbx.Channels.ContinueInDialplan(callHandler.Caller.Id); } } Log.Logger.Debug("La LLamada: " + callTimeOut.CallHandlerId + " Expiro!, remuevo el callhandler"); } catch (Exception ex) { Log.Logger.Debug("CallTimeOut: ERROR! " + callTimeOut.CallHandlerId + ", Mensaje: " + ex.Message); } if (msg != null) { actorPbxProxy.Send(msg); } else { Log.Logger.Debug("CallTimeOut: " + callTimeOut.CallHandlerId + " el callhandler devolvió msg = null"); } }