Damit ihr seht, dass ich in letzter Zeit nicht ganz untätig war, möchte ich euch mein aktuelles Projekt vorstellen
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
Qt Instant Messenger
Re: Qt Instant Messenger
So dann fange ich mal an
Ubunutu 9.04: läuft
Xubuntu 9.10: läuft (auch wenn man zur Ausführung noch das dev-Packet braucht)
Dann gleich mal ein paar kleine Anregungen:
- Ich habe mich jetzt selber schon zwei mal in der Liste..ich kann sozusagen mit mir selber chatten. Das ist ja nicht das Problem sondern ich bekomme mich nicht aus der Liste gelöscht?
- Screensharing funktioniert auch, allerdings kann nur der, der shared das auch wieder beenden. Schöner wäre es doch wenn es beide beenden könnten. Ich kann als Zuschauer zwar das Fenster schließen, aber es kommt sofort wieder
(ist mir jetzt aufgefallen, da ich an zwei PCs in unterschiedlichen Stockwerken arbeite und ich dummerweise nicht an beiden Orten gleichzeitig sein kann )
Mein 2. PC wurde ohne Probleme erkannt und chatten funktioniert auch ohne Probleme. Layout schön einfach gehalten gefällt mir gut.
Wie das ganze außerhalb meines LANs funktioniert konnte ich aber noch nicht testen. Das ganze sieht auf jeden Fall recht interessant aus. So etwas hätten ich früher inner Schule gerne gehabt
gruß stampuhh
Ubunutu 9.04: läuft
Xubuntu 9.10: läuft (auch wenn man zur Ausführung noch das dev-Packet braucht)
Dann gleich mal ein paar kleine Anregungen:
- Ich habe mich jetzt selber schon zwei mal in der Liste..ich kann sozusagen mit mir selber chatten. Das ist ja nicht das Problem sondern ich bekomme mich nicht aus der Liste gelöscht?
- Screensharing funktioniert auch, allerdings kann nur der, der shared das auch wieder beenden. Schöner wäre es doch wenn es beide beenden könnten. Ich kann als Zuschauer zwar das Fenster schließen, aber es kommt sofort wieder
(ist mir jetzt aufgefallen, da ich an zwei PCs in unterschiedlichen Stockwerken arbeite und ich dummerweise nicht an beiden Orten gleichzeitig sein kann )
Mein 2. PC wurde ohne Probleme erkannt und chatten funktioniert auch ohne Probleme. Layout schön einfach gehalten gefällt mir gut.
Wie das ganze außerhalb meines LANs funktioniert konnte ich aber noch nicht testen. Das ganze sieht auf jeden Fall recht interessant aus. So etwas hätten ich früher inner Schule gerne gehabt
gruß stampuhh
NachDenkSeiten.de
Re: Qt Instant Messenger
Zum Ausführen braucht man das dev-Paket? Ist mir neu... werde ich mal testen.stampuhh hat geschrieben:Xubuntu 9.10: läuft (auch wenn man zur Ausführung noch das dev-Packet braucht)
Löschen kann man Kontakte noch nicht. Aber, dass du dich selbst siehst sollte nicht sein. Beim Empfangen des Broadcasts wird geprüft ob von einem internen Netzwerkgerät geschickt wurde. Kannst du den Fehler vielleicht reproduzieren, mir die Konsolenausgabe zeigen und dein Netzwerk kurz beschreiben?stampuhh hat geschrieben:- Ich habe mich jetzt selber schon zwei mal in der Liste..ich kann sozusagen mit mir selber chatten. Das ist ja nicht das Problem sondern ich bekomme mich nicht aus der Liste gelöscht?
Dachte, dass hätte ich schon implementiert... steht jetzt jedenfalls ganz oben auf der ToDo-List, ist auch nicht aufwendig zu implentierenstampuhh hat geschrieben:- Screensharing funktioniert auch, allerdings kann nur der, der shared das auch wieder beenden. Schöner wäre es doch wenn es beide beenden könnten. Ich kann als Zuschauer zwar das Fenster schließen, aber es kommt sofort wieder
EDIT: Bug gefixt
Warum nicht ssh -X? Oder vnc?stampuhh hat geschrieben:(ist mir jetzt aufgefallen, da ich an zwei PCs in unterschiedlichen Stockwerken arbeite und ich dummerweise nicht an beiden Orten gleichzeitig sein kann )
Sollte genauso funktionieren, nur, dass die Kontakte nicht automatisch erkannt werden und du die IP-Adresse eingeben musst.stampuhh hat geschrieben:Wie das ganze außerhalb meines LANs funktioniert konnte ich aber noch nicht testen.
Das war Anfangs auch der Grund so was zu schreibenstampuhh hat geschrieben:So etwas hätten ich früher inner Schule gerne gehabt
Vielen Dank für die Rückmeldung
Re: Qt Instant Messenger
Da bin ich mir nicht sicher. Ich habe die vorcompilierte Version auf den Rechner gezogen und wollte sie starten. Da kam eine Fehlermeldung von wegen irgendeiner Datei die fehlt. (glaube libqttest.so oder so in der Art). Dann wollte ich es selber compilieren und habe halt das dev packet installiert. Vorcompilierte Version noch mal getestet und siehe da, es gehtZum Ausführen braucht man das dev-Paket? Ist mir neu... werde ich mal testen.
ok, habe ich mich vielleicht falsch ausgedrückt. Ich tauche nicht automatisch bei mir selber auf, hat also denke mal nichts mit meinem Netzwerk zu tun. Ich habe das IP-Feld im Messenger getestet und meine eigene IP eingegeben. Darauf hin war ich halt selber in meiner Liste und zwar genau zwei mal (bei einem "enter"). Zwei mal "enter" => 4 mal in der eigenen Liste usw.Löschen kann man Kontakte noch nicht. Aber, dass du dich selbst siehst sollte nicht sein. Beim Empfangen des Broadcasts wird geprüft ob von einem internen Netzwerkgerät geschickt wurde. Kannst du den Fehler vielleicht reproduzieren, mir die Konsolenausgabe zeigen und dein Netzwerk kurz beschreiben?
Also das ganz normale vnc Programm was bei Ubuntu dabei ist lässt mich nicht. Habe mich mit sowas bisher noch nicht auseinander gesetzt. Wäre aber mal ne Idee...Warum nicht ssh -X? Oder vnc?
nachher oder morgen mal testen...sobald wieder Zeit da ist. Erst mal Schnee schiebenDachte, dass hätte ich schon implementiert... steht jetzt jedenfalls ganz oben auf der ToDo-List, ist auch nicht aufwendig zu implentieren
EDIT: Bug gefixt
gruß stampuhh
NachDenkSeiten.de
Re: Qt Instant Messenger
Hmm... kann sein, dass die testlib nur im dev-Paket enthalten ist. In Zukunft werde ich sowieso versuchen sie nicht zu verwenden. Rufe nämlich nur 1 Funktion daraus auf...stampuhh hat geschrieben:Da bin ich mir nicht sicher. Ich habe die vorcompilierte Version auf den Rechner gezogen und wollte sie starten. Da kam eine Fehlermeldung von wegen irgendeiner Datei die fehlt. (glaube libqttest.so oder so in der Art). Dann wollte ich es selber compilieren und habe halt das dev packet installiert. Vorcompilierte Version noch mal getestet und siehe da, es geht
Achso, das ist was andersstampuhh hat geschrieben:ok, habe ich mich vielleicht falsch ausgedrückt. Ich tauche nicht automatisch bei mir selber auf, hat also denke mal nichts mit meinem Netzwerk zu tun. Ich habe das IP-Feld im Messenger getestet und meine eigene IP eingegeben. Darauf hin war ich halt selber in meiner Liste und zwar genau zwei mal (bei einem "enter"). Zwei mal "enter" => 4 mal in der eigenen Liste usw.
Daran hab ich gar nicht gedacht, danke für den Hinweis.
In 9.04 ist da glaube ich ein Bug. Ansonsten beim Server unter System - Einstellungen - Entfernter Bildschirm einstellen.stampuhh hat geschrieben:Also das ganz normale vnc Programm was bei Ubuntu dabei ist lässt mich nicht. Habe mich mit sowas bisher noch nicht auseinander gesetzt. Wäre aber mal ne Idee...
Da kommen sicher noch ein paar ähnliche Meldungen dazu, bis zum nächsten Upload warte ich noch ein bisschen ^^stampuhh hat geschrieben:nachher oder morgen mal testen...sobald wieder Zeit da ist.
Wenn mir ein brauchbarer Projektname einfallen würde, könnte ich ein Sourceforge-Projekt erstellen...
EDIT: Habs mir überlegt
http://uploading.com/files/c5933778/mes ... u.tar.bz2/
Beseitigt unter anderem die erwähnten Fehler.
Hehe... geschneit hats bei uns schon seit Wochen nichtstampuhh hat geschrieben:Erst mal Schnee schieben
Re: Qt Instant Messenger
Das Programm macht ja schon einmal einen guten Eindruck, aber trotzdem sind mir ein paar Sachen aufgefallen
Bei mir hat es etwas gedauert bis ich die Textnachrichten rechts unten entdeckt habe. Irgendwie bin ich es wohl gewohnt das die rechts oben auftauchen... Abgesehen von diesen Meldungen erkennt man jedoch nicht wenn man angeschrieben wurde. Da würde ich es gut finden wenn man im Trayicon und/oder in der Kontaktliste erkennen würde wenn man neue Nachrichten erhalten hat.
Meistens wird das Programm beim Schließen des Fensters nicht beendet, sondern das Trayicon bleibt erhalten. Wenn jemand jedoch den Bildschirm mit mir geshared hat und ich sein Fenster beende wenn das Hauptfenster geschlossen ist wird das Programm beendet.
Auch das Spiel ist ganz nett, nur beendet es sich nicht wenn es eigentlich zu Ende ist sondern man kann immer weiter klicken und bekommt die Meldung das man gewonnen/verloren hat.
Das kann ich nicht bestätigen. Bei mir bin ich immer nur einmal in der Liste.stampuhh hat geschrieben:- Ich habe mich jetzt selber schon zwei mal in der Liste..ich kann sozusagen mit mir selber chatten.
Das gleiche Problem habe ich auch. Wenn ich die vorkompilierte Version unter Ubuntu 9.10 (64 bit) ausführen möchte kommt folgende Meldung:stampuhh hat geschrieben:Ich habe die vorcompilierte Version auf den Rechner gezogen und wollte sie starten. Da kam eine Fehlermeldung von wegen irgendeiner Datei die fehlt. (glaube libqttest.so oder so in der Art).
Ich hab es aber kontrolliert, die Datei gibt es eindeutig. Die selbst kompilierte Version funktioniert hingegen problemlos../messenger: error while loading shared libraries: libQtTest.so.4: cannot open shared object file: No such file or directory
Bei mir hat es etwas gedauert bis ich die Textnachrichten rechts unten entdeckt habe. Irgendwie bin ich es wohl gewohnt das die rechts oben auftauchen... Abgesehen von diesen Meldungen erkennt man jedoch nicht wenn man angeschrieben wurde. Da würde ich es gut finden wenn man im Trayicon und/oder in der Kontaktliste erkennen würde wenn man neue Nachrichten erhalten hat.
Meistens wird das Programm beim Schließen des Fensters nicht beendet, sondern das Trayicon bleibt erhalten. Wenn jemand jedoch den Bildschirm mit mir geshared hat und ich sein Fenster beende wenn das Hauptfenster geschlossen ist wird das Programm beendet.
Auch das Spiel ist ganz nett, nur beendet es sich nicht wenn es eigentlich zu Ende ist sondern man kann immer weiter klicken und bekommt die Meldung das man gewonnen/verloren hat.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
Re: Qt Instant Messenger
Das wurde in der letzten Version gefixt und sollte kein Problem mehr sein. Wobei ich noch überlege wie ich verhindere, dass jemand übers Internet eine Schleife zu sich selbst legt...Kerli hat geschrieben:Das kann ich nicht bestätigen. Bei mir bin ich immer nur einmal in der Liste.
Hmm... hast du vielleicht 64-bit und Qt sucht im falschen Verzeichnis? Egal, muss diese Testlib sowieso loswerden...Kerli hat geschrieben:Ich hab es aber kontrolliert, die Datei gibt es eindeutig. Die selbst kompilierte Version funktioniert hingegen problemlos.
Unterschiedliche Tray-Icons sind in Planung. Meine künstlerische Begabung erkennt man ja am jetzigen... ^^Kerli hat geschrieben:Bei mir hat es etwas gedauert bis ich die Textnachrichten rechts unten entdeckt habe. Irgendwie bin ich es wohl gewohnt das die rechts oben auftauchen... Abgesehen von diesen Meldungen erkennt man jedoch nicht wenn man angeschrieben wurde. Da würde ich es gut finden wenn man im Trayicon und/oder in der Kontaktliste erkennen würde wenn man neue Nachrichten erhalten hat.
Für die Chat-Fenster plane ich einen eigenen Tab im Hauptfenster. Diese werden dann entsprechend gekennzeichnet.
Danke für den Hinweis, 1 Zeile Code hat das erledigtKerli hat geschrieben:Meistens wird das Programm beim Schließen des Fensters nicht beendet, sondern das Trayicon bleibt erhalten. Wenn jemand jedoch den Bildschirm mit mir geshared hat und ich sein Fenster beende wenn das Hauptfenster geschlossen ist wird das Programm beendet.
Ist mir auch bekannt und (mehr oder weniger) erledigt.Kerli hat geschrieben:Auch das Spiel ist ganz nett, nur beendet es sich nicht wenn es eigentlich zu Ende ist sondern man kann immer weiter klicken und bekommt die Meldung das man gewonnen/verloren hat.
Ich weiß, dass es viel Aufwand ist die (nicht gerade kleine) Qt-Bibliothek auf mindestens zwei Rechnern zu installieren und zu testen. Deshalb bin ich für jede Kritik dankbar
Ich möchte nochmals darauf hinweisen, dass das Programm weit davon entfernt ist wirklich brauchbar zu sein und noch einige Macken (vor allem in der Fensterverwaltung) hat.
Re: Qt Instant Messenger
Gefällt mir.
Ich hätte noch Anregungen:
- Masterserver, der eine Liste mit allen Teilnehmern führt, die dann vom Client abgerufen werden kann(aber nicht muss).
- Qt unterstützt doch CSS, dann CSS'e doch mal das ganze in nen netten Look
- Verschlüsselung (z.b. die Clienten senden sich zuerst gegenseiting eine Uhrzeit und eine srand() Summe, auf deren Basis dann die Nachrichten ver/entschlüsselt werden.)
Wenn du irgendwie SVN/Projektwebsite/Downloadseite/Mirrorseite brauchst kannste dich bei mir melden
Ich hätte noch Anregungen:
- Masterserver, der eine Liste mit allen Teilnehmern führt, die dann vom Client abgerufen werden kann(aber nicht muss).
- Qt unterstützt doch CSS, dann CSS'e doch mal das ganze in nen netten Look
- Verschlüsselung (z.b. die Clienten senden sich zuerst gegenseiting eine Uhrzeit und eine srand() Summe, auf deren Basis dann die Nachrichten ver/entschlüsselt werden.)
Wenn du irgendwie SVN/Projektwebsite/Downloadseite/Mirrorseite brauchst kannste dich bei mir melden
Re: Qt Instant Messenger
Das liegt ganz weit in der Zukunft, daran wage ich noch gar nicht zu denken...Jside hat geschrieben:- Masterserver, der eine Liste mit allen Teilnehmern führt, die dann vom Client abgerufen werden kann(aber nicht muss).
Das liegt außerhalb meiner Fähigkeiten, da arbeite ich lieber mit Layouts, geht (fast) wie von alleinJside hat geschrieben:- Qt unterstützt doch CSS, dann CSS'e doch mal das ganze in nen netten Look
Für Design-Vorschläge zur Widget-Anordnung (und vielleicht etwas schönere Icons...) bin ich immer offen.
Qt unterstützt von sich aus SSL-Sockets. Einen SSL-Server gibts aber nicht, den müsste ich mir selber implementieren. Hab mich aber auch noch nicht wirklich damit beschäftigt. Eine Absturzsichere Fensterverwaltung ist mir wichtiger.Jside hat geschrieben:- Verschlüsselung (z.b. die Clienten senden sich zuerst gegenseiting eine Uhrzeit und eine srand() Summe, auf deren Basis dann die Nachrichten ver/entschlüsselt werden.)
Danke für das Angebot, aber ich habe anscheinend doch noch mehr Bugs als erwartet... vielleicht werde ich mal darauf zurückkommenJside hat geschrieben:Wenn du irgendwie SVN/Projektwebsite/Downloadseite/Mirrorseite brauchst kannste dich bei mir melden