private async Task AgentStateChangeMessageHandler(AgentStateChange message)
        {
            if (message == null || string.IsNullOrEmpty(message.Activity) || string.IsNullOrEmpty(message.StateChangeMessage))
            {
                return;
            }
            try
            {
                var activity = JsonConvert.DeserializeObject <Activity>(message.Activity);

                var reply = activity.CreateReply(message.StateChangeMessage);
                using (var connector = new ConnectorClient(new Uri(activity.ServiceUrl)))
                {
                    await connector.Conversations.ReplyToActivityWithRetriesAsync(reply);
                }
            }
            catch (Exception e)
            {
                // m_logger.Exception(e, $"Failed to extract tenantId from agent state service bus pub message <{JsonConvert.SerializeObject(message)}>");
            }
        }
        public async Task ProcessMessage(ConnectorClient connector, Activity activity)
        {
            StateClient stateClient = activity.GetStateClient();
            BotData     userData    = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);

            bool isLoggedIn = userData.GetProperty <bool>(IsLoggedInProperty);

            if (userData.Data == null)
            {
                userData.SetProperty(IsLoggedInProperty, false);
            }

            if (activity.Type == ActivityTypes.Message)
            {
                var replyMessage = string.Empty;

                if (string.Compare(activity.GetTextWithoutMentions(), "login", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (isLoggedIn)
                    {
                        replyMessage = "You are already logged in; no action needed.";
                    }
                    else
                    {
                        replyMessage = "You are now logged in.";
                        userData.SetProperty(IsLoggedInProperty, true);
                        await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
                    }
                }
                if (string.Compare(activity.GetTextWithoutMentions(), "logout", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    if (isLoggedIn)
                    {
                        replyMessage = "You have been logged out.";
                        userData.SetProperty(IsLoggedInProperty, false);
                        await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
                    }
                    else
                    {
                        replyMessage = "You are already logged out; no action needed.";
                    }
                }

                // Send message to service bus
                try
                {
                    var topic = TopicClient.CreateFromConnectionString(
                        ConfigurationManager.AppSettings["ServiceBusConnection"],
                        "agentstatetopic");


                    var stateChangeMessage = new AgentStateChange
                    {
                        StateChangeMessage = replyMessage,
                        Activity           = JsonConvert.SerializeObject(activity)
                    };
                    await topic.SendAsync(new BrokeredMessage(stateChangeMessage));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }


                //if (!string.IsNullOrEmpty(replyMessage))
                //{
                //    var reply = activity.CreateReply(replyMessage + " (local)");
                //    await connector.Conversations.ReplyToActivityWithRetriesAsync(reply);
                //}
            }
        }