╭────────◯────────╮
│                 │
│        ●        │
│                 │
╰────────◯────────╯
         │
         │
         ▼
╭─────────────────╮
│                 │◄─────╮     max_retries
│     Closed      │done───────────────────────────────╮
│                 │◄─────┤                            │
╰────────┬────────╯      │                            │
         │               │                            │
         ├───────────────┼──────────────╮             │
         │               │timeout       │             │
  connect│               │              │             │
         │               │              │             │
         ▼               │              ▼             │
╭─────────────────╮      │     ╭────────◯────────╮    │
│                 │      │     │                 │    │
│   Connecting    ├──────┤     │        ◉        │    │
│                 │      │     │                 │    │
╰────────┬────────╯      │     ╰────────◯────────╯    │
         │               │                            │
         │               │                            │
         │               │                            │
  success│               │                            │
         ▼               │                            │
╭─────────────────╮      │                            │
│                 │      │      success               │
│    Connected    │◄─────┼──────────────────────────╮ │
│                 │      │                          │ │
╰────────┬────────╯      │                          │ │
         │               │                          │ │
         │               │                          │ │
         ├───────────────┼──────────────╮           │ │
         │               │              │           │ │
         │               │              │           │ │
         │               │              │           │ │
         │               │              │error      │ │
    close│               │              │           │ │
         │               │              │           │ │
         │               │              │           │ │
         ▼               │              ▼           │ │
╭─────────────────╮      │     ╭─────────────────╮  │ │
│                 │      │     │                 │  │ │
│  Disconnecting  ├──────╯     │  Reconnecting   ├──┴─╯
│                 │            │                 │
╰─────────────────╯            ╰─────────────────╯
