private static async Task <IWampChannel> ConnectAsync(AppArguments appArguments) { var factory = new DefaultWampChannelFactory(); IWampClientAuthenticator clientAuthenticator = GetClientAuthenticator(appArguments.AuthMethod, appArguments.AuthId); var channel = clientAuthenticator == null ? factory.CreateJsonChannel(GetUri(appArguments), appArguments.Realm) : factory.CreateJsonChannel(GetUri(appArguments), appArguments.Realm, clientAuthenticator); while (!channel.RealmProxy.Monitor.IsConnected) { try { Console.WriteLine($"Trying to connect to the server {appArguments.Uri}..."); channel.Open().Wait(); } catch (Exception e) { Console.WriteLine($"Failed to connect: {e.Message}"); Console.WriteLine("Retrying in 5 sec..."); await Task.Delay(TimeSpan.FromSeconds(5)); } } return(channel); }
static async Task Main(string[] args) { const string url = "ws://127.0.0.1:8080/ws"; const string realm = "realm1"; DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampClientAuthenticator authenticator = new TicketAuthenticator(); IWampChannel channel = channelFactory.CreateJsonChannel(url, realm, authenticator); IWampRealmProxy realmProxy = channel.RealmProxy; IWampClientConnectionMonitor monitor = realmProxy.Monitor; monitor.ConnectionEstablished += ConnectionEstablished; monitor.ConnectionBroken += ConnectionBroken; await channel.Open().ConfigureAwait(false); ITimeService proxy = realmProxy.Services.GetCalleeProxy <ITimeService>(); try { string now = await proxy.Now(); Console.WriteLine("call result {0}", now); } catch (Exception e) { Console.WriteLine("call error {0}", e); } Console.ReadLine(); }
/// <summary> /// The main program entry-point. /// </summary> static void Main() { SynchronizationContext.SetSynchronizationContext( new SynchronizationContext() ); Console.WriteLine($"Connecting to '{ServerAddress}'..."); DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(ServerAddress, "realm1"); channel.Open().Wait(); Console.WriteLine("Connected. Type stuff and press enter (or a blank line to quit)."); ISubject <string> lineSubject = channel.RealmProxy.Services.GetSubject <string>("io.tintoy.topic1"); lineSubject.Subscribe( message => Console.WriteLine("[MESSAGE] '{0}'", message), error => Console.WriteLine("[ERROR] '{0}'", error), () => Console.WriteLine("[COMPLETED]") ); string currentLine; while ((currentLine = Console.ReadLine()) != "") { lineSubject.OnNext(currentLine); } }
private async void OpenConnection_Click(object sender, RoutedEventArgs e) { try { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(location, "realm1"); IWampRealmProxy realmProxy = channel.RealmProxy; await channel.Open(); // Host WAMP application components // await openTask; //openTask.Wait(); IArgumentsService instance = new ArgumentsService(); IWampRealmProxy realm = channel.RealmProxy; Task <IAsyncDisposable> registrationTask = realm.Services.RegisterCallee(instance); // await registrationTask; registrationTask.Wait(); } catch (Exception ex) { MessageBox.Show(WampShared.Misc.GetErrorMessage(ex), "", MessageBoxButton.OK, MessageBoxImage.Error); } }
public void Init(string wsuri, string realm) { _factory = new DefaultWampChannelFactory(); _channel = _factory.CreateJsonChannel(wsuri, realm); try { _channel.Open().Wait(); services = _channel.RealmProxy.Services; // register procedures for remote calling services.RegisterCallee(this).Wait(); // publishing onPublishSystemStatusSubject = services.GetSubject <RPiHomeSecurityStatus>("com.rpihomesecurity.onstatus"); monitor = _channel.RealmProxy.Monitor; monitor.ConnectionBroken += OnClose; monitor.ConnectionError += OnError; IsConnected = true; Console.WriteLine("WAMP connection success"); } catch (Exception e) { Console.WriteLine("Failure to Initialise WAMP connection. Is crossbar started?" + e.Message); } }
public void Connect(ClientEnv env) { SetEnv(env); var factory = new DefaultWampChannelFactory(); _channel = factory.CreateJsonChannel(_serverAddress, "mtcrossbar"); while (!_channel.RealmProxy.Monitor.IsConnected) { try { Console.WriteLine($"Trying to connect to server {_serverAddress}..."); _channel.Open().Wait(); } catch { Console.WriteLine("Retrying in 5 sec..."); Thread.Sleep(5000); } } Console.WriteLine($"Connected to server {_serverAddress}"); _realmProxy = _channel.RealmProxy; _service = _realmProxy.Services.GetCalleeProxy <IRpcMtFrontend>(); }
public void Connect(ClientEnv env) { SetEnv(env); var factory = new DefaultWampChannelFactory(); IWampChannel channel = factory.CreateJsonChannel(_serverAddress, "box-options"); while (!channel.RealmProxy.Monitor.IsConnected) { try { Console.WriteLine($"Trying to connect to server {_serverAddress}..."); channel.Open().Wait(); } catch (Exception ex) { Console.WriteLine("Exception: {0}", ex); Console.WriteLine("Retrying in 5 sec..."); Thread.Sleep(5000); } } Console.WriteLine($"Connected to server {_serverAddress}"); _realmProxy = channel.RealmProxy; _service = _realmProxy.Services.GetCalleeProxy <IRpcMethods>(); }
private static IDisposable ClientCode(string serverAddress) { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel wampChannel = channelFactory.CreateJsonChannel(serverAddress, "realm1"); wampChannel.Open().Wait(); ISubject <int> subject = wampChannel.RealmProxy.Services.GetSubject <int>("com.myapp.topic1"); int counter = 0; IObservable <long> timer = Observable.Timer(TimeSpan.FromMilliseconds(0), TimeSpan.FromMilliseconds(1000)); IDisposable disposable = timer.Subscribe(x => { counter++; Console.WriteLine("Publishing to topic 'com.myapp.topic1': " + counter); subject.OnNext(counter); }); return(disposable); }
private void Connect() { var factory = new DefaultWampChannelFactory(); _channel = factory.CreateJsonChannel(_serverAddress, "mtcrossbar"); var tries = 0; while (!_channel.RealmProxy.Monitor.IsConnected) { try { tries++; LogInfo($"Trying to connect to server {_serverAddress }..."); _channel.Open().Wait(); } catch (Exception ex) { LogError(ex); if (tries > 5) { throw; } LogInfo("Retrying in 5 sec..."); } } LogInfo($"Connected to server {_serverAddress}"); _realmProxy = _channel.RealmProxy; _service = _realmProxy.Services.GetCalleeProxy <IRpcMtFrontend>(); // Subscribe Notifications _notificationSubscription = _realmProxy.Services.GetSubject <NotifyResponse>($"user.updates.{_notificationId}").Subscribe(NotificationReceived); }
public static void Main(string[] args) { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); const string serverAddress = "ws://127.0.0.1:8080/ws"; IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1"); channel.Open().Wait(5000); IWampRealmProxy realmProxy = channel.RealmProxy; int received = 0; IDisposable subscription = null; subscription = realmProxy.Services.GetSubject <int>("com.myapp.topic1") .Subscribe(x => { Console.WriteLine("Got Event: " + x); received++; if (received > 5) { Console.WriteLine("Closing .."); subscription.Dispose(); } }); Console.ReadLine(); }
public async Task <IWampRealmServiceProvider> GetService() { if (channel == null) { channel = factory.CreateJsonChannel(ServerAddress, "realm1"); await channel.Open().ConfigureAwait(false); } return(channel.RealmProxy.Services); }
public static int Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Wrong number of arguments. Expected: <client id> <server address> <realm> <topic>."); return(-1); } var apiKey = args[0]; if (args.Length > 1) { _serverAddress = args[1]; } if (args.Length > 2) { _realm = args[2]; } if (args.Length > 3) { _topicUri = args[3]; } var factory = new DefaultWampChannelFactory(); var authenticator = new TicketAuthenticator(apiKey); var channel = factory.CreateJsonChannel(_serverAddress, _realm, authenticator); channel.RealmProxy.Monitor.ConnectionBroken += Monitor_ConnectionBroken; channel.RealmProxy.Monitor.ConnectionError += Monitor_ConnectionError; channel.RealmProxy.Monitor.ConnectionEstablished += Monitor_ConnectionEstablished; while (!channel.RealmProxy.Monitor.IsConnected) { try { Console.WriteLine($"Trying to connect to server {_serverAddress}..."); channel.Open().Wait(); } catch { Console.WriteLine($"Retrying in {RetryTimeout}..."); Thread.Sleep(RetryTimeout); } } Console.WriteLine($"Connected to server {channel}"); using (Subscribe(channel.RealmProxy)) { Console.WriteLine($"Subscribed to events. ClientId: {apiKey}"); Console.ReadKey(); } Console.ReadKey(); channel.Close(); Console.WriteLine("Terminated"); return(0); }
private static async Task <IWampChannel> ConnectAsync(AppArguments appArguments) { var factory = new DefaultWampChannelFactory(); IWampClientAuthenticator clientAuthenticator = GetClientAuthenticator(appArguments.AuthMethod, appArguments.AuthId); var channel = clientAuthenticator == null ? factory.CreateJsonChannel(GetUri(appArguments), appArguments.Realm) : factory.CreateJsonChannel(GetUri(appArguments), appArguments.Realm, clientAuthenticator); channel.RealmProxy.Monitor.ConnectionEstablished += (sender, args) => { Console.WriteLine("connected session with ID " + args.SessionId); dynamic details = args.WelcomeDetails.OriginalValue.Deserialize <dynamic>(); Console.WriteLine("authenticated using method '{0}' and provider '{1}'", details.authmethod, details.authprovider); Console.WriteLine("authenticated with authid '{0}' and authrole '{1}'", details.authid, details.authrole); }; while (!channel.RealmProxy.Monitor.IsConnected) { try { Console.WriteLine($"Trying to connect to the server {appArguments.Uri}..."); channel.Open().Wait(); } catch (Exception e) { Console.WriteLine($"Failed to connect: {e.Message}"); Console.WriteLine("Retrying in 5 sec..."); await Task.Delay(TimeSpan.FromSeconds(5)); } } return(channel); }
/// <summary> /// The object that creates a connection to Wwise via WAAPI. /// </summary> public Connection() { channel = factory.CreateJsonChannel(localhost, "realm1"); channel.Open().Wait(); realmProxy = channel.RealmProxy; while (wwiseConnected == false) { TestPing(); } }
static void Main(string[] args) { const string location = "ws://127.0.0.1:8080/"; DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(location, "realm1"); IWampRealmProxy realmProxy = channel.RealmProxy; //await //channel.Open (); // Host WAMP application components Task openTask = channel.Open(); // await openTask; openTask.Wait(5000); Console.WriteLine("Press enter when a client finishes registering methods"); Console.ReadLine(); IArgumentsService proxy = channel.RealmProxy.Services.GetCalleeProxy <IArgumentsService> (); proxy.Ping(); Console.WriteLine("Pinged!"); int result = proxy.Add2(2, 3); Console.WriteLine("Add2: {0}", result); var starred = proxy.Stars(); Console.WriteLine("Starred 1: {0}", starred); starred = proxy.Stars(nick: "Homer"); Console.WriteLine("Starred 2: {0}", starred); starred = proxy.Stars(stars: 5); Console.WriteLine("Starred 3: {0}", starred); starred = proxy.Stars(nick: "Homer", stars: 5); Console.WriteLine("Starred 4: {0}", starred); // string[] orders = proxy.Orders ("coffee"); // Console.WriteLine ("Orders 1: {0}", string.Join (", ", orders)); // orders = proxy.Orders ("coffee", limit : 10); // Console.WriteLine ("Orders 2: {0}", string.Join (", ", orders)); Console.ReadLine(); }
public IDisposable ConnectOrderBook(PoloniexTicker ticker) { ticker.OrderBook.Updates.Clear(); DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel wampChannel = channelFactory.CreateJsonChannel(PoloniexServerAddress, "realm1"); wampChannel.Open().Wait(); ISubject <OrderBookUpdateInfo> subject = wampChannel.RealmProxy.Services.GetSubject <OrderBookUpdateInfo>(ticker.OrderBook.Owner.Name, new OrderBookUpdateInfoConverter()); return(subject.Subscribe(x => ticker.OrderBook.OnRecvUpdate(x))); }
private IDisposable SubscribeToTicker() { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel wampChannel = channelFactory.CreateJsonChannel(PoloniexServerAddress, "realm1"); wampChannel.Open().Wait(); ISubject <PoloniexTicker> subject = wampChannel.RealmProxy.Services.GetSubject <PoloniexTicker>("ticker", new PoloniexTickerConverter()); IDisposable disposable = subject.Subscribe(x => GetTickerItem(x)); return(disposable); }
public static void Main(string[] args) { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1"); channel.Open().Wait(); IWampRealmProxy realmProxy = channel.RealmProxy; CallGetInfo(realmProxy); CallGetSelectedObjects(realmProxy); Console.ReadLine(); }
public void StartClient() { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); channel = factory.CreateJsonChannel(location, "realm1"); channel.Open(); IWampRealmProxy realmProxy = channel.RealmProxy; subscription = realmProxy.Services .GetSubject("ticker") .Subscribe(x => { Console.WriteLine("Got Event: " + x); }); }
public static void Main(string[] args) { const string serverAddress = "wss://api.poloniex.com"; var factory = new DefaultWampChannelFactory(); var channel = factory.CreateJsonChannel(serverAddress, "realm1"); channel.RealmProxy.Monitor.ConnectionError += Monitor_ConnectionError; channel.Open().Wait(5000); var subscription = channel.RealmProxy.Services.GetSubject("ticker") .Subscribe(x => { Task.Run(() => { var t = new TickerItem(x); Console.WriteLine("Got Data For: " + t.CurrencyPair); // work with the data however you want if (t.PercentChange > 0m) { } if (t.PercentChange < 0m) { // holder for our post data var postVars = new List <KeyValuePair <string, string> >(); // create the nonce var nonce = DateTime.Now.Ticks.ToString(); // add our post vars postVars.Add(new KeyValuePair <string, string>("nonce", nonce)); postVars.Add(new KeyValuePair <string, string>("command", "returnBalances")); // make the actual api request var res = MakeRequest(postVars); Console.WriteLine($"Command: returnBalances returned | {res}"); } }).Wait(20000); }); Console.WriteLine("Waiting For Data"); Console.ReadLine(); channel.Close(); subscription.Dispose(); }
private static IDisposable ClientCode(string serverAddress) { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel wampChannel = channelFactory.CreateJsonChannel(serverAddress, "realm1"); wampChannel.Open().Wait(); ISubject <int> subject = wampChannel.RealmProxy.Services.GetSubject <int>("com.myapp.topic1"); IDisposable disposable = subject.Subscribe(x => GetValue(x)); return(disposable); }
public static IObservable <IWampChannel> CreateWampChannel(string url, string realm) { return(Observable.Create <IWampChannel>(observer => { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(url, realm); var realmProxy = channel.RealmProxy; EventHandler <WampSessionCreatedEventArgs> onEstablished = (e, w) => { Trace.WriteLine($"WAMP-channel opened. SessionId: {((WampSharp.V2.Client.WampSessionClient<Newtonsoft.Json.Linq.JToken>)channel.RealmProxy.Monitor).Session}"); observer.OnNext(channel); }; EventHandler <WampConnectionErrorEventArgs> onFail = (e, w) => { Trace.WriteLine($"WAMP-channel in error. SessionId: {((WampSharp.V2.Client.WampSessionClient<Newtonsoft.Json.Linq.JToken>)channel.RealmProxy.Monitor).Session}. Error: {w.Exception.Message}"); observer.OnError(w.Exception); }; EventHandler <WampSessionCloseEventArgs> onEnd = (e, w) => { Trace.WriteLine($"WAMP-channel completed. SessionId: {((WampSharp.V2.Client.WampSessionClient<Newtonsoft.Json.Linq.JToken>)channel.RealmProxy.Monitor).Session}. Reason: {w.Reason}"); observer.OnError(new Exception(w.Reason)); }; realmProxy.Monitor.ConnectionEstablished += onEstablished; realmProxy.Monitor.ConnectionError += onFail; realmProxy.Monitor.ConnectionBroken += onEnd; Trace.WriteLine("Opening WAMP-channel"); channel.Open().ConfigureAwait(false); Action onClose = () => { Trace.WriteLine("Disconnecting WAMP-channel"); channel.Close(); realmProxy.Monitor.ConnectionEstablished -= onEstablished; realmProxy.Monitor.ConnectionError -= onFail; realmProxy.Monitor.ConnectionBroken -= onEnd; }; return Disposable.Create(onClose); })); }
public static void Main(string[] args) { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); const string serverAddress = "ws://localhost:8081"; IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1"); channel.Open().Wait(5000); IArgumentsService proxy = channel.RealmProxy.Services.GetCalleeProxy <IArgumentsService>(); proxy.Ping(); Console.WriteLine("Pinged!"); int result = proxy.Add2(2, 3); Console.WriteLine("Add2: {0}", result); var starred = proxy.Stars(); Console.WriteLine("Starred 1: {0}", starred); starred = proxy.Stars(nick: "Homer"); Console.WriteLine("Starred 2: {0}", starred); starred = proxy.Stars(stars: 5); Console.WriteLine("Starred 3: {0}", starred); starred = proxy.Stars(nick: "Homer", stars: 5); Console.WriteLine("Starred 4: {0}", starred); string[] orders = proxy.Orders("coffee"); Console.WriteLine("Orders 1: {0}", string.Join(", ", orders)); orders = proxy.Orders("coffee", limit: 10); Console.WriteLine("Orders 2: {0}", string.Join(", ", orders)); Console.ReadLine(); }
/// <summary> /// Installs the WAMP-communication stack /// </summary> /// <param name="services"></param> /// <returns></returns> public static IServiceCollection AddWamp(this IServiceCollection services) { services .AddSingleton(provider => { var settings = provider.GetService <IOptions <WampSettings> >(); var factory = new DefaultWampChannelFactory(); var channel = factory.CreateJsonChannel(settings.Value.Router, settings.Value.Realm); return(channel); }) .AddSingleton(provider => { var settings = provider.GetService <IOptions <WampSettings> >(); var channelObservable = WampChannelFactory.CreateWampChannel(settings.Value.Router, settings.Value.Realm); return(channelObservable.Retry().Replay(1).RefCount()); }) .AddTransient <IWampOperation, WampOperation>() .AddSingleton <IWampService, WampService>(); return(services); }
public Calleee() { DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(location, "realm1"); Task openTask = channel.Open(); // await openTask; openTask.Wait(); IArgumentsService instance = new ArgumentsService(); IWampRealmProxy realm = channel.RealmProxy; Task <IAsyncDisposable> registrationTask = realm.Services.RegisterCallee(instance); // await registrationTask; registrationTask.Wait(); }
private static void Main(string[] args) { int serverPort = PortUtils.FindAvailablePortIncrementally(18889); string serverAddress = $"ws://127.0.0.1:{serverPort}/ws"; //WampHost host = new DefaultWampHost(serverAddress); DefaultWampAuthenticationHost host = new DefaultWampAuthenticationHost(serverAddress, new VergicWampAuthenticatorFactory()); IWampHostedRealm realm = host.RealmContainer.GetRealmByName("vivego"); realm.SessionCreated += Realm_SessionCreated; realm.SessionClosed += Realm_SessionClosed; //EnableDistributedBackplane(realm); host.Open(); DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel wampChannel = channelFactory.CreateJsonChannel(serverAddress, "vivego", new TicketAuthenticator()); wampChannel.Open().Wait(); using (wampChannel.RealmProxy.Services .GetSubject <object>("vivego") .Subscribe(s => { Console.Out.WriteLine(s); })) { //while (true) { string input = Console.ReadLine(); realm.TopicContainer.Publish(WampObjectFormatter.Value, new PublishOptions(), "vivego", new object[] { "Helo" }); } } wampChannel.Close(); Console.ReadLine(); }
private static void ClientCode(string serverAddress, IEnumerable <IWampRpcOperation> operations) { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1"); Task task = channel.Open(); task.Wait(5000); if (!task.IsCompleted) { Console.WriteLine("Server might be down."); Console.WriteLine("Press any key to exit..."); Console.ReadLine(); Environment.Exit(0); } else { Console.WriteLine("Connected to server."); } var tasks = new List <Task>(); foreach (IWampRpcOperation operation in operations) { Task registrationTask = channel.RealmProxy.RpcCatalog.Register(operation, new RegisterOptions()); tasks.Add(registrationTask); } bool complete = Task.WaitAll(tasks.ToArray(), TimeSpan.FromSeconds(30)); if (complete) { Console.WriteLine("All operations registered."); } Console.ReadLine(); }
public static void Main(string[] args) { DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); IWampChannel channel = factory.CreateJsonChannel(serverAddress, "realm1"); channel.Open().Wait(); IWampTopicProxy topicProxy = channel.RealmProxy.TopicContainer.GetTopicByUri(selectionChangedTopic); MySubscribeOptions options = new MySubscribeOptions(); // Set your options here options.@return = new string[] { "id" }; SubscribeContext context = new SubscribeContext(); topicProxy.Subscribe(new MySubscriber(context), options) .ContinueWith(t => context.unsubscribeDisposable = t.Result) .Wait(); Console.WriteLine("Add a child to an entity in the Wwise Authoring application."); Console.ReadLine(); }
static void Main(string[] args) { var channelFactory = new DefaultWampChannelFactory(); var channel = channelFactory.CreateJsonChannel("wss://api.poloniex.com", "realm1"); channel.Open().GetAwaiter().GetResult(); var tickerSubject = channel.RealmProxy.Services.GetSubject("ticker"); var cancellationTokenSource = new CancellationTokenSource(); using (var subscr = tickerSubject.Subscribe(evt => { var currencyPair = evt.Arguments[0].Deserialize <string>(); var last = evt.Arguments[1].Deserialize <decimal>(); Console.WriteLine($"Currencypair: {currencyPair}, Last: {last}"); })) { Console.WriteLine("Press a key to exit"); Console.ReadKey(); cancellationTokenSource.Cancel(); } }
public async Task Execute() { const string location = "ws://localhost:8080/ws"; DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(location, "realm1"); Task openTask = channel.Open(); await openTask.ConfigureAwait(false); IWampRealmProxy realm = channel.RealmProxy; IQuizServer instance = new QuizServer(realm.Services); registrationTask = realm.Services.RegisterCallee(instance); await registrationTask.ConfigureAwait(false); await Task.Yield(); }
private async static Task Run(string wsuri, string realm) { Console.WriteLine("Connecting to {0}, realm {1}", wsuri, realm); DefaultWampChannelFactory factory = new DefaultWampChannelFactory(); IWampChannel channel = factory.CreateJsonChannel(wsuri, realm); IWampClientConnectionMonitor monitor = channel.RealmProxy.Monitor; monitor.ConnectionBroken += OnClose; monitor.ConnectionError += OnError; await channel.Open().ConfigureAwait(false); IWampRealmServiceProvider services = channel.RealmProxy.Services; // SUBSCRIBE to a topic and receive events ISubject<string> helloSubject = services.GetSubject<string>("com.example.onhello"); IDisposable subscription = helloSubject.Subscribe (x => Console.WriteLine("event for 'onhello' received: {0}", x)); Console.WriteLine("subscribed to topic 'onhello'"); // REGISTER a procedure for remote calling Add2Service callee = new Add2Service(); await services.RegisterCallee(callee) .ConfigureAwait(false); Console.WriteLine("procedure add2() registered"); // PUBLISH and CALL every second... forever ISubject<int> onCounterSubject = services.GetSubject<int>("com.example.oncounter"); IMul2Service proxy = services.GetCalleeProxy<IMul2Service>(); int counter = 0; while (true) { // PUBLISH an event onCounterSubject.OnNext(counter); Console.WriteLine("published to 'oncounter' with counter {0}", counter); counter++; // CALL a remote procedure try { int result = await proxy.Multiply(counter, 3) .ConfigureAwait(false); Console.WriteLine("mul2() called with result: {0}", result); } catch (WampException ex) { if (ex.ErrorUri != "wamp.error.no_such_procedure") { Console.WriteLine("call of mul2() failed: " + ex); } } await Task.Delay(TimeSpan.FromSeconds(1)) .ConfigureAwait(false); } }