roothausen

  • Impressum
  • Administration
  • Kontaktformular
  • Jabber
  • Tagcloud
  • Twitter
  • Soup
  • Github

Entries tagged as im

Entries tagged as im

Related tags

computer android apple bad world blog blogging browser captcha changes cheatsheet code comic contentmanagement css datamining dns documentation eigenfaces encryption feedreader firefox fun google gui hardware howto html http ios iphone jabber java javascript life lighttpd linux linux&unix mail markup media misc mobile murphy networking newsbeuter opensource picture podcast politics presentation privacy programming psi rant realtime regular expression rest rss ruby s9y scala screenshot sdk security server shortys software spam stuff subnetting swing tail -f /var/log/life test tool truecrypt unix video web webdesign websockets webwide windows wordpress xml xslt zeitgeist coffee conference dslr free nikon photography science tv codec perl vp8

Smack: XMPP fuer java

23:08

Saturday, April 18. 2009

Da ich gerade an einem Projekt arbeite, dass XMPP auf Java verwendet, hab ich mir zu Testzwecken eine Klasse gebaut, die Smack verwendet und ein paar Moeglichkeiten der API nutzt. Es ist unter anderem moeglich sich zu verbinden, das Roster auszulesen und empfangene Nachrichten anzuzeigen. Da mir bei der offiziellen Dokumentation Beispiele gefehlt haben, die man auf einen Rutsch kopieren und bearbeiten kann, moechte ich hier ein wirklich lauffaehiges Beispiel veroeffentlichen. Ich hoffe, damit kann jemand was anfangen:


import java.util.Collection;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;

public class SmackTester {

        private XMPPConnection conn;
        private String username;
        private String password;
        private String server;

        public SmackTester() {
                // debug option
                XMPPConnection.DEBUG_ENABLED = false;

                username = "einuser";
                password = "einpasswort!";
                server = "jabber.foo.bar";

                makeConn();
                doConnect();
                makeRoster();
                chatAction();

                // wait ... (I know that's pretty ugly)
       
                while (conn.isConnected()) {
                        try {
                                Thread.sleep(Long.MAX_VALUE);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                }
        }

        // nothing interesting here
        public static void main(String[] args) {
                new SmackTester();
        }

        private void doConnect() {
                // let's connect
                try {
                        conn.connect();
                        conn.login(username, password, "someRessource");
                } catch (XMPPException e) {
                        System.err.println("Login failed!");
                        e.printStackTrace();
                        System.exit(1);
                }
                System.out.println("Login succesful!");
        }

        private void makeConn() {
                ConnectionConfiguration config = new ConnectionConfiguration(server,
                                5222);
                // pass some connection options
                config.setSASLAuthenticationEnabled(true);
                SASLAuthentication.supportSASLMechanism("PLAIN", 0);

                conn = new XMPPConnection(config);
        }

        private Roster makeRoster() {
                Roster roster = conn.getRoster();
                Collection<RosterEntry> entries = roster.getEntries();

                // print out all entries in roster
                System.out.println("---------- entries in roster -----------");
                for (RosterEntry entry : entries) {
                        System.out.println(entry);
                }
                System.out.println("---------- entries in roster -----------");

                // react to changes in roster
                roster.addRosterListener(new RosterListener() {
                        // called methods ...
                        public void entriesDeleted(Collection<String> addresses) {
                                // do stuff
                        }

                        public void entriesUpdated(Collection<String> addresses) {
                                // do stuff
                        }

                        public void presenceChanged(Presence presence) {
                                System.out.println("Presence changed: " + presence.getFrom()
                                                + " " + presence);
                        }

                        public void entriesAdded(Collection<String> arg0) {
                                // do stuff
                        }
                });

                return roster;

        }

        private void chatAction() {
                PacketTypeFilter filter = new PacketTypeFilter(Message.class);
                PacketListener myListener = new PacketListener() {

                        public void processPacket(Packet arg0) {
                                if (arg0 instanceof Message) {
                                        Message msg = (Message) arg0;
                                        System.out.println("Message: " + msg.getFrom() + " "
                                                        + msg.getBody());
                                }
                        }

                };

                // Register the listener.
                conn.addPacketListener(myListener, filter);
        }

        private void doDisconnect() {
                conn.disconnect();
                System.out.println("Disconnected");
        }

}
 
Posted by Sven Pfleiderer in computer | Comments (6) | Trackbacks (0)
Defined tags for this entry: computer, im, jabber, java, opensource, programming, software

PSI und das Thinklight

20:26

Wednesday, July 16. 2008

Schon lange moechte ich das Thinklight meines T60 zur Ankuendigung neuer Nachrichten benutzen. Leider gab es hierfuer bisher nur Plugins fuer Pidgin oder Kopete und die wollte ich beide nicht benutzen. Fuer meinen bevorzugten Jabberclient, PSI, gab es bisher kein solches Plugin. Also war es Zeit fuer mich selbst etwas passendes zu basteln. Herausgekommen ist dabei ein Shellscript und ein dreckiger Hack in den Einstellungen von PSI.

Hier kommt nun zu erst mal das Shellscript, das ich unter /usr/local/bin/thinkblink abgelegt habe. Es laesst das Licht 4 mal kurz aufblinken.


#!/bin/bash

for ((a=1; a <= 4 ; a++))
do
   echo "on" > /proc/acpi/ibm/light
   sleep 0.4
   echo "off" > /proc/acpi/ibm/light
   sleep 0.4
done
 

Damit man das Licht auch als User ansprechen kann, ist es notwendig dem entsprechenden /proc-Device die notwendigen Zugriffsrechte zu verpassen. Hierzu habe ich folgenden Eintrag in meiner /etc/rc.local eingerichtet:


chmod 666 /proc/acpi/ibm/light
 

Mit diesen beiden Teilen kann man duch die eingabe von /usr/local/bin/thinkblink das Thinklight schon als User blinken lassen. Was nun noch fehlt, ist die Anbindung in PSI. Ich habe hierzu das Audio-System von PSI missbraucht um das Script zu starten. Hier sind mal die Einstellungen:

Posted by Sven Pfleiderer in computer, misc | Comment (1) | Trackbacks (0)
Defined tags for this entry: computer, howto, im, jabber, misc
(Page 1 of 1, totaling 2 entries)

JavaScript String .fromCharCode

Calendar

« February '12 »
Mo Tu We Th Fr Sa Su
    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        

Quicksearch

Kategorien

  • XML computer
  • XML misc
  • XML web
  • XML zeitgeist


All categories

Archiv

  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • Recent...
  • Older...

Feeds

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Comments

Links

Retinacast
Shackspace
Yaxim
Radio Tux
Kais Blog
Blumen Pfleiderer
Alk
paxos
filzo
Marc Seeger
polzifer
Moritz Haarmann

Tags

android bad world blog blogging browser changes code comic computer contentmanagement encryption feedreader firefox free fun google gui hardware howto html im jabber java life lighttpd linux linux&unix markup media misc mobile murphy networking newsbeuter opensource picture politics presentation privacy programming regular expression rss ruby s9y scala screenshot sdk security server shortys software stuff tail -f /var/log/life test tool tv unix video web webdesign webwide windows xml zeitgeist

Lizenz

Creative Commons License - Some Rights Reserved