0

我现在调整 XSockets.Net Server。

我读了http://xsockets.net/docs/c-server-api#using_events

使用事件

服务器端 API 提供了一些事件来帮助您。

打开

当客户端连接并完成握手时调用。

//Hook up the event in the constructor.
public MyController()
{
    this.OnOpen += MyController_OnOpen;
}

void MyController_OnOpen(object sender, OnClientConnectArgs e)
{
    //The connection is open...
}

所以,如果我在 VisualStduio.net 中执行以下操作

  class MyController : XSocketController
        {
            //Hook up the event in the constructor.
            public MyController()
            {
                this.OnOpen += MyController_OnOpen;
            }

            void MyController_OnOpen(object sender, OnClientConnectArgs e)
            {
                //The connection is open...
            }

        }

MyController_OnOpenOnClientConnectArgs用红色下划线警告,这显然意味着没有好处并且不会工作。

我以前是一个不错的 C# 编码器,现在我做 node.js。

我知道他们试图做的是

var myController = XSocketCotroller();

var myController_onOpen = function(obj,e)
                        {
                           // The connection is open...
                        };

myControler.onOpen = myController_onOpen;  

很简单,但我不知道如何在 C# 中做到这一点。

能否指教。谢谢!

4

2 回答 2

0

我必须做

  public class Server : XSocketController
    {
        public Server()
        { 
            this.OnOpen += onOpen; 
        }

        void onOpen(object sender, XSockets.Core.Common.Socket.Event.Arguments.OnClientConnectArgs e)
        {
            this.send("connected");
        }
        public void send(String msg)
        {
            this.send(msg);
        }

    }

OnClientConnectArgs e)发生错误是不够的。

于 2014-07-05T04:33:56.800 回答
0

猜测您使用的是 XSockets 3.0.6 吗?但我会为 3.0.6 和新的 4.0 编写示例

真的不知道从 onOpen 发送一个连接的事件,因为服务器会自动发送一个事件......

您拥有“服务器”的控制器的名称让我感到困惑,请参见下文。

服务器端

3.0.6

using XSockets.Core.Common.Socket.Event.Arguments;
using XSockets.Core.XSocket;
using XSockets.Core.XSocket.Helpers;

namespace KenOkabe
{
    public class SampleController : XSocketController
    {
        public SampleController()
        {
            this.OnOpen += SampleController_OnOpen;
        }

        void SampleController_OnOpen(object sender, OnClientConnectArgs e)
        {
            //Send connected topic to client that connected.
            //Just passing a anonymous object with info about the client, but it can be anything serializable..
            this.Send(new {this.ClientGuid, this.StorageGuid},"connected");
        }
    }
}

4.0

public class SampleController : XSocketController
{
    public SampleController()
    {
        this.OnOpen += SampleController_OnOpen;
    }

    void SampleController_OnOpen(object sender, OnClientConnectArgs e)
    {
        //Send connected topic to client that connected.
        //Just passing a anonymous object with info about the client, but it can be anything serializable..
        this.Invoke(new { this.ConnectionId, this.Context.PersistentId }, "connected");
    }
}

客户端

3.0.6

var client = new XSocketClient("ws://127.0.0.1:4502/SampleController", "*");
client.OnOpen += (sender, eventArgs) => { Console.WriteLine("OPEN"); };
client.Bind("connected", textArgs => Console.WriteLine(textArgs.data));
client.Open();

4.0

var client = new XSocketClient("ws://127.0.0.1:4502", "http://localhost", "SampleController");
client.Controller("SampleController").OnOpen += (sender, connectArgs) => Console.WriteLine("OPEN");
client.Controller("SampleController").On("connected",data => Console.WriteLine(string.Format("{0}, {1}", data.ConnectionId, data.PersistentId)));
client.Open();

所以 3.* 和 4.* 之间的最大区别在于您可以在一个插槽上多路复用多个控制器。

4.0 将支持 RPC,这使得绑定到“已连接”过时......我们可以直接从服务器使用“Invoke”调用该方法

猜测您正在 NodeJS 中编写一些自定义客户端,但您仍然会收到 OnOpen 数据,而无需自己从控制器上的 OnOpen 事件发送数据!

问候乌夫

于 2014-07-05T10:25:04.973 回答