private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                }
                this.socket?.Dispose();
                this.socket = null;
                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }
 public TelldusClient(string uri)
 {
     this.socket            = new Websocket(uri);
     this.socket.OnMessage += m =>
     {
         var @object = JObject.Parse(m);
         var data    = @object["data"].ToObject <string>();
         if (data != null)
         {
             try
             {
                 var json = JObject.Parse(data);
                 this.OnMessage?.Invoke(json);
             }
             catch (Exception e)
             {
                 Console.WriteLine(data + " " + e.Message);
             }
         }
     };
 }