/// <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"); } }
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); }