1

我正在创建一个 twiiter stremaing MVC 控制器。控制器方法实现为 Web 套接字。

参考:使用 MVC 控制器将 websockets 连接到 windows azure在此处输入链接描述

我想在 UI 中显示 twitter 流。我正在使用 twitterinvl。我的代码包含在下面。流事件 MatchingTweetReceived 未从控制器方法触发。

对此的任何帮助都将受到高度赞赏。

控制器动作方法。

    public ActionResult About()
    {
        if (ControllerContext.HttpContext.IsWebSocketRequest)
        {

            ControllerContext.HttpContext.AcceptWebSocketRequest(DoTalking);

        }

        return new HttpStatusCodeResult(HttpStatusCode.SwitchingProtocols);
    }

其余代码

     public async Task DoTalking(AspNetWebSocketContext context)
    {
        try
        {
            WebSocket socket = context.WebSocket;
            while (true)
            {
                var buffer = new ArraySegment<byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                if (socket.State == WebSocketState.Open)
                {
                    string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    string outmessage = "Empty";
                    //userMessage = "You sent: " + userMessage + " at " + DateTime.Now.ToLongTimeString();

                    Auth.SetUserCredentials("<<credential>>", "<<credential>>", "<<credential>>", "<<credential>>");

                    var stream = Stream.CreateFilteredStream();

                    stream.AddTrack("enterhash");

                    stream.MatchingTweetReceived += (sender, theTweet) =>
                  {

                      outmessage = theTweet.Tweet.CreatedBy.ToString() + theTweet.Tweet.CreatedAt + theTweet.Tweet;
                      buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
                      //Console.WriteLine($"Tweet: {theTweet.Tweet.CreatedAt} {theTweet.Tweet}");
                      socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);


                  };
                    stream.StartStreamMatchingAllConditions();
                    Trace.WriteLine(outmessage);
                    //await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {

                    break;
                }
            }
        }
        catch (Exception ex)
        {

        }
    }
4

0 回答 0