public static ISdkConfiguration BuilderSetters()
 {
     return(MtsSdk.CreateConfigurationBuilder()
            .SetUsername("username")
            .SetPassword("password")
            .SetHost("host")
            .SetPort(1)
            .SetVirtualHost("/virtualHost")
            .SetUseSsl(false)
            .SetNode(2)
            .SetBookmakerId(3)
            .SetLimitId(4)
            .SetCurrency("EUR")
            .SetSenderChannel(SenderChannel.Internet)
            .SetAccessToken("accessToken")
            .SetProvideAdditionalMarketSpecifiers(false)
            .SetExclusiveConsumer(false)
            .SetKeycloakHost("keycloakHost")
            .SetKeycloakUsername("keycloakUsername")
            .SetKeycloakPassword("keycloakPassword")
            .SetKeycloakSecret("keycloakSecret")
            .SetMtsClientApiHost("clientApiHost")
            .SetTicketResponseTimeout(10000)
            .SetTicketCancellationResponseTimeout(10001)
            .SetTicketCashoutResponseTimeout(10002)
            .SetNonSrSettleResponseTimeout(10003)
            .Build());
 }
Пример #2
0
 public void BuilderMissingHost()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .Build();
 }
Пример #3
0
        public void BuilderSetters()
        {
            var config = MtsSdk.CreateConfigurationBuilder()
                         .SetUsername("username")
                         .SetPassword("password")
                         .SetHost("host")
                         .SetPort(1)
                         .SetVirtualHost("/virtualHost")
                         .SetUseSsl(false)
                         .SetSslServerName("sslServerName")
                         .SetNode(2)
                         .SetBookmakerId(3)
                         .SetLimitId(4)
                         .SetCurrency("EUR")
                         .SetSenderChannel(SenderChannel.Internet)
                         .SetAccessToken("accessToken")
                         .SetProvideAdditionalMarketSpecifiers(false)
                         .SetExclusiveConsumer(false)
                         .SetKeycloakHost("keycloakHost")
                         .SetKeycloakUsername("keycloakUsername")
                         .SetKeycloakPassword("keycloakPassword")
                         .SetKeycloakSecret("keycloakSecret")
                         .SetMtsClientApiHost("clientApiHost")
                         .SetTicketResponseTimeout(10000)
                         .SetTicketCancellationResponseTimeout(10001)
                         .SetTicketCashoutResponseTimeout(10002)
                         .SetNonSrSettleResponseTimeout(10003)
                         .Build();

            CheckAllSettings(
                config,
                "username",
                "password",
                "host",
                1,
                "/virtualHost",
                false,
                "sslServerName",
                2,
                3,
                4,
                "EUR",
                SenderChannel.Internet,
                "accessToken",
                false,
                false,
                3600,
                1000000,
                false,
                "keycloakHost",
                "keycloakUsername",
                "keycloakPassword",
                "keycloakSecret",
                "clientApiHost",
                10000,
                10000,
                10001,
                10002,
                10003);
        }
        public void CheckMinimalConfigTest()
        {
            var newConfig = MtsSdk.CreateConfigurationBuilder()
                            .SetUsername("username")
                            .SetPassword("password")
                            .SetHost("mtsgate-ci.betradar.com")
                            .SetVirtualHost("/vhost")
                            .SetLimitId(111)
                            //.SetBookmakerId(333)
                            .SetAccessToken("erErk34kfErr")
                            .SetCurrency("EUR")
                            .SetNode(10)
                            .SetMtsClientApiHost("https://mts-api-ci.betradar.com/edge/proxy")
                            .SetKeycloakHost("https://mts-auth-ci.betradar.com")
                            //.SetKeycloakUsername("keycloackUsername")
                            //.SetKeycloakPassword("keycloackPassword")
                            .SetKeycloakSecret("53d342-4a7c-dgdbd23-9e1b-93822f2")
                            .Build();

            InitReportManager(newConfig);
            var minDate    = DateTime.Now.AddDays(-14);
            var maxDate    = DateTime.Now;
            var ccfChanges = _reportManager.GetHistoryCcfChangeCsvExportAsync(minDate, maxDate, 1, null, null, SourceType.Customer, "keyUsername", "keyPassword").Result;

            Assert.IsNotNull(ccfChanges);
            Assert.AreEqual(6974, ccfChanges.Count);
        }
        private void InitReportManager(ISdkConfiguration config = null)
        {
            var newConfig = config ?? MtsSdk.CreateConfigurationBuilder()
                            .SetUsername("username")
                            .SetPassword("password")
                            .SetHost("mtsgate-ci.betradar.com")
                            .SetVirtualHost("/vhost")
                            .SetLimitId(111)
                            .SetBookmakerId(333)
                            .SetAccessToken("erErk34kfErr")
                            .SetCurrency("EUR")
                            .SetNode(10)
                            .SetMtsClientApiHost("https://mts-api-ci.betradar.com/edge/proxy")
                            .SetKeycloakHost("https://mts-auth-ci.betradar.com")
                            .SetKeycloakUsername("keycloackUsername")
                            .SetKeycloakPassword("keycloackPassword")
                            .SetKeycloakSecret("53d342-4a7c-dgdbd23-9e1b-93822f2")
                            .Build();

            _mtsAuthService = new MtsAuthServiceHelper(config);

            var uri = new Uri(newConfig.KeycloakHost + "/ReportingCcf/external/api/report/export/history/ccf/changes/client/api");

            _mockDataFetcher = new Mock <DataFetcherHelper>();
            _mockDataFetcher.Setup(p => p.GetDataAsync(It.IsAny <Uri>())).Returns(new DataFetcherHelper(BuilderFactoryHelper.UriReplacements).GetDataAsync(uri));

            _reportManager = new ReportManager(_mockDataFetcher.Object, uri.OriginalString, _mtsAuthService, null, newConfig);
        }
