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
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
2) Mudando para o estado de Ocupado (Do Not Disturb)
Note que aqui vou adicionar ao status a frase “Hard work!”
3) Mudando para o estado de Ausente (Away)
Note que aqui vou adicionar ao status a frase “On the phone!”
4) Mudando para o estado de Disponível (Available)
Note que aqui vou adicionar ao status a frase “Free for chat”
5) Desconectando do Jabber (Off-line)
Enfim, chegamos ao fim dos posts sobre o básico de Ruby com XMPP.
O que aprendemos?
- Ruby com XMPP enviando e recebendo mensagens
- Ruby com XMPP Filetransfer: enviando e recebendo arquivos
- Ruby com XMPP: descobrindo o status dos seus contatos
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!


