首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSocket4Net - websocket上接收的“返回”消息

WebSocket4Net - websocket上接收的“返回”消息
EN

Stack Overflow用户
提问于 2015-04-23 23:34:04
回答 1查看 3.8K关注 0票数 2

我正在使用WebSocket4Net与服务器通信我的xamarin android应用程序。我可以从我的应用程序发送和接收消息,但我不知道如何在我的发送方法中获得传入消息(在webSocket_MessageReceived中接收)。我在谷歌上搜索如何使用回调来实现它,但无法实现。任何帮助都是非常感谢的。

这是在我的WebSocketHelper类中:

代码语言:javascript
复制
        private WebSocket webSocket;
        private string outgoingMessage;

        public WebSocketHelper(string url)
        {
            webSocket = new WebSocket(url);
            webSocket.Opened += new EventHandler((sender, e) => webSocket_Opened(sender, e, this.outgoingMessage));
            webSocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(webSocket_Error);
            //webSocket.Closed += new EventHandler(webSocket_Closed);
            webSocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(webSocket_MessageReceived);
        }

        public string Send(string message)
        {
            this.outgoingMessage = message;

            webSocket.Open();

            //Get message received from websocket to return it

            return ""; //TEMP return
        }

        private void webSocket_Opened(object sender, EventArgs e, string message)
        {
            webSocket.Send(message);
        }

        private void webSocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
        {
            string errorMessage = e.Exception.Message;

            //return errorMessage to Send method (not sure), this is secondary
        }

        private void webSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            string incomingMessage = e.Message;

            //I need to return incomingMessage to Send method
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-24 00:11:28

你必须做两件事:

  1. 引入类型为WebSocketHelperstring成员,您将通过该成员将字符串值从事件处理程序webSocket_MessageReceived传递给另一个方法(Send)
  2. 使Send等待直到调用webSocket_MessageReceived处理程序。您可以使用AutoResetEvent (它应该可以在Xamarin库中使用)。

请注意,_messageReceivedEvent.WaitOne会阻塞您的Send方法,因此如果您从UI事件处理程序调用此方法,则在调用_messageReceivedEvent.Set之前,UI将无法响应。考虑重新设计这个类,以便使用异步方法(它可以公开UI订阅的事件MessageReceivedEvent .)。

代码语言:javascript
复制
    public class WebSocketHelper : IDisposable
    {
       private string _incomingMessage;
       private AutoResetEvent _messageReceivedEvent = new AutoResetEvent(false);
       ...

       public string Send(string message)
       {
          this.outgoingMessage = message;
          webSocket.Open();
          this._messageReceivedEvent.WaitOne(); 
          return this._incomingMessage; 
       }

       private void webSocket_MessageReceived(object sender, MessageReceivedEventArgs e)
       {
          this._incomingMessage = e.Message;
          this._messageReceivedEvent.Set();
       }

       ...
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29836192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档