
Schon seit längerer Zeit arbeite ich an einem Instant Messenger. Früher hab ich noch mit SDL und SDLNet gearbeitet, da das aber ziemlich umständlich (und das GUI ziemlich hässlich) war, hab ich inzwischen auf Qt umgestellt.
An dieser Stelle mal großes Lob an die Qt-Entwickler: Die Bibliothek ist gigantisch und trotzdem einfach zu benutzen. Die Dokumentation sollten sich andere (auch bzw. ganz besonders ich...) zum Vorbild nehmen. Qt-Creator ist die beste IDE die ich kenne. Unglaublich schnelle Intellisense, automatische Einrückungsanpassungen, Subversion/git integriert, eingebaute Referenz, etc. Kann ich nur jedem empfehlen.
Da mir Skype auf Linux ziemlich gut gefällt, hab ich mein GUI ziemlich ähnlich aufgebaut. Es gibt also ein Hauptfenster in dem alle verbundenen Personen mit Messenger aufgelistet werden und man auch seinen Namen ändern kann. Ein Textfeld zur Eingabe der IP ist ebenfalls da.
Natürlich kann man auch (UTF-16) Nachrichten verschicken. Der ChatLog unterstützt auch HTML-Tags für Schriften, Links und Bilder (müssen aber lokal gespeichert sein). Hat man das entsprechende Chat-Fenster nicht offen, erscheint ein nerviges kleines Popup am rechten unteren Bildschirmrand, dass beim Draufklicken das Fenster öffnet

Dazu hab ich noch ein paar Extra-Features eingebaut. Screen-Sharing ist möglich, eine entsprechend schnelle Verbindung ist Voraussetzung für eine erfolgreiche Übertragung. Mit TicTacToe hab ich auch ein kleines Spiel eingebaut, nichts aufregendes, eher zum Testen. Dateien verschicken kann man auch. Bei einigen Sachen fehlen noch die Dialoge (z.B. ob man denn wirlkich die Datei empfangen oder spielen will).
Wenn man auf das 'X' im Hauptfenster klickt wird der Messener nicht wirklich geschlossen sondern das Fenster nur versteckt. Es kann über einen Klick auf den Tray wieder sichtbar gemacht werden. Beenden kann man es über einen Rechtsklick auf den Tray oder File-Quit in der Menüleiste. Sollte man wirklich ein System haben, dass keine Trays unterstützt wird das Programm natürlich beendet. Das Tray-Bild... das war eine 30 Sekunden-GIMP-Aktion ^^ Für Vorschläge bin ich offen.
So... zum technischen. Jeder Messenger ist sowhol Server, als auch Client. D.h. der Benutzer muss Port 1338 in der Firewall öffnen und ggfs. am Router Portweiterleitung konfigurieren. Kontakte im lokalen Netzwerk werden über UDP-Broadcasts automatisch erkannt. Proxy konnte ich leider nicht testen. Ich gehe nur in der Schule über Proxy ins Internet und IM stehen bei den Admins auf der Abschussliste...
Ich habe hauptsächlich auf Ubuntu getestet. Mein etwas in die Jahre gekommener FreeBSD-Rechner brauchte am Ende über 40 Minuten zum Kompilieren...
Auf Windows bekommt man noch ein Konsolenfenster eingeblendet. Muss wohl an der Test-Bibliothek liegen, die ich aber für Screen-Sharing brauche.
Was wird zum Ausführen gebraucht:
* Ubuntu: libqtcore4, libqt4-network (ist glaube ich sogar eine Abhängigkeit)
* Windows: Qt-Framework (http://qt.nokia.com/downloads)
* FreeBSD 8: qt-4.5.2 (oder ähnlich)
Was wird zum Kompilieren gebraucht:
* Ubuntu: libqt4-dev
* Windows: Qt-SDK (nehmt aber lieber das Framework mit meiner vorkompilierten Version)
* FreeBSD 8: das selbe wie oben
Kompilieren:
* ins Code-Verzeichnis wechseln
* Projekt-Datei erstellen: qmake -project
* folgende Zeilen zur *.pro Datei hinzufügen:
QT += network
QT += testlib
* Makefile erstellen: qmake
* Makefile ausführen: make
Unter Windows werden Unterordner debug und release erstellt. Die .exe von dort in den übergeordneten Ordner kopieren, da sonst die Pfade zum Tray etc. nicht mehr stimme.
Dem Code liegt zwar ein kleines FAQ bei, hier aber trotzdem die wichtigsten Punkte zusammengefasst:
Q: Funktioniert das auch übers Internet?
A: Jein. Es gibt keinen zentralen Server, daher muss man die IP des Gegenübers wissen. Screensharing übers Internet ist aufgrund mangelnder Bandbreite ehrlich gesagt unbrauchbar.
Q: Welche Plattformen werden unterstützt?
A: Ich verwende nur C++ und Qt. Daher sollte das Programm auf allen von Qt unterstützten Plattformen funktionieren.
Q: Ist das sicher?
A: Nein. Alle Nachrichten werden in Klartext übertragen und Kontakte sehen die IP. Das ist ein Punkt, den ich sicher noch verbessern werde. Aus bequemlichkeit beim Testen hab ich sie vernachlässigt.
Q: Jemand ist in einem anderen Subnetz und wird nicht erkannt. Kann man das ändern?
A: Subnetze gibt es nicht ohne Grund. Es funktioniert nicht und ich werde es auch nicht implementieren. Es wäre ohnehin unglaublich schwierig (IP-Pakete selbst zusammenbauen...) und höchst wahrscheinlich systemabhängig.
Q: Empfängst du meine Nachrichten?
A: Nein. Die Nachrichten werden nur an die Personen im Chat geschickt.
Q: Und wo ist die Dokumentation?
A: Wird (hoffentlich...) bald da sein...
Q: Auf meinem Handy sieht das Programm hässlich aus. Kann ich das ändern?
A: Jeder kann den Quellcode ändern. Ich hab (leider) kein Maemo/Symbian Handy mit dem ich testen könnte.
Download:
* Quellcode + vorkompiliert für Ubuntu: http://uploading.com/files/43cd8216/mes ... u.tar.bz2/
* Quellcode + vorkompiliert für Windows: http://uploading.com/files/133f53d6/mes ... ndows.zip/
* nur Quellcode: http://uploading.com/files/m9fbm9d3/mes ... ource.zip/
UbuntuOne-Benutzer können mir ihre Mail-Adresse geben, dann können sie automatisch mit meinem UbuntuOne-Share synchronisieren.
Anregungen, Wünsche, Beschwerden gewünscht
