class MCLib::EventFactory
Constants
- Chat
- Login
- Unknown
- Warning
Public Instance Methods
build(message, meta_data, type)
click to toggle source
# File lib/mclib/event_factory.rb, line 10 def build(message, meta_data, type) if type == :warn return Warning.new message end @message, @meta_data = message, meta_data case detect_event when :chat parse_chat when :login parse_login when :unknown Unknown.new message, meta_data else Unknown.new message, meta_data end end
Private Instance Methods
detect_event()
click to toggle source
# File lib/mclib/event_factory.rb, line 31 def detect_event if @message.chars[0] == '<' :chat elsif @message.include? 'logged in' :login else :unknown end end
parse_chat()
click to toggle source
# File lib/mclib/event_factory.rb, line 41 def parse_chat name = '' text = '' stopped_at = 0 @message.chars.each_with_index do |char, index| if char == '<' next elsif char == '>' text = @message[index + 2..-1] # + 2 to skip trailing angle bracket and space break else name << char end end Chat.new name, text end
parse_login()
click to toggle source
# File lib/mclib/event_factory.rb, line 60 def parse_login name = '' ip = '' stopped_at = 0 @message.chars.each_with_index do |char, index| if char != '[' name << char else stopped_at = index + 2 break end end @message.chars[stopped_at..-1].each_with_index do |char, index| if char != ':' ip << char else break end end coordinates = @message.match(/\(.*\)/)[0] coordinates.slice! 0 coordinates.chomp! ')' coordinates = coordinates.split(', ').map { |point| point.to_i } coordinates = { :x => coordinates[0], :y => coordinates[1], :z => coordinates[2] } Login.new name, ip, coordinates end