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