Die Community zu .NET und Classic VB.
Menü

ActiveVB Messenger

 von 

Übersicht 

In dieser Rubrik geht es um das Messenger-Projekt von ActiveVB.
Um zu sehen, wer gerade online ist, kann dieses Script verwendet werden.

Mit freundlichen Grüßen,
Jochen Wierum

Die Geschichte  

Nachdem mehrere Besucher von ActiveVB einen Chat vermissten, entstanden kleinere Projekte, die meist von einer Person realisiert wurden. Alle diese Projekte hatten Eines gemeinsam: Es sollten die Besucher in Echtzeit verbunden werden. Das ActiveVB-Team bemerkte das große Interesse daran und so wurde beschlossen, ein Open-Source-Projekt ins Leben zu rufen, an dem allen Besuchern von ActiveVB die Mitarbeit freigestellt wurde. Wie es zu erwarten war, wurde die Idee von der Mehrzahl der Besucher mit Begeisterung aufgenommen, die Bereitschaft zur Mitarbeit hielt sich jedoch in Grenzen. In einem extra dafür eingerichteten Forum kristallisierte sich dann eine Gruppe von ca. 15 Mann heraus, die das Projekt in die Wege leiteten. Leider wurde versäumt, eine klare Schnittstellendefinition zu schreiben, so dass ein etwas größeres Chaos entstand. Nun, nach fast einem Jahr Arbeit, können wir mit Stolz berichten, dass es uns gelungen ist, ein Programm zu schreiben, welches den Kontakt zu anderen Besuchern ActiveVBs in Sekunden ermöglicht - und einfach Spaß macht.

Das Ziel  

Als Ziel nahmen wir uns vor, vorerst ein einfaches Chatprogramm zu schreiben. Aus verschiedenen Gründen konnten wir jedoch keinen umfangreichen Server auf einem der ActiveVB-Server aufsetzen. Wir mussten uns daher auf eine serverseitige Liste aller angemeldeten Besucher beschränken. Der Rest läuft peer to peer ab. Das bedeutet, dass jeder Client mit jedem Client, mit dem er sich gerade unterhält, direkt verbunden ist. Außerdem wollten wir ein flexibles und erweiterbares Protokoll schreiben, auf dem der Chat basiert. Später sollte auch eine Funktion eingebaut werden, die es ermöglicht, zwei hinter einer Firewall sitzende Besucher über einen dritten Besucher, der von der Problematik nicht betroffen war, zu verbinden. Dieses Funktionsmerkmal funktioniert mittlerweile ausgezeichnet. Die nachfolgende Liste war die Grundidee des Messengers und ist fast in dieser Form im Messengerforum als eines der ersten Postings zu lesen:

  • Protokoll:
    • Das Protokoll sollte auf einer TCP/IP-Verbindung aufsetzen
    • Das Protokoll sollte von Anfang an ein bestimmtes Format unterstützen (Maskierung!)
      Beispiel: NachrichtID|Param1|Param2|...|ParamN||END
      Texte kodiert mit '\', '\' kodiert mit '\\'
      so wäre es später einfacher, das Protokoll um weitere Befehle zu ergänzen
    • Das Protokoll sollte Verschlüsselung unterstützen
  • Server:
    • Der Server besteht aus einem Script, welches in Perl implementiert wird
    • Aufgerufen wird es über einen HTTP-Request auf Port 80
    • Die Rückgabe erfolgt in Plaintext
    • Wie genau das Script funktionieren wird, muss noch geklärt werden. Fakt ist, dass es (eine) IP(s) verwalten muss, evtl. auch Authentifikation. Mehr sollte es nicht tun. Die Clients sollten so viel wie möglich untereinander absprechen.
  • Funktionen:
    • Der Chat soll am Anfang die Funktion bieten, mit einer Person zu kommunizieren
    • Ein Chat mit mehreren Personen soll schnell folgen, oder direkt implementiert sein
    • Eine Möglichkeit zum Versenden von Dateien sollte geplant werden (am Anfang wird sie nicht benötigt)
  • Oberfläche & Steuerelemente:
    • Die Oberfläche sollte möglichst einfach und übersichtlich sein. Dabei sollte es verhindert werden, eine aufwendige Oberfläche à la *IRC zu schaffen und sich eher an "einfachen" Messengern wie Y!, MSN oder ICQ Lite zu orientieren
    • Um Streit zu vermeiden, sollte an Fremdsteuerelemente gespart werden. Ausnahmen bestätigen die Regel
    • Die Obergläche sollte so unabhängig wie möglich laufen, so, dass sie an die "Kernel" gebunden ist und nicht umgekehrt
  • Sonstiges
    • Offlinemessages werden nicht serverseitig gespeichert, sie werden versendet, wenn beide User online sind
      (Bisher wurde über dieses Funktionsmerkmal noch nicht gesprochen)
  • Grobe Funktionsweise:
    • Der Client verbindet sich mit dem Server, meldet sich an und holt (speichert!) sich alle IPs, trägt sich selbst ein
    • Dann sendet er allen anderen IPs die Nachricht, er sei jetzt online
    • Diese speichern sich die IP
    • Alle n Minuten verbindet jeder Client an jede gespeicherte IP und prüft, ob die Gegenseite noch aktiv ist. Wenn nicht, fliegt er aus der Liste.
      PROBLEM: Die IP muss auch aus dem Perl-Script gelöscht werden. Am besten nur einmal!
  • Source:
    • Das Projekt sollte 100% Open-Source sein.
    • Da der Code durchaus auch gelesen wird, ist es sinnvoll, einheitliche Einrückungen, Variablenbezeichnungen und Kommentare zu verwenden. Außerdem sollte er in einer Sprache (Deutsch/Englisch) kommentiert werden. Ebenso sollten die Variablen einen verständlichen Namen haben (strEmpfangen/strReceived)...

