Class: SourceServer

Inherits:
Object
  • Object
show all
Includes:
GameServer
Defined in:
lib/steam/servers/source_server.rb

Overview

This class represents a Source game server and can be used to query information about and remotely execute commands via RCON on the server

A Source game server is an instance of the Source Dedicated Server (SrcDS) running games using Valve’s Source engine, like Counter-Strike: Source, Team Fortress 2 or Left4Dead.

See Also:

Author:

  • Sebastian Staudt

Constant Summary

Constants included from GameServer

GameServer::REQUEST_CHALLENGE, GameServer::REQUEST_INFO, GameServer::REQUEST_PLAYER, GameServer::REQUEST_RULES

Instance Attribute Summary

Attributes included from Server

#host_names, #ip_addresses

Instance Method Summary collapse

Methods included from GameServer

#handle_response_for_request, #init, #ping, player_status_attributes, #players, #rcon_authenticated?, #rules, #server_info, split_player_status, #to_s, #update_challenge_number, #update_ping, #update_players, #update_rules, #update_server_info

Methods included from Server

#rotate_ip

Constructor Details

#initialize(address, port = 27015) ⇒ SourceServer

Creates a new instance of a server object representing a Source server, i.e. SrcDS instance

Parameters:

  • address (String)

    Either an IP address, a DNS name or one of them combined with the port number. If a port number is given, e.g. ‘server.example.com:27016’ it will override the second argument.

  • port (Fixnum) (defaults to: 27015)

    The port the server is listening on

Raises:



36
37
38
# File 'lib/steam/servers/source_server.rb', line 36

def initialize(address, port = 27015)
  super
end

Instance Method Details

#init_socketObject

Initializes the sockets to communicate with the Source server



44
45
46
47
# File 'lib/steam/servers/source_server.rb', line 44

def init_socket
  @rcon_socket = RCONSocket.new @ip_address, @port
  @socket      = SourceSocket.new @ip_address, @port
end

#rcon_auth(password) ⇒ Boolean

Authenticates the connection for RCON communication with the server

Parameters:

  • password (String)

    The RCON password of the server

Returns:

  • (Boolean)

    whether authentication was successful

Raises:

See Also:



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/steam/servers/source_server.rb', line 54

def rcon_auth(password)
  @rcon_request_id = rand 2**16

  @rcon_socket.send RCONAuthRequest.new(@rcon_request_id, password)
  @rcon_socket.reply
  reply = @rcon_socket.reply

  raise RCONNoAuthException.new if reply.request_id == -1

  reply.request_id == @rcon_request_id
end

#rcon_exec(command) ⇒ String

Remotely executes a command on the server via RCON

Parameters:

  • command (String)

    The command to execute on the server via RCON

Returns:

  • (String)

    The output of the executed command

See Also:



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/steam/servers/source_server.rb', line 71

def rcon_exec(command)
  @rcon_socket.send RCONExecRequest.new(@rcon_request_id, command)
  @rcon_socket.send RCONTerminator.new(@rcon_request_id)

  response = ''
  begin
    response_packet = @rcon_socket.reply
    raise RCONNoAuthException.new if response_packet.is_a? RCONAuthResponse
    response << response_packet.response
  end while response.length == 0 || response_packet.response.size > 0

  response.strip
end