class ChatMsgs
Public Instance Methods
add_remote_msg(ret)
click to toggle source
# File Entities/ChatMsg.rb, line 59 def add_remote_msg(ret) dputs(3) { "Got reply #{ret.inspect}" } if ret._code =~ /^error/i dputs(0) { "Error #{ret._msg} while fetching chat-messages" } else ret._msg.each { |m| dputs(2) { "Got message #{m.inspect}" } new_msg("#{m._login}@#{m._center}", m._msg, nil, m._time) } end end
center_hash()
click to toggle source
# File Entities/ChatMsg.rb, line 54 def center_hash return {} unless center = Persons.center {center: {login: center.login_name, pass: center.password_plain}} end
icc_msg_pull(tr)
click to toggle source
Gets new messages since last call tr holds the following keys: center: hash with {login, pass} keys
# File Entities/ChatMsg.rb, line 36 def icc_msg_pull(tr) return 'Error: not a server here' unless ConfigBase.has_function?(:course_server) return unless tr && tr._center center = Persons.check_login(tr._center._login, tr._center._pass) if !center || !center.has_permission?(:center) return "Error: center #{center.inspect} has wrong password or is not a center" end @static._client_times ||= {} last_time = @static._client_times[center.login_name] || Time.new(2000, 1, 1) @static._client_times[center.login_name] = Time.now search_all_. select { |msg| msg.time > last_time && msg.center != center }. collect { |msg| center = msg.center ? msg.center.login_name : Persons.master_center_login_name msg.to_hash.merge(center: center) } end
icc_msg_push(tr)
click to toggle source
Pushes a message to the server and returns eventual new messages tr holds the following keys: center: hash with {login, pass} keys person: login-name of person msg: the message written
It returns the results from icc_msg_pull
# File Entities/ChatMsg.rb, line 21 def icc_msg_push(tr) return 'Error: no course_server' unless ConfigBase.has_function?(:course_server) return unless tr && tr._center center = Persons.check_login(tr._center._login, tr._center._pass) if center && center.has_permission?(:center) new_msg(tr._person, tr._msg, center) else return "Error: center #{center.inspect} has wrong password or is not a center" end icc_msg_pull(tr) end
is_remote?()
click to toggle source
# File Entities/ChatMsg.rb, line 71 def is_remote? ConfigBase.has_function?(:remote_chat) && ConfigBase.server_url.to_s.length > 0 && (!ConfigBase.has_function?(:course_server)) end
load()
click to toggle source
Calls superclass method
# File Entities/ChatMsg.rb, line 136 def load super ChatMsgs.search_all_.each { |cm| cm.time = Time.parse(cm.time) } end
new_msg(person, msg, center = nil, time = Time.now)
click to toggle source
# File Entities/ChatMsg.rb, line 77 def new_msg(person, msg, center = nil, time = Time.now) create(time: time, msg: msg, center: center, login: person) log_msg :ChatMsgs, "#{person} from #{center ? center.login_name : 'here'} " + "says - #{msg}" if @data.length > @max_msgs get_data_instance(@data.keys.first).delete end end
new_msg_send(person, msg)
click to toggle source
# File Entities/ChatMsg.rb, line 87 def new_msg_send(person, msg) if is_remote? log_msg :ChatMsgs, "Sending msg from #{person} to server" arg = center_hash.merge(person: person, msg: msg) # As we'll get the new messages, no need to fetch them again wait_counter_reset (!$MobileControl || $MobileControl.is_connected) and add_remote_msg(ICC.get(:ChatMsgs, :msg_push, args: arg)) end new_msg(person, msg) end
setup_data()
click to toggle source
# File Entities/ChatMsg.rb, line 2 def setup_data value_time :time value_str :msg value_entity_person :center value_str :login @max_msgs ||= 200 @static._client_times ||= {} @wait_counter = 0 @wait_max = 5 end
show_list(max = 100)
click to toggle source
# File Entities/ChatMsg.rb, line 120 def show_list(max = 100) date = '' search_all_.reverse[0...max].collect { |cm| t = cm.time.class == Time ? cm.time : Time.parse(cm.time) name = (ConfigBase.has_function?(:course_server) && cm.center) ? "#{cm.login}@#{cm.center.login_name}" : "#{cm.login}" d = "#{t.strftime('%Y-%m-%d')}\n" if d != date date = d else d = '' end "#{d}#{t.strftime('%H:%M')} - #{name}: #{cm.msg}" }.join("\n") end
wait_counter_add()
click to toggle source
if @wait_counter is bigger or equal to @wait_counter, it checks for new messages. That way we save precious bandwith
# File Entities/ChatMsg.rb, line 106 def wait_counter_add is_remote? or return @wait_counter += 1 if @wait_counter >= @wait_max && (!$MobileControl || $MobileControl.is_connected) add_remote_msg(ICC.get(:ChatMsgs, :msg_pull, args: center_hash)) wait_counter_reset end end
wait_counter_reset()
click to toggle source
# File Entities/ChatMsg.rb, line 116 def wait_counter_reset @wait_counter = 0 end
wait_max=(max)
click to toggle source
# File Entities/ChatMsg.rb, line 99 def wait_max=(max) @wait_max = max end