SocketIO4Net确认回调

时间:2014-04-18 03:07:51

标签: c# socketio4net

我正在尝试使用SocketIO4Net与我的NodeJS服务器进行通信。正如NodeJS SocketIO doc所提到的,我们可以做类似的事情:

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

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});

fn指的是回调函数。我需要SocketIO4Net中的等效功能,但我找不到任何地方。我在这里找到的只有2个签名是:

public virtual void On(string eventName, Action<IMessage> action);
public virtual void On(string eventName, string endPoint, Action<IMessage> action);

所以我想知道,这个功能在SocketIO4Net中是否可用?或者我是否必须发出另一个事件来确认服务器?

2 个答案:

答案 0 :(得分:0)

所以我自己找到了一个解决方案。我正在使用来自http://socketio4net.codeplex.com/的源代码,其中提到了一个开发分支位于:https://github.com/jstott/socketio4net/tree/develop但它不能为我编译。所以我从codeplex包开始尝试自己实现这个功能。

事实证明,codeplex上的SocketIo4Net软件包不完整。我必须先修复一些错误。修补后的代码现在位于我的存储库中:https://git01.codeplex.com/forks/zhangyaoxing/socketio4net

通过使用此程序包,您可以通过以下方式手动将AckMessage发送回服务器:

// 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);

我必须承认,这根本不是一种优雅的工作方式。但它可能是现在唯一的方法,因为原作者似乎不再维护项目了。希望将来有人可以完成未完成的部分。

答案 1 :(得分:0)

如果您查看sample project(在codeplex上),您将找到示例CallbackExample。客户端可以发出消息,并且当由服务器和处理器处理时。执行回调,回调将依次在客户端上执行。

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));
    });