/// <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); }); }
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); }