class Rubycon::RconSession

Public Class Methods

new(server_info) click to toggle source
# File lib/rubycon/rcon_session.rb, line 3
def initialize(server_info)
  @commands = []
  @server_info = server_info
  @session = SourceServer.new @server_info.address, @server_info.port

  setup_autocompletion_items
  run_console
end

Private Instance Methods

add_changelevel_commands() click to toggle source
# File lib/rubycon/rcon_session.rb, line 32
def add_changelevel_commands
  rcon_exec('maps *').each_line do |l|
    if l =~ /PENDING.*/
      @commands << "changelevel #{((l.split).last).sub('.bsp', '')}"
    end
  end
end
add_cvars_from_server() click to toggle source
# File lib/rubycon/rcon_session.rb, line 24
def add_cvars_from_server
  rcon_exec('cvarlist').each_line do |l|
    if l =~ /.*:.*:.*:.*/
      @commands << (l.split).first
    end
  end
end
auth_if_necessary() click to toggle source
# File lib/rubycon/rcon_session.rb, line 40
def auth_if_necessary
  unless @session.rcon_authenticated?
    @session.rcon_auth(@server_info.rcon)
  end
end
rcon_exec(line) click to toggle source
# File lib/rubycon/rcon_session.rb, line 46
def rcon_exec(line)
  begin
    auth_if_necessary
    @session.rcon_exec(line)
  rescue RCONNoAuthError
    puts 'Could not authenticate with gameserver. Wrong rcon password?'
    exit
  rescue Errno::ECONNREFUSED
    puts 'Connection refused. Wrong host?'
    exit
  rescue SteamCondenser::TimeoutError
    puts 'Connection timed out while sending command, reconnecting...'
    reconnect
  end
end
readline_with_history() click to toggle source
# File lib/rubycon/rcon_session.rb, line 79
def readline_with_history
  line = Readline.readline("#{@server_info.name}> ", true)
  return nil if line.nil?
  if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line
    Readline::HISTORY.pop
  end
  line
end
reconnect() click to toggle source
# File lib/rubycon/rcon_session.rb, line 14
def reconnect
  @session = SourceServer.new @server_info.address, @server_info.port
  setup_autocompletion_items
end
run_console() click to toggle source
# File lib/rubycon/rcon_session.rb, line 62
def run_console
  comp = proc { |s| @commands.grep( /^#{Regexp.escape(s)}/ ) }
  Readline.completion_append_character = ' '
  Readline.basic_word_break_characters = ''
  Readline.completion_proc = comp
  stty_save = `stty -g`.chomp

  begin
    while line = readline_with_history
      puts rcon_exec(line) unless line.empty?
    end
  rescue Interrupt
    system('stty', stty_save)
    @session.disconnect
  end
end
setup_autocompletion_items() click to toggle source
# File lib/rubycon/rcon_session.rb, line 19
def setup_autocompletion_items
  add_cvars_from_server
  add_changelevel_commands
end