Ultra simple STOMP client with command buffering support
Inheritance: IDisposable
Esempio n. 1
0
        /// <summary>
        ///   Initializes a new instance of the <see cref="StompConnection" /> class.
        /// </summary>
        /// <param name="stompClient"> The stomp client. </param>
        public StompConnection(StompClient stompClient)
        {
            Messages = new ConcurrentQueue<StompMessage>();

            _stompClient = stompClient;
            _stompClient.OnMessage += m => Messages.Enqueue(m);
        }
        private static void WaitForSubscriptionConformation(StompClient client, string queue)
        {
            var subscribed = false;
            var retryCount = 20;
            var message = "connected to:" + queue;
            var originalMessageHandler = client.OnMessage;

            client.OnMessage = null;
            client.OnMessage = msg => subscribed = msg.Body == message;

            while (!subscribed && retryCount > 0)
            {
                client.Send(queue, message);

                Thread.Sleep(1500);
                retryCount--;
            }

            client.OnMessage = originalMessageHandler;

            if (retryCount == 0)
            {
                throw new InvalidOperationException("Timeout waiting for stomp broker to respond");
            }
        }
Esempio n. 3
0
        private static void Main(string[] args)
        {
            const string address = "ws://localhost:8181/";
            var wsListener = new StompWebsocketListener(address);

            wsListener.OnConnect
                += stompClient =>
                       {
                           Console.WriteLine("a new client connected!");
                           stompClient.OnMessage += msg => Console.Out.WriteLine("msg received: {0} {1}", msg.Command, msg.Body);
                       };

            var server = new StompServer(wsListener);
            server.Start();

            var client = new StompClient(new WebTransportTransport(address));
            client.Connect();
            client.Send("/queue/test", "hi there. you are the first to connect");

            Console.Out.WriteLine("Press [Enter] to stop the server");
            Console.ReadLine();
        }
        /// <summary>
        ///   Gets the connection.
        /// </summary>
        /// <param name = "address">The address.</param>
        /// <returns></returns>
        private StompClient GetConnection(IEndpointAddress address)
        {
            EnsureProtocolIsCorrect(address.Uri);

            var serverAddress = new UriBuilder("ws", address.Uri.Host, address.Uri.Port).Uri;

            return _connectionCache
                .Retrieve(address.Uri,
                          () =>
                              {
                                  var client = new StompClient();
                                  client.Connect(serverAddress);
                                  return client;
                              });
        }
 /// <summary>
 ///   Initializes a new instance of the <see cref = "StompTransport" /> class.
 /// </summary>
 /// <param name = "address">The address.</param>
 /// <param name = "client">The client.</param>
 public StompTransport(IEndpointAddress address, StompClient client)
     : base(address)
 {
     StompClient = client;
     StompClient.OnMessage += msg => _messages.Enqueue(msg);
 }