Пример #6
0
 public void BuilderNullPassword()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword(null)
     .SetHost("host")
     .Build();
 }
Пример #7
0
 public void BuilderEmptyUsername()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("")
     .SetPassword("password")
     .SetHost("host")
     .Build();
 }
 public static ISdkConfiguration BuilderMinimalConfiguration()
 {
     return(MtsSdk.CreateConfigurationBuilder()
            .SetUsername("username")
            .SetPassword("password")
            .SetHost("host")
            .Build());
 }
Пример #9
0
 public void BuilderTicketCashoutResponseTimeoutToHigh()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetTicketCashoutResponseTimeout(SdkInfo.TicketCashoutResponseTimeoutMax + 1)
     .Build();
 }
Пример #10
0
 public void BuilderTicketCancellationResponseTimeoutToLow()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetTicketCancellationResponseTimeout(SdkInfo.TicketCancellationResponseTimeoutMin - 1)
     .Build();
 }
Пример #11
0
 public void BuilderNullKeycloakSecret()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetKeycloakSecret(null)
     .Build();
 }
Пример #12
0
 public void BuilderCurrencyToLong()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetCurrency("EUREUR")
     .Build();
 }
Пример #13
0
 public void BuilderNegativeLimitId()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetLimitId(-1)
     .Build();
 }
Пример #14
0
 public void BuilderNullClientApiHost()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetMtsClientApiHost(null)
     .Build();
 }
Пример #15
0
 public void BuilderMissingKeycloakSecret()
 {
     MtsSdk.CreateConfigurationBuilder()
     .SetUsername("username")
     .SetPassword("password")
     .SetHost("host")
     .SetMtsClientApiHost("clientApi")
     .SetKeycloakHost("keycloak")
     .Build();
 }
Пример #16
0
        public void BuilderMinimalConfiguration()
        {
            var config = MtsSdk.CreateConfigurationBuilder()
                         .SetUsername("username")
                         .SetPassword("password")
                         .SetHost("host")
                         .Build();

            CheckAllSettings(config);
        }
Пример #17
0
        public void MtsSdkIsConstructedSuccessfully()
        {
            var config = _childContainer1.Resolve <ISdkConfiguration>();

            Assert.IsNotNull(config);

            var sdk = new MtsSdk(config);

            Assert.IsNotNull(sdk);
        }
