2014-04-18 25 views
0

我正在尝试使用SocketIO4Net与我的NodeJS服务器进行通信。正如NodeJS的SocketIO doc所提到的,我们可以这样做:SocketIO4Net确认回调

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

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

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

​​

所以我想知道,这个函数是否可用于SocketIO4Net?还是必须发出另一个事件来确认服务器?

回答

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

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

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

我明白了。当我读代码时,我认为'AckMessage'是我应该用于回调的对象。但它似乎不完整,因为它没有正确解析服务器消息,我的意思是它没有得到AckId,因为正则表达式问题。 – yaoxing

+0

我不确定你指的是什么,但是如果你想从服务器返回一个确认消息,你需要使用emite vs send。它与socket.io客户端代码几乎相同: socket.emit('ferret','tobi',function(data){ console.log(data); // data will'woot' }); –

+0

对不起,迟到的回复(我知道得太晚了)。嗯,是'Emit'有一个回调。我想要的是'开'的'回调'。就像我在节点示例中所描述的那样,还有一个“On”回调。 – yaoxing