Как отправить сообщение конкретному клиенту с помощью WampSharp?

Допустим, у меня есть 3 клиента: клиент A, клиент B и клиент C.

Все они поддерживают функцию Ping(), которую они регистрируют, используя отражение (код, основанный на документации WampSharp):

public interface IArgumentsService
{
   [WampProcedure("com.arguments.ping")]
   void Ping();
}

public class ArgumentsService : IArgumentsService
{
   public void Ping()
   {
   }
}

IArgumentsService services = channel.RealmProxy.Services;
ArgumentService callee = new ArgumentService(this);
services.RegisterCallee(callee);

Далее я настроил прокси на каждом клиенте для исходящих звонков:

DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory();
IWampChannel channel = channelFactory.CreateJsonChannel("ws://127.0.0.1:8080/", "realm1");
Task channelOpenTask = channel.Open();
channelOpenTask.Wait();
IArgumentsService proxy = channel.RealmProxy.Services.GetCalleeProxy<IArgumentsService>();

Как бы я отправил сообщение от клиента A клиенту C? Я не вижу способа обратиться к конкретному клиенту при отправке сообщения на маршрутизатор через прокси? Все, что я могу сделать, это следующее:

proxy.Ping();

Я предполагаю, что будет транслировать сообщение всем клиентам? Как я могу указать только одного клиента? Этот сценарий использования даже поддерживается?

1 ответ

Решение

В соответствии со спецификацией базового профиля WAMP невозможно зарегистрировать одну и ту же процедуру более одного раза на область маршрутизатора. Следующий код приведет к исключению при регистрации (wamp.error.procedure_already_exists). Чтобы достичь желаемого, рассмотрите возможность регистрации другой процедуры для каждого клиента. Это может быть достигнуто с помощью ICalleeRegistrationInterceptor.

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