code: def publish(params)
        params[:msgid] = message_id = next_message_id
        params = @default_params.merge(params)
  
        logger.debug "Message sent: #{params.inspect}"
  
        if HTTP_APIS.include?(params[:api])
          publish_to_http(params)
        else
          publish_to_socket(params)
        end
  
        # Add timeout handler
        EventMachine.add_timer(@timeout) do
          dispatch('msgid' => message_id, 'command' => 'response_received', 'error' => 'timed out')
        end if @timeout
  
        message_id
      end
docs: Publishes the given params to the underlying web socket.  The defaults
   initially configured as part of the connection will also be included in
   the message.
  
   @param [Hash] params The parameters to include in the message sent
   @return [Fixnum] The id of the message delivered