Der erste Satz, der über das Messengerprotokoll übermittelt wurde, kam übrigens von Konrad L. M. Rudolph und war an Björn Tschörtner gerichtet. Er lautete: "Vodka, Dude!"

Das Team  

Dies ist eine alphabetisch geordnete Liste aller an der Entwicklung beteiligten Personen:

  • Claus von der Burchard
  • Klaus Langbein
  • Kai Liebenau
  • Jörg Ohligschläger
  • Helge Rex
  • Konrad Rudolph
  • Udo Schmidt
  • Björn Tschörtner
  • Christoph von Wittich
  • Jochen Wierum
  • Benjamin Wilger

Warum sollte ich einen Chat verwenden?  

Auf ActiveVB wird niemand dazu gezwungen, den Chat zu verwenden! Hauptbestandteil ist das Forum, und das wird es immer bleiben! Dennoch bietet der Chat einzelne Vorteile:

  • Direkter Kontakt zu einzelnen Besuchern
  • Private, verschlüsselte Unterhaltungen
  • Austausch von Quellcode, ohne dass Dritte diesen zu Gesicht bekommen

Hier die Funktionsliste:

  • Chat mit einer oder mehreren Personen
  • Chat durch einen Router hindurch
  • Austausch von Dateien
  • Austausch von Quellcode. Dieser wird formatiert auf der anderen Seite angezeigt. Ganz wie in VB...
  • Verschiedene Besucherstatus mit benutzerdefinierten Nachrichten: Online, Abwesend, Beschäftigt, ...
  • Chatverlauf für jeden Kontakt
  • Friend- und Blacklist
  • Audiovisuelle Benachrichtigung beim Eintreffen neuer Nachrichten
  • Schnelle Verschlüsselung
  • Automatischer Login mit Benutzernamen und Passwort
  • Automatisches Starten mit Windows
  • Automatische Konfiguration des eigenen Routers

Bilder  

Ein paar Bilder wollen wir Ihnen natürlich nicht vorenthalten.


Abbildung 1: Das Hauptfenster


Abbildung 2: So sieht eine Unterhaltung aus


Abbildung 3: Der Austausch von Code

Der Quellcode  

Das Programm soll Anreiz und Ideen bieten. Außerdem soll jeder in der Lage sein, das Projekt zu erweitern. Der Quellcode ist daher offengelegt. Er darf beliebig heruntergeladen und genutzt werden. Sollte er weiterverteilt werden, bitten wir allerdings auf einen Verweis auf ActiveVB.
Neben der IDE (die den Compiler beinhaltet) werden keine weiteren Programme zur Kompilierung oder Nutzung benötigt. Einzelne Routinen wurden mit Assemblerfunktionen ausgestatten, unter anderem die Verschlüsselung. Diese sind keineswegs bösartig und sollen keine Barrieren darstellen, sondern einen Geschwindigkeitszuwachs ermöglichen.
Anders ist das beim Quellcode des Serverscripts. Hier wird an einzelnen Stellen auf den Club von ActiveVB zugegriffen. Diese Stellen wurden in ein eigenes Modul ausgelagert und sind hier ersetzt worden. Das Serverscript ist in Perl geschrieben. Zur Ausführung wird ein Webserver wie der Apache oder der IIS benötigt. Außerdem ist Perl und Grundkenntnisse in jener Sprache natürlich eine Grundvoraussetzung. Das Script funktioniert sowohl unter Linux, als auch unter Windows.

