Как отправить сообщение конкретному клиенту с помощью 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();

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


person Eternal21    schedule 29.02.2016    source источник


Ответы (1)


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

person darkl    schedule 29.02.2016