def start(&blk)
      @stopping = false

      starter = -> do
        ssdp_search_and_listen(@search_target, @search_options)
        blk.call(@new_device_channel, @old_device_channel)
        @running = true
      end

      if EM.reactor_running?
        log 'Joining reactor...'
        starter.call
      else
        log 'Starting reactor...'
        EM.synchrony(&starter)
      end
    end
def start(&blk)
      @stopping = false

      starter = -> do
        ssdp_search_and_listen(@search_target, @search_options)
        blk.call(@new_device_channel, @old_device_channel)
        @running = true
      end

      if EM.reactor_running?
        log 'Joining reactor...'
        starter.call
      else
        log 'Starting reactor...'
        EM.synchrony(&starter)
      end
    end
@param [String] search_target The device(s) to control.
 @param [Hash] search_options Options to pass on to SSDP search and listen calls.
 @option options [Fixnum] response_wait_time
 @option options [Fixnum] m_search_count
 @option options [Fixnum] ttl
 Starts the ControlPoint.  If an EventMachine reactor is running already,
 it'll join that reactor, otherwise it'll start the reactor.

 @yieldparam [EventMachine::Channel] new_device_channel The means through
   which clients can get notified when a new device has been discovered
   either through SSDP searching or from an +ssdp:alive+ notification.
 @yieldparam [EventMachine::Channel] old_device_channel The means through
   which clients can get notified when a device has gone offline (have sent
   out a +ssdp:byebye+ notification).