Ruby com XMPP: descobrindo o status dos seus contatos

Havia prometido no meu últmo post que mostraria como fazer aplicações Web em tempo real usando XMPP.

Vou pedir um pouco de paciência para vocês, pois esqueci de colocar um conceito importante usado em qualquer cliente Jabber: o status dos seus contatos, para saber quem está on-line (available), off-line, away ou ocupado (do not disturb).

O código é muito simple, veja:

presence.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env ruby

require 'rubygems'
requirespan> 'xmpp4r'

# initial statement: connecting and login
client = Jabber::Client.new(Jabber::JID.new('neo@localhost/Home'))
client.connect('localhost', '5222')
client.auth('123456')
client.send(Jabber::Presence.new.set_type(:available))
# the code line below you change status:
# ":chat" for available, ":away" for away or ":dnd" for do not disturb
client.send(Jabber::Presence.new(:chat, 'Buddies presence!'))

# callback for incoming presence messages
# the "message" object has many methods, below, at this simple example,
# I'm using only four:
# - from: user who has just changed his/her status
# - type: if "unavaliable" the user quited from Jabber
# - show: online user is "away" or "do not distub"
# - status: user information "What are you doing now?"
client.add_presence_callback do |message|
 
  from = (!message.status.nil? && message.status.to_s != '') ? "#{message.from} - (#{message.status})" : message.from
 
  if !message.type.nil? && message.type.to_s == 'unavailable'
    puts "#{from} - is off-line"
  elsif !message.show.nil? && message.show.to_s == 'away'
    puts "#{from} - is \"away\" now"
  elsif !message.show.nil? && message.show.to_s == 'dnd'
    puts "#{from} - is \"do not disturb\" now"
  else
    puts "#{from} - is available now"
  end

end

main_thread = Thread.new {
  while true do
  end
}

main_thread.join

@client.close

Importante: pra mudar o status via Ruby veja o comentário acima da linha 13 do script.

 

Executando o script

 

 shell> ruby presence.rb

 

 

Podemos agora brincar com o cliente Jabber mudando o status do usuário e veremos as saídas do script presence.rb

1) Conectando no Jabber

 

Usuário conectado ao Jabber

Usuário conectado ao Jabber



 

 

2) Mudando para o estado de Ocupado (Do Not Disturb)

 

Note que aqui vou adicionar ao status a frase “Hard work!”

 

Mudando o status para ocupado dizendo "Hard work!"

Usuário mudou seu status para ocupado dizendo 'Hard work!'



 

 

3) Mudando para o estado de Ausente (Away)

 

Note que aqui vou adicionar ao status a frase “On the phone!”

 

Mudando o status para ocupado dizendo "Hard work!"

Usuário mudou seu status para ausente (away) dizendo 'On the phone!'



 

 

4) Mudando para o estado de Disponível (Available)

 

Note que aqui vou adicionar ao status a frase “Free for chat”

 

Usuário mudou seu status para Disponível (avalilable) dizendo 'Free for chat'

Usuário mudou seu status para Disponível (avalilable) dizendo 'Free for chat'



 

 

5) Desconectando do Jabber (Off-line)

 

Usuário desconectou do Jabber (Offline)

Usuário desconectou do Jabber (Offline)



 

 

Enfim, chegamos ao fim dos posts sobre o básico de Ruby com XMPP.

O que aprendemos?

Com esse conhecimento podemos ir com uma bagagem mais completa para desenvolver aplicações Web em tempo real, utilizando apenas JavaScript e o protocolo XMPP

Deixe seu comentário e até a próxima!