Class: AgentXmpp::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/agent_xmpp/client/client.rb

Overview


Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Client

.….….….….….….….….….….….….….….….….….….….….….….….….….….



12
13
14
15
16
17
18
# File 'lib/agent_xmpp/client/client.rb', line 12

def initialize(config)
  @password = config['password']
  @port = config['port'] || 5222
  resource = config['resource'] || Socket.gethostname
  @jid = Jabber::JID.new("#{config['jid']}/#{resource}")
  @roster = Roster.new(@jid, config['contacts'])
end

Instance Attribute Details

#connectionObject (readonly)




8
9
10
# File 'lib/agent_xmpp/client/client.rb', line 8

def connection
  @connection
end

#jidObject (readonly)




8
9
10
# File 'lib/agent_xmpp/client/client.rb', line 8

def jid
  @jid
end

#passwordObject (readonly)




8
9
10
# File 'lib/agent_xmpp/client/client.rb', line 8

def password
  @password
end

#portObject (readonly)




8
9
10
# File 'lib/agent_xmpp/client/client.rb', line 8

def port
  @port
end

#rosterObject (readonly)




8
9
10
# File 'lib/agent_xmpp/client/client.rb', line 8

def roster
  @roster
end

Instance Method Details

#add_delegate(delegate) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



43
44
45
# File 'lib/agent_xmpp/client/client.rb', line 43

def add_delegate(delegate)
  connection.add_delegate(delegate)
end

#connectObject

.….….….….….….….….….….….….….….….….….….….….….….….….….….



21
22
23
24
25
26
27
28
29
# File 'lib/agent_xmpp/client/client.rb', line 21

def connect
  while (true)
    EventMachine.run do
      @connection = EventMachine.connect(jid.domain, port, Connection, self, jid, password, port)
    end
    sleep(10.0)
    AgentXmpp.logger.warn "RESTARTING SERVER"
  end
end

#connected?Boolean

.….….….….….….….….….….….….….….….….….….….….….….….….….….

Returns:

  • (Boolean)


38
39
40
# File 'lib/agent_xmpp/client/client.rb', line 38

def connected?
  connection and !connection.error?
end

#did_acknowledge_add_contact(client_connection, response, contact_jid) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



164
165
166
# File 'lib/agent_xmpp/client/client.rb', line 164

def did_acknowledge_add_contact(client_connection, response, contact_jid)
  AgentXmpp.logger.info "CONTACT ADD ACKNOWLEDGED: #{contact_jid.to_s}"
end

#did_add_contact(client_connection, roster_item) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



174
175
176
# File 'lib/agent_xmpp/client/client.rb', line 174

def did_add_contact(client_connection, roster_item)
  AgentXmpp.logger.info "CONTACT ADDED: #{roster_item.jid.to_s}"
end

#did_authenticate(client_connection, stanza) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….…. authentication .….….….….….….….….….….….….….….….….….….….….….….….….….….



75
76
77
# File 'lib/agent_xmpp/client/client.rb', line 75

def did_authenticate(client_connection, stanza)
  AgentXmpp.logger.info "AUTHENTICATED"
end

#did_bind(client_connection, stanza) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



85
86
87
# File 'lib/agent_xmpp/client/client.rb', line 85

def did_bind(client_connection, stanza)
  AgentXmpp.logger.info "BIND ACKNOWLEDGED"
end

#did_connect(client_connection) ⇒ Object


AgentXmpp::Connection delegate .….….….….….….….….….….….….….….….….….….….….….….….….….…. connection .….….….….….….….….….….….….….….….….….….….….….….….….….….



57
58
59
# File 'lib/agent_xmpp/client/client.rb', line 57

def did_connect(client_connection)
  AgentXmpp.logger.info "CONNECTED"
end

#did_disconnect(client_connection) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



62
63
64
65
# File 'lib/agent_xmpp/client/client.rb', line 62

def did_disconnect(client_connection)
  AgentXmpp.logger.warn "DISCONNECTED"
  EventMachine::stop_event_loop
end

#did_not_authenticate(client_connection, stanza) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



80
81
82
# File 'lib/agent_xmpp/client/client.rb', line 80

def did_not_authenticate(client_connection, stanza)
  AgentXmpp.logger.info "AUTHENTICATION FAILED"
end

#did_not_connect(client_connection) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



68
69
70
# File 'lib/agent_xmpp/client/client.rb', line 68

def did_not_connect(client_connection)
  AgentXmpp.logger.warn "CONNECTION FAILED"
end

#did_receive_all_roster_items(client_connection) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



155
156
157
158
159
160
161
# File 'lib/agent_xmpp/client/client.rb', line 155

def did_receive_all_roster_items(client_connection)
  AgentXmpp.logger.info "RECEIVED ALL ROSTER ITEMS"   
  roster.select{|j,r| not r[:activated]}.each do |j,r|
    AgentXmpp.logger.info "ADDING CONTACT: #{j}" 
    client_connection.add_contact(Jabber::JID.new(j))  
  end
end

#did_receive_client_version_request(client_connection, request) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



188
189
190
191
# File 'lib/agent_xmpp/client/client.rb', line 188

def did_receive_client_version_request(client_connection, request)
  client_connection.send_client_version(request)
  AgentXmpp.logger.info "RECEIVED CLIENT VERSION REQUEST: #{request.from.to_s}"