Пример #18
0
 public static ISdkConfiguration GetSdkConfiguration()
 {
     return(MtsSdk.CreateConfigurationBuilder()
            .SetUsername("username")
            .SetPassword("password")
            .SetHost("127.0.0.1")
            .SetVirtualHost("/test")
            .SetUseSsl(true)
            .SetLimitId(111)
            .SetBookmakerId(222)
            .SetAccessToken("aaa")
            .SetCurrency("mBTC")
            .SetNode(10)
            .SetSenderChannel(SenderChannel.Mobile)
            .Build());
 }
Пример #19
0
        /// <summary>
        /// Starts the MTS Sdk Session
        /// </summary>
        public void Start()
        {
            try
            {
                _log.Info("Running the MTS SDK Non-Blocking mode.");

                _log.Info("Retrieving configuration from application configuration file.");
                var config = MtsSdk.GetConfiguration();

                _log.Info("Creating root MTS SDK instance.");
                _mtsSdk = new MtsSdk(config);

                #region Testing Section

                ////handles database related operations
                //_ticketService = new TicketService(_log);
                ////handles all MTS events
                //_factory = _mtsSdk.BuilderFactory;
                //_ticketHandler = new MTSTicketsHandlers(_mtsSdk, _factory, _log);
                //TestSendTicket();

                #endregion

                _log.Info("Attaching to events.");
                AttachToFeedEvents(_mtsSdk);

                _log.Info("Opening the sdk instance (creating and opening connection to the AMPQ broker)");
                _mtsSdk.Open();
                _factory = _mtsSdk.BuilderFactory;

                //handles database related operations
                _ticketService = new TicketService(_log);
                //handles all MTS events
                _ticketHandler = new MTSTicketsHandlers(_mtsSdk, _factory, _log);

                //starting timer to get ticket updates from database
                _timer = new Timer(TicketUpdatesTimer_Tick, null, _updateInterval, _updateInterval);

                _log.Info("MTS SDK started successfully. Hit <enter> to quit if in console mode.");
                Console.WriteLine(string.Empty);
                Console.ReadLine();
            }
            catch (Exception error)
            {
                EventLog.WriteEntry("Service ", error.ToString(), EventLogEntryType.Error);
            }
        }
Пример #20
0
        public void Init()
        {
            var config = MtsSdk.CreateConfigurationBuilder()
                         .SetUsername("username")
                         .SetPassword("password")
                         .SetHost("mtsgate-ci.betradar.com")
                         .SetVirtualHost("/vhost")
                         .SetLimitId(111)
                         .SetBookmakerId(333)
                         .SetAccessToken("erErk34kfErr")
                         .SetCurrency("EUR")
                         .SetNode(10)
                         .SetMtsClientApiHost("https://mts-api-ci.betradar.com/edge/proxy")
                         .SetKeycloakHost("https://mts-auth-ci.betradar.com")
                         .SetKeycloakUsername("keycloackUsername")
                         .SetKeycloakPassword("keycloackPassword")
                         .SetKeycloakSecret("53d342-4a7c-dgdbd23-9e1b-93822f2")
                         .Build();

            InitReportManager(config);
        }
Пример #21
0
        public MtsAuthServiceHelper(ISdkConfiguration config = null)
        {
            var newConfig = config ?? MtsSdk.CreateConfigurationBuilder()
                            .SetUsername("username")
                            .SetPassword("password")
                            .SetHost("mtsgate-ci.betradar.com")
                            .SetVirtualHost("/vhost")
                            .SetLimitId(111)
                            .SetBookmakerId(333)
                            .SetAccessToken("erErk34kfErr")
                            .SetCurrency("EUR")
                            .SetNode(10)
                            .SetMtsClientApiHost("https://mts-api-ci.betradar.com/edge/proxy")
                            .SetKeycloakHost("https://mts-auth-ci.betradar.com")
                            .SetKeycloakUsername("keycloackUsername")
                            .SetKeycloakPassword("keycloackPassword")
                            .SetKeycloakSecret("53d342-4a7c-dgdbd23-9e1b-93822f2")
                            .Build();

            var uri = new Uri(newConfig.KeycloakHost + "/auth/realms/mts/protocol/openid-connect/token");

            var mockDataFetcher = new Mock <DataFetcherHelper>();

            mockDataFetcher.Setup(p => p.GetDataAsync(It.IsAny <Uri>())).Returns(new DataFetcherHelper(BuilderFactoryHelper.UriReplacements).GetDataAsync(uri));
            mockDataFetcher.Setup(p => p.PostDataAsync(It.IsAny <Uri>(), It.IsAny <HttpContent>())).Returns(new DataFetcherHelper(BuilderFactoryHelper.UriReplacements).PostDataAsync(uri, null));

            var deserializer = new SDK.Entities.Internal.JsonDeserializer <AccessTokenDTO>();
            var mapper       = new KeycloakAuthorizationMapperFactory();

            var dataProvider = new DataProvider <AccessTokenDTO, KeycloakAuthorization>(
                uri.AbsoluteUri,
                mockDataFetcher.Object,
                mockDataFetcher.Object,
                deserializer,
                mapper);

            _mtsAuthService = new MtsAuthService(dataProvider, newConfig);
        }
