예제 #1
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);

            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);
        }
예제 #2
0
        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();
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
파일: MtClient.cs 프로젝트: wildbunny/MT
        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>();
        }
예제 #7
0
        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>();
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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();
        }
예제 #11
0
        public async Task <IWampRealmServiceProvider> GetService()
        {
            if (channel == null)
            {
                channel = factory.CreateJsonChannel(ServerAddress, "realm1");

                await channel.Open().ConfigureAwait(false);
            }
            return(channel.RealmProxy.Services);
        }
예제 #12
0
        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);
        }
예제 #13
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);
        }
예제 #14
0
        /// <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();
            }
        }
예제 #15
0
        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();
        }
예제 #16
0
        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)));
        }
예제 #17
0
        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);
        }
예제 #18
0
        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();
        }
예제 #19
0
        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);
            });
        }
예제 #20
0
        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();
        }
예제 #21
0
        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);
            }));
        }
예제 #23
0
        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);
 }
예제 #25
0
        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();
        }
예제 #26
0
        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();
        }
예제 #27
0
        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();
        }
예제 #28
0
        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();
        }
예제 #29
0
        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();
            }
        }
예제 #30
0
        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();
        }
예제 #31
0
        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);
            }
        }