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 относится к функции обратного вызова. Мне нужна эквивалентная функция в SocketIO4Net, но я не могу найти ее где-либо. Только 2 подписи, которые я нашел здесь:

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

Поэтому мне интересно, доступна ли эта функция в SocketIO4Net? Или мне нужно отправить другое событие для подтверждения сервером?

2 ответа

Если вы посмотрите на пример проекта (на 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));
    });

Так что я нашел решение сам. Я использую исходный код http://socketio4net.codeplex.com/, в котором упоминается, что ветка разработки находится по адресу: https://github.com/jstott/socketio4net/tree/develop Он не компилируется для меня. хоть. Поэтому я начал с пакета codeplex и попытался реализовать эту функцию самостоятельно.

Оказывается, что пакет SocketIo4Net в codeplex является неполным. Сначала я должен исправить некоторые ошибки. Исправленный код теперь находится в моем хранилище: 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);

Я должен признать, что это не элегантный способ делать работу вообще. Но это может быть единственным способом сделать это сейчас, так как первоначальный автор, похоже, больше не поддерживает проект. Надеюсь, что кто-то может закончить незаконченную часть в будущем.

Другие вопросы по тегам