def topic
      if @topic
        @topic
      else
        connected do
          fiber = Fiber.current
          callbacks = {}
          [331, 332, 403, 442].each do |numeric|
            callbacks[numeric] = @thaum.on(numeric) do |event_data|
              topic = event_data[:params].match(':(.*)').captures.first
              fiber.resume topic
            end
          end

          raw "TOPIC #{@name}"
          @topic = Fiber.yield
          callbacks.each do |type, callback|
            @thaum.callbacks[type].delete(callback)
          end

          @topic
        end
      end
    end
def topic
      if @topic
        @topic
      else
        connected do
          fiber = Fiber.current
          callbacks = {}
          [331, 332, 403, 442].each do |numeric|
            callbacks[numeric] = @thaum.on(numeric) do |event_data|
              topic = event_data[:params].match(':(.*)').captures.first
              fiber.resume topic
            end
          end

          raw "TOPIC #{@name}"
          @topic = Fiber.yield
          callbacks.each do |type, callback|
            @thaum.callbacks[type].delete(callback)
          end

          @topic
        end
      end
    end
Experimental, no tests so far.