class AnonClient

Attributes

rooms[RW]
server[R]

Public Class Methods

new(bot, server, room_id, poll_frequency: 2) click to toggle source
# File lib/chatx/polling.rb, line 4
def initialize(bot, server, room_id, poll_frequency: 2)
  @poll_frequency = poll_frequency
  @bot = bot
  @dead = false
  @server = server
  join_room room_id
  start_loop
end

Public Instance Methods

join_room(room_id) click to toggle source
# File lib/chatx/polling.rb, line 13
def join_room(room_id)
  @fkey = Nokogiri::HTML(open("https://chat.#{server}.com/rooms/#{room_id}").read).search("//input[@name='fkey']").attribute("value")
  events_json = Net::HTTP.post_form(URI("https://chat.#{@server}.com/chats/#{room_id}/events"),
                                    fkey: @fkey,
                                    since: 0,
                                    mode: "Messages",
                                    msgCount: 100).body

  events = JSON.parse(events_json)["events"]
  last_event_time = events.max_by { |event| event['time_stamp'] }['time_stamp']
  @rooms = {"r#{room_id}" => last_event_time}
end
kill() click to toggle source
# File lib/chatx/polling.rb, line 26
def kill
  @dead = true
  @thread.join
end

Private Instance Methods

start_loop() click to toggle source
# File lib/chatx/polling.rb, line 33
def start_loop
  @thread = Thread.new do
    until @dead
      response_json = Net::HTTP.post_form(URI("https://chat.#{@server}.com/events"), {fkey: @fkey}.merge(@rooms))
      response = JSON.parse(response_json.body)
      response.each do |room, data|
        @rooms[room] = data["t"] unless data["t"].nil?
      end
      @bot.handle(response)
      sleep @poll_frequency
    end
  end
end