Пример #22
0
        public void Run()
        {
            _log.LogInformation("Running the MTS SDK ticket integration examples");

            _log.LogInformation("Retrieving configuration from application configuration file");
            var config = MtsSdk.GetConfiguration();

            _log.LogInformation("Creating root MTS SDK instance");
            _mtsSdk = new MtsSdk(config, _loggerFactory);

            _log.LogInformation("Attaching to events");
            AttachToFeedEvents(_mtsSdk);

            _log.LogInformation("Opening the sdk instance (creating and opening connection to the AMPQ broker)");
            _mtsSdk.Open();

            var ticketExamples = new TicketExamples(_mtsSdk.BuilderFactory);

            _factory = _mtsSdk.BuilderFactory;

            _log.LogInformation("Example 1");
            _mtsSdk.SendTicket(ticketExamples.Example1());
            _log.LogInformation("Example 2");
            _mtsSdk.SendTicket(ticketExamples.Example2());
            _log.LogInformation("Example 3");
            _mtsSdk.SendTicket(ticketExamples.Example3());
            _log.LogInformation("Example 4");
            _mtsSdk.SendTicket(ticketExamples.Example4());
            _log.LogInformation("Example 5");
            _mtsSdk.SendTicket(ticketExamples.Example5());
            _log.LogInformation("Example 6");
            _mtsSdk.SendTicket(ticketExamples.Example6());
            _log.LogInformation("Example 7");
            _mtsSdk.SendTicket(ticketExamples.Example7());
            _log.LogInformation("Example 8");
            _mtsSdk.SendTicket(ticketExamples.Example8());
            _log.LogInformation("Example 9");
            _mtsSdk.SendTicket(ticketExamples.Example9());
            _log.LogInformation("Example 10");
            _mtsSdk.SendTicket(ticketExamples.Example10());
            _log.LogInformation("Example 11");
            _mtsSdk.SendTicket(ticketExamples.Example11());
            _log.LogInformation("Example 12");
            _mtsSdk.SendTicket(ticketExamples.Example12());
            _log.LogInformation("Example 13");
            _mtsSdk.SendTicket(ticketExamples.Example13());
            _log.LogInformation("Example 14");
            _mtsSdk.SendTicket(ticketExamples.Example14());

            _log.LogInformation("Examples successfully executed. Hit <enter> to quit");
            Console.WriteLine(string.Empty);
            Console.ReadLine();

            _log.LogInformation("Detaching from events");
            DetachFromFeedEvents(_mtsSdk);

            _log.LogInformation("Closing the connection and disposing the instance");
            _mtsSdk.Close();

            _log.LogInformation("Example stopped");
        }