Download Quellcode ActiveVB Messenger 

(Die Datei enthält auch sämtliche Kompilate; diese wurden mit VB6 SP6 erstellt)

Download Quellcode Serverscript 

Firewalls und Router  

Der Messenger ist mittlerweile in der Lage, nach außen hin über einen Gateway mit anderen Besuchern, die sich hinter Firewalls oder Routern befinden, zu kommunizieren. In einer der nächsten Versionen wird aller Voraussicht nach ein HTTP-Proxysupport enthalten sein. Dennoch würden wir uns sehr freuen, wenn Sie das Netzwerk unterstützen würden, indem sie den Port 1500 freischalten bzw. routen, sodass Sie im Zweifelsfall sogar selbst als Proxy fungieren können. Der dabei entstehende Traffic hält sich stark in Grenzen! Dateien werden übrigens nicht über Proxys versendet.

Änderungskatalog  

  • Version 1.1.70 (01.02.2006)
    • Neues Codeboard
    • Neue Message History
    • Neue Icons
    • Verzeichnis für eingehende Dateien auf "Eigene Dateien\Meine empfangenen Dateien" umgestellt
    • Einstellungspfad auf "%Anwendungsdaten%\ActiveVB\Messenger" geändert
    • Ein paar Tippfehler korrigiert
    • Viele kleine Verbesserungen am Quellcode
    • Viele gemeldete Fehler behoben
    • Mehrere Änderungen an der Verbindungskomponente
    • Bisher nicht implementierte kleine Funktionen implementiert
    • z.Z. nicht nutzbare Funktionen deaktiviert
    • Unterstützung für Fritz!Box
    • Popup-Infos beim Anmelden eines Friend-Kontakts hinzugefügt.
    • Abbrechen-Schaltfläche in Statusnachricht-Dialog eingeführt

    Zur Übernahme der alten Einstellungen wechseln Sie in den Ordner mit den eigenen Anwendungsdaten und verschieben Sie den Inhalt der Ordners "AVBM" in "ActiveVB\Messenger". Empfangene Dateien werden nun unterhalb von "Eigene Dateien\Meine Empfangenen Dateien" gespeichert.

  • Version 1.1.44 (07.03.2005)
    • Fehler beim Schließen des Einstellungsdialogs behoben
    • Einstellungsmöglichkeiten ohne Funktion (temporär) deaktiviert
    • "Minimiert starten"-Einstellung implementiert
    • "Immer im Vordergrund"-Einstellung implementiert
    • "Abbrechen"-Schaltfläche im Nachrichtendialog hinzugefügt
    • Einige kleinere Fehler behoben
  • Version 1.1 (01.01.2005)
    • Basisfunktionen

Bekannte Probleme  

Neben kleineren Kinderkrankheiten ist im Moment nur ein Bug wirklich akut:
Die Statusnachrichten werden ohne eine eindeutigen Kennzeichnung versendet. Es ist daher möglich, dass zwei widersprüchliche Nachrichten im Kreis laufen, weil nicht erkannt wird, dass exakt die gleiche Nachricht schon einmal verarbeitet wurde. Dies ist an schnellen Wechseln des Status einzelner Besucher zu beobachten.

Download  

Jeder Besucher von ActiveVB ist herzlich eingeladen, den Messenger zu installieren und zu verwenden. Einzige Voraussetzung hierfür ist ein Club-Account bei ActiveVB, der kostenlos angelegt werden kann. Nach einer Kolumne von Konrad L. M. Rudolph entschieden wir uns dafür, das Setup vorerst ohne Runtimes auszuliefern. Der Messenger wird zur Zeit mit VB6 SP6 kompiliert. Die entsprechenden Runtimes sind bei Microsoft erhältlich. Nach der Installation der Runtimes sollte noch der KB Fix 896559 installiert werden. Außerdem wird MSXML4 benötigt, welches ebenfalls bei Microsoft (msxml4.msi) heruntergeladen werden kann.

Download des ActiveVB Messengers 1.1.70 als Setup 

(Vorsicht! Der Installer wurde lediglich auf Windows XP Service Pack 2 getestet)
Ein Webinstaller für die aktuelle Version wird folgen.