public void Dispose() { //TODO: Send DISCONNECT frame. _socket.Close(); State = StompConnectionStatus.DisconnectedByUser; ((IDisposable)_socket).Dispose(); }
public Task Connect(IDictionary <string, string> headers) { if (State != StompConnectionStatus.NeverConnected && State != StompConnectionStatus.DisconnectedByHost && State != StompConnectionStatus.DisconnectedByUser) { throw new InvalidOperationException("The current state of the connection is not Closed."); } State = StompConnectionStatus.Connecting; _socket.Connect(); var connectMessage = new StompFrame(StompFrameKind.Connect, headers); _socket.Send(_stompSerializer.Serialize(connectMessage)); _socket.OnMessage += HandleMessage; _socket.OnError += (object sender, ErrorEventArgs e) => { State = StompConnectionStatus.Error; OnError?.Invoke(this, e.Message); }; _socket.OnClose += (object sender, CloseEventArgs e) => { State = StompConnectionStatus.DisconnectedByHost; OnDisconnected?.Invoke(this, e.Reason); }; _socket.OnOpen += (object sender, EventArgs e) => { State = StompConnectionStatus.Connected; OnConnected?.Invoke(this, null); }; State = StompConnectionStatus.Connected; return(Task.CompletedTask); }