0

我正在使用 SocketIO4Net 在我的工作角色中创建一个 .NET socket.io 客户端,我可以使用它连接到我的 socket.io 服务器。在转移了很多代码而不是文档中提到的代码之后,我已经能够连接到命名空间。但我仍然无法发送和接收事件消息。下面是我的代码,请告诉我如何将事件注册到 socket.io .net 客户端。对于我的项目来说,我能够从我的工作角色向 socket.io 服务器事件发送消息非常重要。

broadcastSocketClient = new Client(localSocketUrl);

                broadcastSocketClient.Opened += SocketOpened;
                broadcastSocketClient.Message += SocketMessage;
                broadcastSocketClient.SocketConnectionClosed += SocketConnectionClosed;
                broadcastSocketClient.Error += SocketError;

                while (!broadcastSocketClient.IsConnected)
                {
                    broadcastSocketClient.Connect();
                }

                // register for 'connect' event with io server
                broadcastSocketClient.On("connect", (cn) =>
                {                      

                    var namespaceConnect = broadcastSocketClient.Connect("/namespacename");

                    // register for 'connect' event with io server
                    namespaceConnect.On("connect", (data) =>
                    {
                        namespaceConnect.Emit("test", "CONNECTED");

                        namespaceConnect.On("first", (message) =>
                        {
                            Console.WriteLine(message);

                        });
                    });    
                });                    
4

1 回答 1

0

This is a very similar question to https://stackoverflow.com/a/16002007/1168541, but one area that's going to give you trouble is in your code to connect:

while (!broadcastSocketClient.IsConnected)
            {
                broadcastSocketClient.Connect();
            }

You should wait for the event message 'connected', rather than blast multiple connection attempts. You'll never give the client the chance to connect in the while loop.

Try something along these lines:

public class SampleClient
{
    private Client socket;
    private IEndPointClient nsTarget;
    private string localSocketUrl = "http:your_url_to_socketioserver";

    public void Execute()
    {
        Console.WriteLine("Starting SocketIO4Net Client Events Example...");


        socket = new Client(localSocketUrl);
        socket.Opened += SocketOpened;
        socket.Message += SocketMessage;
        socket.SocketConnectionClosed += SocketConnectionClosed;
        socket.Error += SocketError;

        // register for 'connect' event with io server
        socket.On("connect", (fn) =>
        {       // connect to namespace
            nsTarget = socket.Connect("/namespacename");
            nsTarget.On("connect", (cn) => nsTarget.Emit("test", new { data = "CONNECTED" }));
            nsTarget.On("first", (message) =>
            {
                Console.WriteLine("recv [socket].[update] event");
                Console.WriteLine("  raw message:      {0}", message.RawMessage);
                Console.WriteLine("  string message:   {0}", message.MessageText);
                Console.WriteLine("  json data string: {0}", message.Json.ToJsonString());
            });

        });

        // make the socket.io connection
        socket.Connect();
    }

    void SocketOpened(object sender, EventArgs e)
    {
        Console.WriteLine("SocketOpened\r\n");
        Console.WriteLine("Connected to ICBIT API server!\r\n");
    }

    void SocketError(object sender, ErrorEventArgs e)
    {
        Console.WriteLine("socket client error:");
        Console.WriteLine(e.Message);
    }

    void SocketConnectionClosed(object sender, EventArgs e)
    {
        Console.WriteLine("WebSocketConnection was terminated!");
    }

    void SocketMessage(object sender, MessageEventArgs e)
    {
        // uncomment to show any non-registered messages
        if (string.IsNullOrEmpty(e.Message.Event))
            Console.WriteLine("Generic SocketMessage: {0}", e.Message.MessageText);
        else
            Console.WriteLine("Generic SocketMessage: {0} : {1}", e.Message.Event, e.Message.Json.ToJsonString());
    }
    public void Close()
    {
        if (this.socket != null)
        {
            socket.Opened -= SocketOpened;
            socket.Message -= SocketMessage;
            socket.SocketConnectionClosed -= SocketConnectionClosed;
            socket.Error -= SocketError;
            this.socket.Dispose(); // close & dispose of socket client
        }
    }
}
于 2013-06-24T20:30:18.617 回答