Class: Meshchat::Network::Message::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/meshchat/network/message/base.rb

Overview

NOTE:

#display: shows the message
          should be used locally, before *sending* a message
#handle: processing logic for the message
         should be used when receiving a message, and there
         needs to be a response right away
#respond: where the actual logic for the response goes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message: '', sender: {}, payload: {}, message_dispatcher: nil, message_factory: nil) ⇒ Base

Returns a new instance of Base.

Parameters:

  • message (String) (defaults to: '')
  • sender (Hash) (defaults to: {})
  • payload (Hash) (defaults to: {})

    all paramaters for a received message

  • message_dispatcher (MeshChat::Network::Dispatcher) (defaults to: nil)

    optionally overrides the default payload

  • message_factory (MeshChat::Message::Factory) (defaults to: nil)

    the message factory



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/meshchat/network/message/base.rb', line 23

def initialize(
  message:            '',
  sender:             {},
  payload:            {},
  message_dispatcher: nil,
  message_factory:    nil)

  if payload.present?
    @payload = payload.deep_stringify_keys
  else
    @_message         = message
    @_sender_name     = sender['alias']
    @_sender_location = sender['location']
    @_sender_uid      = sender['uid']
    @_time_received   = Time.now.iso8601
  end

  @_message_dispatcher = message_dispatcher
  @_message_factory    = message_factory
end

Instance Attribute Details

#_messageObject

Returns the value of attribute _message.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _message
  @_message
end

#_message_dispatcherObject

Returns the value of attribute _message_dispatcher.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _message_dispatcher
  @_message_dispatcher
end

#_message_factoryObject

Returns the value of attribute _message_factory.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _message_factory
  @_message_factory
end

#_sender_locationObject

Returns the value of attribute _sender_location.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _sender_location
  @_sender_location
end

#_sender_nameObject

Returns the value of attribute _sender_name.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _sender_name
  @_sender_name
end

#_sender_uidObject

Returns the value of attribute _sender_uid.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _sender_uid
  @_sender_uid
end

#_time_receivedObject

Returns the value of attribute _time_received.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def _time_received
  @_time_received
end

#payloadObject

Returns the value of attribute payload.



13
14
15
# File 'lib/meshchat/network/message/base.rb', line 13

def payload
  @payload
end

Instance Method Details

#clientObject



91
92
93
# File 'lib/meshchat/network/message/base.rb', line 91

def client
  APP_CONFIG[:client_name]
end

#client_versionObject



95
96
97
# File 'lib/meshchat/network/message/base.rb', line 95

def client_version
  APP_CONFIG[:client_version]
end

#displayObject

shows the message should be used locally, before sending a message



101
102
103
104
105
106
107
# File 'lib/meshchat/network/message/base.rb', line 101

def display
  {
    time:    time_received_as_date,
    from:    sender_name,
    message: message
  }
end

#encrypt_for(node) ⇒ Object



130
131
132
133
134
135
# File 'lib/meshchat/network/message/base.rb', line 130

def encrypt_for(node)
  result     = jsonized_payload
  public_key = node.public_key
  result     = Encryption.encrypt(result, public_key) if node.public_key
  Base64.strict_encode64(result)
end

#handleObject

processing logic for the message should be used when receiving a message, and there needs to be a response right away. this may call display, if the response is always to be displayed



113
114
115
# File 'lib/meshchat/network/message/base.rb', line 113

def handle
  display
end

#messageObject



63
64
65
# File 'lib/meshchat/network/message/base.rb', line 63

def message
  _message || payload['message']
end

#renderObject Also known as: jsonized_payload

this message should be called immediately before sending to the whomever



124
125
126
# File 'lib/meshchat/network/message/base.rb', line 124

def render
  payload.to_json
end

#respondObject

Most message types aren’t going to need to have an immediate response.



119
120
# File 'lib/meshchat/network/message/base.rb', line 119

def respond
end

#senderObject



67
68
69
# File 'lib/meshchat/network/message/base.rb', line 67

def sender
  payload['sender']
end

#sender_locationObject



75
76
77
# File 'lib/meshchat/network/message/base.rb', line 75

def sender_location
  _sender_location || sender['location']
end

#sender_nameObject



71
72
73
# File 'lib/meshchat/network/message/base.rb', line 71

def sender_name
  _sender_name || sender['alias']
end

#sender_uidObject



79
80
81
# File 'lib/meshchat/network/message/base.rb', line 79

def sender_uid
  _sender_uid || sender['uid']
end

#time_receivedObject



83
84
85
# File 'lib/meshchat/network/message/base.rb', line 83

def time_received
  _time_received || payload['time_sent']
end

#time_received_as_dateObject



87
88
89
# File 'lib/meshchat/network/message/base.rb', line 87

def time_received_as_date
  DateTime.parse(time_received) if time_received
end

#typeObject



59
60
61
# File 'lib/meshchat/network/message/base.rb', line 59

def type
  @type ||= Factory::TYPES.invert[self.class]
end