/// <summary>
 /// Use this to register a reply callback.
 /// </summary>
 /// <param name="callback"></param>
 public void OnReply(OnReplyHandler <T> callback)
 {
     base.OnReply((h, msg) =>
     {
         return(callback?.Invoke(this, msg.As <T>()) ?? false);
     });
 }
Beispiel #2
0
        public async Task ReceiveMessagesFromBotAsync(OnReplyHandler SendActivitiesToUser)
        {
            var webSocket = new ClientWebSocket();
            await webSocket.ConnectAsync(new Uri(_streamUrl), CancellationToken.None);


            string botReply    = String.Empty;
            var    replyBuffer = ClientWebSocket.CreateClientBuffer(1024 * 8, 1024 * 8);

            var activities = new List <Activity>();

            WebSocketReceiveResult websocketReceivedResult = new WebSocketReceiveResult(0, WebSocketMessageType.Text, true);

            while (!websocketReceivedResult.CloseStatus.HasValue)
            {
                do
                {
                    websocketReceivedResult = await webSocket.ReceiveAsync(replyBuffer, CancellationToken.None);
                } while (!websocketReceivedResult.EndOfMessage);

                if (websocketReceivedResult.Count != 0)
                {
                    botReply = Encoding.UTF8.GetString(replyBuffer.ToArray(), 0, websocketReceivedResult.Count);
                    var activitySet = JsonConvert.DeserializeObject <ActivitySet>(botReply);
                    foreach (Activity activity in activitySet.Activities)
                    {
                        //TODO Replace this name with the name of your bot
                        var isFromBot       = activity.From.Name == _directlineConfig.BotName;
                        var isIgnoringInput = activity.InputHint == InputHints.IgnoringInput;
                        if (isFromBot)
                        {
                            activities.Add(activity);
                            var isForwardingMessage = false;

                            if (activity.Entities != null && activity.Entities.Count != 0)
                            {
                                isForwardingMessage = activity.Entities[0].Properties.ContainsKey("forward");
                            }
                            if (!isIgnoringInput || isForwardingMessage)
                            {
                                await SendActivitiesToUser(activities, _callSid);

                                activities.Clear();
                            }
                        }
                    }
                }
            }
            await webSocket.CloseAsync(websocketReceivedResult.CloseStatus.Value, websocketReceivedResult.CloseStatusDescription, CancellationToken.None);
        }