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