Пример #23
0
        public void Run()
        {
            _log.LogInformation("Running the MTS SDK cashout example");

            _log.LogInformation("Retrieving configuration from application configuration file");
            var config = MtsSdk.GetConfiguration();

            _log.LogInformation("Creating root MTS SDK instance");
            _mtsSdk = new MtsSdk(config, _loggerFactory);

            _log.LogInformation("Attaching to events");
            AttachToFeedEvents(_mtsSdk);

            _log.LogInformation("Opening the sdk instance (creating and opening connection to the AMPQ broker)");
            _mtsSdk.Open();
            _factory = _mtsSdk.BuilderFactory;

            // create ticket (in order to be accepted, correct values must be entered)
            // values below are just for demonstration purposes and will not be accepted

            //cashout ticket is available only for live events
            var r = new Random();

            _originalTicket = _factory.CreateTicketBuilder()
                              .SetTicketId("ticketId-" + r.Next())
                              .SetSender(_factory.CreateSenderBuilder()
                                         .SetCurrency("EUR")
                                         .SetEndCustomer(_factory.CreateEndCustomerBuilder()
                                                         .SetId("customerClientId-" + r.Next())
                                                         .SetConfidence(1)
                                                         .SetIp(IPAddress.Loopback)
                                                         .SetLanguageId("en")
                                                         .SetDeviceId("UsersDevice-" + r.Next())
                                                         .Build())
                                         .Build())
                              .AddBet(_factory.CreateBetBuilder()
                                      .SetBetId("betId-" + r.Next())
                                      .SetBetBonus(1)
                                      .SetStake(123450000, StakeType.Total)
                                      .AddSelectedSystem(1)
                                      .AddSelection(_factory.CreateSelectionBuilder()
                                                    .SetEventId("1")
                                                    .SetIdUof(1, $"sr:match:{r.Next()}", 1, "1", string.Empty, null)
                                                    .SetOdds(11000)
                                                    .Build())
                                      .Build())
                              .BuildTicket();

            // send ticket to the MTS. Since this is a non-blocking way of sending, the response will raise the event TicketResponseReceived
            _log.LogInformation("Send ticket to the MTS.");
            _mtsSdk.SendTicket(_originalTicket);

            _log.LogInformation("Example successfully executed. Hit <enter> to quit");
            Console.WriteLine(string.Empty);
            Console.ReadLine();

            _log.LogInformation("Detaching from events");
            DetachFromFeedEvents(_mtsSdk);

            _log.LogInformation("Closing the connection and disposing the instance");
            _mtsSdk.Close();

            _log.LogInformation("Example stopped");
        }
Пример #24
0
        public void Run()
        {
            _log.Info("Running the MTS SDK Basic example");

            _log.Info("Retrieving configuration from application configuration file");
            var config = MtsSdk.GetConfiguration();

            _log.Info("Creating root MTS SDK instance");
            _mtsSdk = new MtsSdk(config);

            _log.Info("Attaching to events");
            AttachToFeedEvents(_mtsSdk);

            _log.Info("Opening the sdk instance (creating and opening connection to the AMPQ broker)");
            _mtsSdk.Open();
            _factory = _mtsSdk.BuilderFactory;

            // create ticket (in order to be accepted, correct values must be entered)
            // values below are just for demonstration purposes and will not be accepted
            var r      = new Random();
            var ticket = _factory.CreateTicketBuilder()
                         .SetTicketId("ticketId-" + r.Next())
                         .SetSender(_factory.CreateSenderBuilder()
                                    .SetCurrency("EUR")
                                    .SetEndCustomer(_factory.CreateEndCustomerBuilder()
                                                    .SetId("customerClientId-" + r.Next())
                                                    .SetConfidence(1)
                                                    .SetIp(IPAddress.Loopback)
                                                    .SetLanguageId("en")
                                                    .SetDeviceId("UsersDevice-" + r.Next())
                                                    .Build())
                                    .Build())
                         .AddBet(_factory.CreateBetBuilder()
                                 .SetBetId("betId-" + r.Next())
                                 .SetBetBonus(1)
                                 .SetStake(15000, StakeType.Total)
                                 .AddSelectedSystem(1)
                                 .AddSelection(_factory.CreateSelectionBuilder()
                                               .SetEventId("1")
                                               .SetIdUof(3, $"sr:match:{r.Next()}", 12, "1", string.Empty, null)
                                               .SetOdds(11000)
                                               .Build())
                                 .Build())
                         .BuildTicket();

            // send ticket to the MTS. Since this is a blocking way of sending, the response will be result of the method (no event handler will be raised)
            _log.Info("Send ticket to the MTS and wait for the response.");
            var ticketResponse = _mtsSdk.SendTicketBlocking(ticket);

            _log.Info($"TicketResponse received. Status={ticketResponse.Status}, Reason={ticketResponse.Reason.Message}.");

            if (ticketResponse.Status == TicketAcceptance.Accepted)
            {
                //required only if 'explicit acking' is enabled in MTS admin
                ticketResponse.Acknowledge();

                //if for some reason we want to cancel ticket, this is how we can do it
                var ticketCancel         = _factory.CreateTicketCancelBuilder().BuildTicket(ticket.TicketId, ticket.Sender.BookmakerId, TicketCancellationReason.BookmakerTechnicalIssue);
                var ticketCancelResponse = _mtsSdk.SendTicketCancelBlocking(ticketCancel);

                _log.Info($"Ticket '{ticket.TicketId}' response is {ticketCancelResponse.Status}. Reason={ticketCancelResponse.Reason?.Message}");
                if (ticketCancelResponse.Status == TicketCancelAcceptance.Cancelled)
                {
                    //mandatory for all cancellations, except for TimeOutTriggered cancellation
                    ticketCancelResponse.Acknowledge();
                }
            }

            _log.Info("Example successfully executed. Hit <enter> to quit");
            Console.WriteLine(string.Empty);
            Console.ReadLine();

            _log.Info("Detaching from events");
            DetachFromFeedEvents(_mtsSdk);

            _log.Info("Closing the connection and disposing the instance");
            _mtsSdk.Close();


            _log.Info("Example stopped");
        }
