public async Task SendARSMessage(VehicleArriveEvent message)
        {
            var messageJson = JsonConvert.SerializeObject(message);

            using EventDataBatch eventBatch = await _arrivalClient.CreateBatchAsync();

            eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(messageJson)));

            Console.WriteLine($"Sending ARS message {messageJson}");

            await _arrivalClient.SendAsync(eventBatch);
        }
        public async void InitializeConnection(StreamConnectionSettings settings,
                                               Func <VehicleArriveEvent, Task> arsMessageReceivedCallback, Func <VehiclePositionEvent, Task> vpMessageReceivedCallback)
        {
            var options = new MqttClientOptionsBuilder()
                          .WithWebSocketServer(settings.ServerAddress)
                          .WithTls()
                          .Build();

            _client.UseConnectedHandler(async e =>
            {
                Console.WriteLine("### CONNECTED WITH SERVER ###");
                await _client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(settings.ChannelName).Build());
                Console.WriteLine("### SUBSCRIBED ###");
            });

            _client.UseApplicationMessageReceivedHandler(async eventArgs =>
            {
                var stringMessage = System.Text.Encoding.UTF8.GetString(eventArgs.ApplicationMessage.Payload);
                var vpEvent       = JsonConvert.DeserializeObject <VPEvent>(stringMessage);
                if (vpEvent.Event != null)
                {
                    Console.WriteLine($"VP event received: {eventArgs.ApplicationMessage.Topic}");
                    var message = new VehiclePositionEvent(vpEvent.Event);
                    await vpMessageReceivedCallback(message);
                    return;
                }
                var arsEvent = JsonConvert.DeserializeObject <ARSEvent>(stringMessage);
                if (arsEvent.Event != null)
                {
                    Console.WriteLine($"ARS event received: {eventArgs.ApplicationMessage.Topic}");
                    var direction = GetDirectionFromTopic(eventArgs.ApplicationMessage.Topic);
                    var nextStop  = GetNextStopFromTopic(eventArgs.ApplicationMessage.Topic);
                    var message   = new VehicleArriveEvent(arsEvent.Event, nextStop, direction);
                    await arsMessageReceivedCallback(message);
                    return;
                }
            });

            await _client.ConnectAsync(options, CancellationToken.None);
        }
 public Task SendARSMessage(VehicleArriveEvent message)
 {
     throw new NotImplementedException();
 }