end

#did_receive_client_version_result(client_connection, from, version) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….…. service discovery management .….….….….….….….….….….….….….….….….….….….….….….….….….….



181
182
183
184
185
# File 'lib/agent_xmpp/client/client.rb', line 181

def did_receive_client_version_result(client_connection, from, version)
  roster[from.bare.to_s][:resources][from.to_s][:version] = version \
    unless roster[from.bare.to_s][:resources][from.to_s].nil?
  AgentXmpp.logger.info "RECEIVED CLIENT VERSION RESULT: #{from.to_s}, #{version.iname}, #{version.version}"
end

#did_receive_presence(client_connection, presence) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….…. presence .….….….….….….….….….….….….….….….….….….….….….….….….….….



92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/agent_xmpp/client/client.rb', line 92

def did_receive_presence(client_connection, presence)
  from_jid = presence.from.to_s     
  from_bare_jid = presence.from.bare.to_s     
  if roster.has_key?(from_bare_jid) 
    roster[from_bare_jid.to_s][:resources][from_jid] = {} if roster[from_bare_jid.to_s][:resources][from_jid].nil?
    roster[from_bare_jid.to_s][:resources][from_jid][:presence] = presence
    client_connection.get_client_version(from_jid) if not from_jid.eql?(client_connection.jid.to_s) and presence.type.nil?
    AgentXmpp.logger.info "RECEIVED PRESENCE FROM: #{from_jid}"
  else
    AgentXmpp.logger.info "RECEIVED PRESENCE FROM JID NOT IN CONTACT LIST: #{from_jid}"        
  end
end

#did_receive_roster_item(client_connection, roster_item) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….…. roster management .….….….….….….….….….….….….….….….….….….….….….….….….….….



131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/agent_xmpp/client/client.rb', line 131

def did_receive_roster_item(client_connection, roster_item)
  AgentXmpp.logger.info "RECEIVED ROSTER ITEM"   
  roster_item_jid = roster_item.jid.to_s
  if roster.has_key?(roster_item_jid) 
    roster[roster_item_jid][:activated] = true 
    roster[roster_item_jid][:roster_item] = roster_item 
    AgentXmpp.logger.info "ACTIVATING CONTACT: #{roster_item_jid}"   
  else
    client_connection.remove_contact(roster_item.jid)  
    AgentXmpp.logger.info "REMOVING CONTACT: #{roster_item_jid}"   
  end
end

#did_receive_subscribe_request(client_connection, presence) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



106
107
108
109
110
111
112
113
114
115
# File 'lib/agent_xmpp/client/client.rb', line 106

def did_receive_subscribe_request(client_connection, presence)
  from_jid = presence.from.to_s     
  if roster.has_key?(presence.from.bare.to_s ) 
    client_connection.accept_contact_request(from_jid)  
    AgentXmpp.logger.info "RECEIVED SUBSCRIBE REQUEST: #{from_jid}"
  else
    client_connection.reject_contact_request(from_jid)  
    AgentXmpp.logger.info "RECEIVED SUBSCRIBE REQUEST FROM JID NOT IN CONTACT LIST: #{from_jid}"        
  end
end

#did_receive_unsubscribed_request(client_connection, presence) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



118
119
120
121
122
123
124
125
126
# File 'lib/agent_xmpp/client/client.rb', line 118

def did_receive_unsubscribed_request(client_connection, presence)
  from_jid = presence.from.to_s     
  if roster.delete(presence.from.bare.to_s )           
    client_connection.remove_contact(presence.from)  
    AgentXmpp.logger.info "RECEIVED UNSUBSCRIBED REQUEST: #{from_jid}"
  else
    AgentXmpp.logger.warn "RECEIVED UNSUBSCRIBED REQUEST FROM JID NOT IN CONTACT LIST: #{from_jid}"        
  end
end

#did_remove_contact(client_connection, response, contact_jid) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



169
170
171
# File 'lib/agent_xmpp/client/client.rb', line 169

def did_remove_contact(client_connection, response, contact_jid)
  AgentXmpp.logger.info "CONTACT REMOVED: #{contact_jid.to_s}"
end

#did_remove_roster_item(client_connection, roster_item) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



145
146
147
148
149
150
151
152
# File 'lib/agent_xmpp/client/client.rb', line 145

def did_remove_roster_item(client_connection, roster_item)
  AgentXmpp.logger.info "REMOVE ROSTER ITEM"   
  roster_item_jid = roster_item.jid.to_s
  if roster.has_key?(roster_item_jid) 
    roster.delete(roster_item_jid) 
    AgentXmpp.logger.info "REMOVED CONTACT: #{roster_item_jid}"   
  end
end

#reconnectObject

.….….….….….….….….….….….….….….….….….….….….….….….….….….



32
33
34
35
# File 'lib/agent_xmpp/client/client.rb', line 32

def reconnect
  AgentXmpp.logger.info "RECONNECTING"
  connection.reconnect(jid.domain, port)
end

#remove_delegate(delegate) ⇒ Object

.….….….….….….….….….….….….….….….….….….….….….….….….….….



48
49
50
# File 'lib/agent_xmpp/client/client.rb', line 48

def remove_delegate(delegate)
  connection.remove_delegate(delegate)
end