class Meshchat::Ui::CLI

A user interface is responsible for for creating a client and sending messages to that client

Constants

AWAY_TIMEOUT

60 seconds times 5 minutes

Attributes

_command_factory[R]
_last_input_received_at[RW]
_message_dispatcher[R]
_message_factory[R]
_sent_idle_message[RW]

Public Class Methods

new(dispatcher, message_factory, _display) click to toggle source
# File lib/meshchat/ui/cli.rb, line 23
def initialize(dispatcher, message_factory, _display)
  @_message_dispatcher = dispatcher
  @_message_factory = message_factory
  @_command_factory = InputFactory.new(dispatcher, message_factory, self)
  self._sent_idle_message = false
  self._last_input_received_at = Time.now

  # only check for timeout once a minute
  EM.add_periodic_timer(60) { away_timeout }
end

Public Instance Methods

activity_timeout_triggred?() click to toggle source
# File lib/meshchat/ui/cli.rb, line 45
def activity_timeout_triggred?
  return false if _sent_idle_message
  seconds_passed = Time.now - _last_input_received_at
  seconds_passed > AWAY_TIMEOUT
end
away_timeout() click to toggle source
# File lib/meshchat/ui/cli.rb, line 34
def away_timeout
  return unless activity_timeout_triggred?
  message = _message_factory.create(Network::Message::EMOTE,
    data: {
      message: 'has become idle'
    })

  _message_dispatcher.send_to_all(message)
  self._sent_idle_message = true
end
create_input(msg) click to toggle source
# File lib/meshchat/ui/cli.rb, line 56
def create_input(msg)
  reset_timeout_timer
  handler = _command_factory.create(for_input: msg)
  handler.handle
rescue => e
  Debug.creating_input_failed(e)
end
reset_timeout_timer() click to toggle source
# File lib/meshchat/ui/cli.rb, line 51
def reset_timeout_timer
  self._last_input_received_at = Time.now
  self._sent_idle_message = false
end
send_disconnect() click to toggle source
# File lib/meshchat/ui/cli.rb, line 75
def send_disconnect
  klass   = Command::SendDisconnect
  command = _command_factory.create(with_class: klass)
  command.handle
end
shutdown() click to toggle source

save config and exit

# File lib/meshchat/ui/cli.rb, line 65
def shutdown
  # close_server
  Display.info 'saving config...'
  APP_CONFIG.user.save
  Display.info 'notifying of disconnection...'
  send_disconnect
  Display.alert "\n\nGoodbye.  \n\nThank you for using #{Meshchat.name}"
  exit
end