예제 #1
0
        static void Main(string[] args)
        {
            try
            {
                endPoint = new StasisEndpoint("ipaddress", 8088, "username", "password");

                // Create a message actionClient to receive events on
                actionClient = new AriClient(endPoint, "playrec_test");

                actionClient.OnStasisStartEvent       += c_OnStasisStartEvent;
                actionClient.OnStasisEndEvent         += c_OnStasisEndEvent;
                actionClient.OnRecordingFinishedEvent += ActionClientOnRecordingFinishedEvent;

                actionClient.Connect();

                bool done = false;
                while (!done)
                {
                    var lastKey = Console.ReadKey();
                    switch (lastKey.KeyChar.ToString())
                    {
                    case "*":
                        done = true;
                        break;
                    }
                }

                actionClient.Disconnect();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }
예제 #2
0
        public static void SetupAriEndpoint()
        {
            _logger.Information("Creating Endpoint");
            var appName = ArkeCallFlowService.Configuration.GetSection("appSettings:AsteriskAppName").Value;

            var endpoint = new StasisEndpoint(
                ArkeCallFlowService.Configuration.GetSection("appSettings:AsteriskHost").Value,
                int.Parse(ArkeCallFlowService.Configuration.GetSection("appSettings:AriPort").Value),
                ArkeCallFlowService.Configuration.GetSection("appSettings:AsteriskUser").Value,
                ArkeCallFlowService.Configuration.GetSection("appSettings:AsteriskPassword").Value
                );

            _logger.Information($"Registering endpoint {endpoint.AriEndPoint}:{endpoint.Host}:{endpoint.Port} with AriClient");
            _ariClient = new AriClient(endpoint,
                                       appName);

            _logger.Information("Adding AriClient to CallFlowService");

            var container = ObjectContainer.GetInstance();

            container.RegisterSingleton <IAriClient>(() => _ariClient);
            _sipApi = new ArkeSipApiClient(_ariClient, _logger);
            container.RegisterSingleton(_sipApi);
            _logger.Information("Registering API Layer");
            container.RegisterSingleton <ISipApiClient>(_sipApi);
            container.RegisterSingleton <ISipBridgingApi>(_sipApi);
            container.RegisterSingleton <ISipLineApi>(_sipApi);
            container.RegisterSingleton <ISipPromptApi>(_sipApi);
            container.RegisterSingleton <ISipRecordingApi>(_sipApi);
            container.RegisterSingleton <ISoundsApi>(_sipApi);
        }
예제 #3
0
        private ApplicationProxy(IBackendProvider provider, StasisEndpoint endpoint, string appName, ILogger logger)
        {
            _provider = provider;
            _endpoint = endpoint;
            AppName   = appName;
            Created   = DateTime.Now;
            Logger    = logger;

            // Init
            _dialogues = new ConcurrentDictionary <string, IDialogue>();
            _client    = new AriClient(_endpoint, AppName)
            {
                EventDispatchingStrategy = EventDispatchingStrategy.DedicatedThread
            };

            _restClient = new RestClient(_endpoint.AriEndPoint)
            {
                Authenticator = new HttpBasicAuthenticator(_endpoint.Username, _endpoint.Password)
            };
            ActiveDialogues = new List <IDialogue>();
            // Register this app name with the backend provider
            _provider.RegisterApplication(AppName);

            // Init event handler
            _client.OnUnhandledEvent         += _client_OnUnhandledEvent;
            _client.OnConnectionStateChanged += _client_OnConnectionStateChanged;
        }
예제 #4
0
 public Command(StasisEndpoint info, string path)
 {
     Client = new RestClient(info.AriEndPoint)
     {
         Authenticator = new HttpBasicAuthenticator(info.Username, info.Password)
     };
     Request = new RestRequest(path);
 }
예제 #5
0
 public Command(StasisEndpoint info, string path)
 {
     Client = new RestClient(info.AriEndPoint)
     {
         Authenticator = new HttpBasicAuthenticator(info.Username, info.Password)
     };
     Request = new RestRequest(path);
 }
예제 #6
0
        public static ApplicationProxy Create(IBackendProvider provider, StasisEndpoint endpoint, string appName, ILogger logger)
        {
            logger.LogInformation("Starting Application Proxy for {0}", appName);

            var rtn = new ApplicationProxy(provider, endpoint, appName, logger);

            Instances.Add(rtn);
            rtn.Start();

            return(rtn);
        }
예제 #7
0
        public Command(StasisEndpoint info, string path)
        {
            Client = new RestClient(info.AriEndPoint)
            {
                Authenticator = new HttpBasicAuthenticator(info.Username, info.Password)
            };

            Request = new RestRequest(path)
            {
                Serializer = new RestSharp.Portable.Serializers.JsonSerializer()
            };
        }
예제 #8
0
        public SampleSSSO()
        {
            StasisEndpoint endpoint = new StasisEndpoint("127.0.0.1", 7004, "root", "123", false);

            ariMain = new ARIMain(endpoint, "AsteriskSSSO", this);

            this.MaxWaitingTime = 30;
            this.RetryCount     = 3;
            this.PinLength      = 4;

            DoWork();
        }
예제 #9
0
        public ARIMain(StasisEndpoint endpoint, string app, ISSSO _ssso)
        {
            ariClient = new AriClient(endpoint, app);
            ariClient.Connect();

            ssso = _ssso;

            ariClient.OnStasisStartEvent          += AriClient_OnStasisStartEvent;
            ariClient.OnChannelHangupRequestEvent += AriClient_OnChannelHangupRequestEvent;
            ariClient.OnChannelDtmfReceivedEvent  += AriClient_OnChannelDtmfReceivedEvent;

            dtmfTimer = new Timer(dtmfTimerDoWork, lockObject, TimeSpan.Zero, TimeSpan.FromSeconds(1));
        }
        /// <summary>
        /// Конструктор
        /// </summary>
        public AsteriskAriClient(ILogger logger,
                                 IOptions <AsteriskOptions> options,
                                 IHostApplicationLifetime applicationLifetime,
                                 AsteriskAriSmsService smsService)
        {
            _logger = logger;
            _applicationLifetime = applicationLifetime;
            _smsService          = smsService;

            var ariOptions = options.Value;
            var endpoint   = new StasisEndpoint(ariOptions.Ip, ariOptions.Port, ariOptions.Username, ariOptions.Password);

            Start(endpoint);
        }
예제 #11
0
        public Command(StasisEndpoint info, string path)
        {
            Client = new RestClient(info.AriEndPoint)
            {
                Authenticator = new HttpBasicAuthenticator(info.Username, info.Password)
#if NETSTANDARD
                , IgnoreResponseStatusCode = true
#endif
            };

            Request = new RestRequest(path)
            {
                Serializer = new RestSharp.Portable.Serializers.JsonSerializer()
            };
        }
        private void Start(StasisEndpoint endpoint)
        {
            try
            {
                _logger.Information("Starting Asterisk ARI!");

                var ariClient = new AriClient(endpoint, AppName);
                ariClient.OnConnectionStateChanged += AriClientOnConnectionStateChanged;
                ariClient.Connect();
                _ariClient    = ariClient;
                _endpointHost = endpoint.Host;
            }
            catch (HttpRequestException ex)
            {
                _logger.Error($"Ошибка подключения к Asterisk ARI. Host: {endpoint.Host}:{endpoint.Port}, Endpoint: {endpoint.AriEndPoint}", ex);
                throw;
            }
        }
 public WebSocketEventProducer(StasisEndpoint connectionInfo, string application)
 {
     _connectionInfo = connectionInfo;
     _application    = application;
 }
예제 #14
0
 public RestActionConsumer(StasisEndpoint connectionInfo)
 {
     _connectionInfo = connectionInfo;
 }
 public WebSocketEventProducer(StasisEndpoint connectionInfo, string application)
 {
     _connectionInfo = connectionInfo;
     _application = application;
 }