class Caldera::Client
Constants
- LOGGER
Attributes
nodes[R]
@return [Array<Node>]
num_shards[R]
@return [String]
players[R]
@return [Array<Player>]
user_id[R]
@return [String]
Public Class Methods
new(num_shards:, user_id:, connect: nil)
click to toggle source
@param [Integer, String] num_shards
@param [Integer, String] user_id
@param [Proc<String, String>] connect
# File lib/caldera/client.rb, line 26 def initialize(num_shards:, user_id:, connect: nil) @num_shards = num_shards.to_s @user_id = user_id.to_s @players = {} @connect_proc = connect @nodes = [] @voice_state_mutex = Mutex.new @voice_states = Hash.new { |h, guild_id| h[guild_id] = {} } end
Public Instance Methods
add_node(authorization:, uri: nil, rest_uri: nil, ws_uri: nil)
click to toggle source
# File lib/caldera/client.rb, line 71 def add_node(authorization:, uri: nil, rest_uri: nil, ws_uri: nil) uri = URI(uri) unless uri.is_a?(URI::Generic) rest_uri ||= uri.clone.tap { |u| u.scheme = 'http' } ws_uri ||= uri.clone.tap { |u| u.scheme = 'ws' } new_node = Node.new(rest_uri, ws_uri, authorization, self) new_node.start @nodes << new_node end
best_node()
click to toggle source
# File lib/caldera/client.rb, line 87 def best_node @nodes.min { |n| n.stats['cpu']['systemLoad'] } end
connect(guild_id, channel_id, timeout: nil)
click to toggle source
@param [Integer, String] guild_id @param [Integer, String] channel_id @param [Number] timeout @return [Caldera::Player]
# File lib/caldera/client.rb, line 40 def connect(guild_id, channel_id, timeout: nil) return Timeout.timeout(timeout) { connect(guild_id, channel_id) } if timeout gid = guild_id.to_s return @players[gid] if @players[gid] @connect_proc.call(gid, channel_id.to_s) sleep 0.05 until @players[gid] @players[gid] end
get_player(guild_id)
click to toggle source
# File lib/caldera/client.rb, line 91 def get_player(guild_id) @players[guild_id.to_s] end
remove_node(node)
click to toggle source
# File lib/caldera/client.rb, line 82 def remove_node(node) @nodes.delete(node) node.stop end
update_voice_state(guild_id, session_id: nil, event: nil)
click to toggle source
# File lib/caldera/client.rb, line 53 def update_voice_state(guild_id, session_id: nil, event: nil) guild_id = guild_id.to_s @voice_state_mutex.synchronize do @voice_states[guild_id][:session_id] = session_id if session_id @voice_states[guild_id][:event] = event if event end state = @voice_states[guild_id] if state[:session_id] && state[:event] LOGGER.info { "Creating player for #{guild_id}" } best_node.create_player(guild_id, state[:session_id], state[:event]) @voice_states.delete(guild_id) else LOGGER.debug { "Recieved partial info for creating player for #{guild_id}: #{state}" } end end