C# SocketIO4Net确认回调

C# SocketIO4Net确认回调,c#,socketio4net,C#,Socketio4net,我正在尝试使用SocketIO4Net与我的NodeJS服务器进行通信。正如NodeJS SocketIO文档所提到的,我们可以执行以下操作: var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on('ferret', function (name, fn) { fn('woot'); }); }); 其中fn指的是回调函数。我需要S

我正在尝试使用SocketIO4Net与我的NodeJS服务器进行通信。正如NodeJS SocketIO文档所提到的,我们可以执行以下操作:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});
其中fn指的是回调函数。我需要SocketIO4Net中的等效函数,但在任何地方都找不到。我在这里找到的只有两个签名:

public virtual void On(string eventName, Action<IMessage> action);
public virtual void On(string eventName, string endPoint, Action<IMessage> action);
public-virtual-void-On(string-eventName,Action-Action);
上的公共虚拟void(字符串eventName、字符串端点、操作);

所以我想知道,这个函数在SocketIO4Net中可用吗?或者我必须发出另一个事件才能与服务器确认吗?

因此我自己找到了一个解决方案。我使用的源代码来自,其中提到了一个开发分支位于:它不为我编译。所以我从codeplex包开始,尝试自己实现这个函数

事实证明,codeplex上的SocketIo4Net包是不完整的。我必须先修复一些bug。已修补的代码现在位于我的存储库中:

通过使用此软件包,您可以通过以下方式手动将确认消息发送回服务器:

// Simulate a ack callback because SocketIO4Net doesn't provide one by default.
var msgText = JsonConvert.SerializeObject(new object[] {
    // object you want to send back
});
var ack = new AckMessage()
{
    AckId = msg.AckId,
    MessageText = msgText
};
this.socket.Send(ack);
我必须承认这根本不是一种优雅的工作方式。但这可能是现在唯一的方法,因为最初的作者似乎不再维护这个项目了。希望将来有人能完成未完成的部分。

如果您查看(在codeplex上),您将找到示例回调示例。客户机可以发出一条消息,当服务器处理并执行回调时,该回调将反过来在客户机上执行

Console.WriteLine("Emit [socket].[messageAck] - should recv callback [root].[messageAck]");
socket.Emit("messageAck", new { hello = "mama" }, null, (callback) =>
    {
        var jsonMsg = callback as JsonEncodedEventMessage; // callback will be of type JsonEncodedEventMessage, cast for intellisense
        Console.WriteLine(string.Format("callback [root].[messageAck]: {0} \r\n", jsonMsg.Args));
    });

我懂了。当我阅读代码时,我认为
AckMessage
是我应该用于回调的对象。但它似乎不完整,因为它无法正确解析服务器消息,我的意思是,由于正则表达式问题,它无法获取AckId。我不确定您指的是什么,但如果您希望从服务器返回ack消息,则需要使用emite vs send。它与socket.io客户端代码几乎相同:socket.emit('ferret','tobi',function(data){console.log(data);//数据将是'woot'});很抱歉反应太晚(我知道太晚了)。嗯,是的,
Emit
有一个回调。我想要的是上的
回调
。正如我在节点示例中所描述的,在
上也有一个对
的回调。