Exemplo n.º 1
0
        /// <summary>
        /// This starts the application logic
        /// </summary>
        public bool StartApplicationSessionAndWait()
        {
            var request  = protocol.NewStartApplicationSession(User, Password);
            var invokeId = comms.SendRequest(request);

            var(Response, InvokeId) = comms.ReadXMLMessage(true);  //todo - we should not wait here
            var rootElement = XmlHelper.GetRootElementName(Response);

            if (string.Compare(rootElement, nameof(StartApplicationSessionPosResponse)) == 0) //responseString.Contains("StartApplicationSessionPosResponse"))
            {
                Debug.Assert(invokeId == InvokeId);
                var response = new CstaEventArgs <StartApplicationSessionPosResponse>(Response)
                {
                    InvokeId = invokeId
                };

                CtsaEvent?.Invoke(this, response);

                SessionId = response?.EventData?.sessionID;

                StartAutoKeepAlive(SessionId, 55000);

                return(true);
            }
            else if (string.Compare(rootElement, nameof(StartApplicationSessionNegResponse)) == 0) //responseString.Contains("StartApplicationSessionNegResponse"))
            {
                Debug.Assert(invokeId == InvokeId);
                var response = new CstaEventArgs <StartApplicationSessionNegResponse>(Response)
                {
                    InvokeId = InvokeId
                };

                CtsaEvent?.Invoke(this, response);

                //return response?.EventData?.errorCode?.ToString()??string.Empty;
                return(false);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// The entry point for processing event data returned from the AES
        /// </summary>
        void InternalEventListenerLoop()
        {
            var response = default(CstaEventArgs);

            while (eventListenerFlag)
            {
                if (!comms.HasData)
                {
                    Task.Delay(200);
                    continue;
                }
                else
                {
                    var responseValue = comms.ReadXMLMessage();
                    var root          = XmlHelper.GetRootElementName(responseValue.Data);

                    switch (root)
                    {
                        #region Events

                    case nameof(OriginatedEvent):
                        response = new CstaEventArgs <OriginatedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(DeliveredEvent):
                        response = new CstaEventArgs <DeliveredEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(EstablishedEvent):
                        response = new CstaEventArgs <EstablishedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(ConnectionClearedEvent):
                        response = new CstaEventArgs <ConnectionClearedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(CallClearedEvent):
                        response = new CstaEventArgs <CallClearedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(FailedEvent):
                        response = new CstaEventArgs <FailedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(TransferedEvent):
                        response = new CstaEventArgs <TransferedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(ConferencedEvent):
                        response = new CstaEventArgs <ConferencedEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                        #endregion

                        #region Responses

                    case nameof(AnswerCallResponse):
                        response = new CstaEventArgs <AnswerCallResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(MakeCallResponse):
                        response = new CstaEventArgs <MakeCallResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(ResetApplicationSessionTimerPosResponse):
                        response = new CstaEventArgs <ResetApplicationSessionTimerPosResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(GetDeviceIdResponse):
                        response = new CstaEventArgs <GetDeviceIdResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(ReleaseDeviceIdResponse):
                        response = new CstaEventArgs <ReleaseDeviceIdResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(GetThirdPartyDeviceIdResponse):
                        response = new CstaEventArgs <GetThirdPartyDeviceIdResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(GetMonitorListResponse):
                        response = new CstaEventArgs <GetMonitorListResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(GetMonitorListEvent):
                        response = new CstaEventArgs <GetMonitorListEvent>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(MonitorStartResponse):
                        response = new CstaEventArgs <MonitorStartResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(MonitorStopResponse):
                        response = new CstaEventArgs <MonitorStopResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(RouteRegisterResponse):
                        response = new CstaEventArgs <RouteRegisterResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(RouteRegisterCancelResponse):
                        response = new CstaEventArgs <RouteRegisterCancelResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(StartApplicationSessionPosResponse):
                        response = new CstaEventArgs <StartApplicationSessionPosResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };

                        //we should also set the SessionId
                        if (response.RawEventData is StartApplicationSessionPosResponse spr)
                        {
                            if (string.Compare(SessionId, spr.sessionID) != 0)
                            {
                                SessionId = spr.sessionID;
                            }
                        }
                        break;

                    case nameof(StartApplicationSessionNegResponse):
                        response = new CstaEventArgs <StartApplicationSessionNegResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case nameof(SystemRegisterResponse):
                        response = new CstaEventArgs <SystemRegisterResponse>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };

                        //we should also set the SystemStatusRegisterId
                        if (response.RawEventData is SystemRegisterResponse srr)
                        {
                            if (string.Compare(SystemStatusRegisterId, srr.sysStatRegisterID) != 0)
                            {
                                SystemStatusRegisterId = srr.sysStatRegisterID;
                            }
                        }

                        break;

                        #endregion

                        #region Errors

                    case nameof(CSTAException):
                        response = new CstaEventArgs <CSTAException>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };
                        break;

                    case "CSTAErrorCode":
                        response = new CstaEventArgs <UniversalFailure>(responseValue.Data)
                        {
                            InvokeId = responseValue.InvokeId,
                            UserData = GetUserData(responseValue.InvokeId)
                        };

                        break;

                        #endregion

                    default:
                        response = CreateRawData(responseValue);
                        break;
                    }

                    //TODO - filter events with no actual value
                    if (response != null)
                    {
                        CtsaEvent?.Invoke(this, response);
                    }
                    response = null;
                }
            }
        }