Пример #25
0
        public void Run()
        {
            _log.Info("Running the MTS SDK Basic example");

            _log.Info("Retrieving configuration from application configuration file");
            var config = MtsSdk.GetConfiguration();

            _log.Info("Creating root MTS SDK instance");
            _mtsSdk = new MtsSdk(config);

            _log.Info("Attaching to events");
            AttachToFeedEvents(_mtsSdk);

            _log.Info("Opening the sdk instance (creating and opening connection to the AMPQ broker)");
            _mtsSdk.Open();
            _factory = _mtsSdk.BuilderFactory;

            // create ticket (in order to be accepted, correct values must be entered)
            // values below are just for demonstration purposes and will not be accepted
            var r   = new Random();
            var bet = _factory.CreateBetBuilder()
                      .SetBetId("betId-" + r.Next())
                      .SetBetBonus(1)
                      .SetStake(11200, StakeType.Total)
                      .AddSelectedSystem(1)
                      .AddSelection(_factory.CreateSelectionBuilder()
                                    .SetEventId("1")
                                    .SetIdUof(3, $"sr:match:{r.Next()}", 12, "1", string.Empty, null) // only one of the following is required to set selectionId (if you use this method, config property 'accessToken' must be provided)
                                    .SetIdLo(1, 1, "1:1", "1")
                                    .SetIdLcoo(1, 1, "1:1", "1")
                                    .SetId("lcoo:409/1/*/YES")
                                    .SetOdds(11000)
                                    .Build())
                      .Build();
            var endCustomer = _factory.CreateEndCustomerBuilder()
                              .SetId("customerClientId-" + r.Next())
                              .SetConfidence(1)
                              .SetIp(IPAddress.Loopback)
                              .SetLanguageId("en")
                              .SetDeviceId("UsersDevice-" + r.Next())
                              .Build();
            var ticket = _factory.CreateTicketBuilder()
                         .SetTicketId("ticketId-" + r.Next())
                         .SetSender(_factory.CreateSenderBuilder()
                                    .SetCurrency("EUR")
                                    .SetEndCustomer(endCustomer)
                                    .Build())
                         .AddBet(bet)
                         .BuildTicket();

            // send ticket to the MTS. Since this is a non-blocking way of sending, the response will come on the event TicketResponseReceived
            _log.Info("Send ticket to the MTS.");
            _log.Info(ticket.ToJson());
            _mtsSdk.SendTicket(ticket);

            _log.Info("Example successfully executed. Hit <enter> to quit");
            Console.WriteLine(string.Empty);
            Console.ReadLine();

            _log.Info("Detaching from events");
            DetachFromFeedEvents(_mtsSdk);

            _log.Info("Closing the connection and disposing the instance");
            _mtsSdk.Close();

            _log.Info("Example stopped");
        }