Dieser Abschnitt der praktischen Einführung bringt Ihnen den Quellcode der TestMessage-Clientanwendung näher.
Ein großer Teil des Codes implementiert die Windows-Schnittstelle, durch die Sie die Nachrichten versenden, empfangen und anzeigen können. Dieser Abschnitt der praktischen Einführung behandelt jedoch die Teile des Quellcodes, die sich auf QAnywhere beziehen.
Sie können den TestMessage-Quellcode unter Beispielverzeichnis\QAnywhere finden.
Es werden mehrere Versionen des TestMessage-Quellcodes zur Verfügung gestellt. Die folgenden Versionen sind für Windows 2000 und Windows XP verfügbar:
Eine unter Verwendung der Microsoft Foundation Classes erstellte C++-Version steht als Beispielverzeichnis\QAnywhere\Windows\MFC\TestMessage\TestMessage.sln zur Verfügung.
Eine auf der Basis des .NET Frameworks erstellte C#-Version steht als Beispielverzeichnis\QAnywhere\Windows\.NET\CS\TestMessage\TestMessage.sln zur Verfügung.
Eine Java-Version steht als Beispielverzeichnis\QAnywhere\Java\TestMessage\TestMessage.java zur Verfügung.
Die folgende Version wird für .NET Compact Framework bereitgestellt:
Eine auf der Basis des .NET Compact Frameworks erstellte C#-Version steht als Beispielverzeichnis\QAnywhere\Windows Mobile Classic\.NET\CS\TestMessage\TestMessage.sln zur Verfügung.
Zum Öffnen der Projektmappen-Dateien und zum Erstellen der .NET Framework-Projekte bzw. das .NET Compact Framework-Projekts ist Visual Studio 2005 oder höher erforderlich.
Dieser Abschnitt führt Sie durch den C#-Quellcode. Die zwei Versionen sind auf ganz ähnliche Art strukturiert.
Anstatt sich jede Zeile der Anwendung vorzunehmen, wählt diese Lektion bestimmte Zeilen aus, die für das Verständnis von QAnywhere-Anwendungen besonders nützlich sind. Die C#-Version wird verwendet, um diese Zeilen zu veranschaulichen.
Öffnen Sie die Version des TestMessage-Projekts, an der Sie interessiert sind.
Doppelklicken Sie auf die Projektmappen-Datei, um das Projekt in Visual Studio zu öffnen. Zum Beispiel ist Beispielverzeichnis\QAnywhere\Windows\.NET\CS\TestMessage\TestMessage.sln eine Projektmappen-Datei. Es gibt mehrere Projektmappen-Datei für verschiedene Umgebungen.
Stellen Sie sicher, dass der Projektmappen-Explorer geöffnet ist.
Sie können den Projektmappen-Explorer im Menü Ansicht öffnen.
Untersuchen Sie den Quelldateien-Ordner.
Es gibt zwei besonders wichtige Dateien. Die MessageList-Datei (MessageList.cs) empfängt Nachrichten und lässt Sie sie anzeigen. Die NewMessage-Datei (NewMessage.cs) ermöglicht es Ihnen, Nachrichten zu erstellen und zu versenden.
Im Projektmappen-Explorer öffnen Sie die Datei MessageList.
Untersuchen Sie die enthaltenen Namespaces.
Jede QAnywhere-Anwendung benötigt den iAnywhere.QAnywhere.Client-Namespace. Die Assembly, die diesen Namespace definiert, wird als DLL iAnywhere.QAnywhere.Client.dll bereitgestellt. Die Dateien befinden sich an den folgenden Positionen:
Für Ihre eigenen Projekte müssen Sie beim Kompilieren eine Referenz zu dieser DLL einfügen. Der Namespace wird aufgenommen, indem Sie die folgende Zeile am Anfang jeder Datei hinzufügen:
using iAnywhere.QAnywhere.Client; |
Sehen Sie sich die startReceiver-Methode an.
Diese Methode führt Initialisierungsaufgaben durch, die bei QAnywhere-Anwendungen gebräuchlich sind:
Erstellen Sie ein QAManager-Objekt.
_qaManager = QAManagerFactory.Instance.CreateQAManager(); |
QAnywhere stellt ein QAManagerFactory-Objekt zur Verfügung, um QAManager-Objekte zu erstellen. Das QAManager-Objekt verarbeitet QAnywhere-Messagingvorgänge, insbesondere den Empfang von Nachrichten (Nachrichten aus der Warteschlange abrufen) und das Senden von Nachrichten (Nachrichten in die Warteschlange stellen).
QAnywhere stellt zwei Typen von Manager-Objekten zur Verfügung: QAManager und QATransactionalManager. Wenn Sie QATransactionalManager verwenden, werden alle Sende- und Empfangsvorgänge innerhalb einer Transaktion durchgeführt, wodurch entweder alle oder keine Nachrichten gesendet bzw. empfangen werden.
Schreiben Sie eine Methode zur Bearbeitung der Nachrichten.
Die onMessage()-Methode wird von QAnywhere aufgerufen, um normale Nachrichten zu verwalten, die nicht vom System stammen. Die von ihr empfangene Nachricht ist als QAMessage-Objekt kodiert. Die QAMessage-Klasse und ihre untergeordneten Objekte (QATextMessage und QABinaryMessage) stellen Eigenschaften und Methoden zur Verfügung, die alle von QAnywhere-Anwendungen über eine Nachricht benötigten Informationen enthalten.
private void onMessage( QAMessage msg ) { Invoke( new onMessageDelegate( onMessageReceived ), new Object [] { msg } ); } |
Dieser Code verwendet die Invoke-Methode des Formulars, um das Ereignis auf dem Thread zu verarbeiten, der das darunterliegende Fenster steuert, damit die Benutzeroberfläche aktualisiert wird und die Nachricht anzeigt. Dies ist auch der Thread, der das QAManager-Objekt erzeugt hat. Das QAManager-Objekt kann, mit wenigen Ausnahmen, nur von dem Thread angesprochen werden, der ihn erzeugt hat.
Deklarieren Sie ein MessageListener-Objekt, so wie es in der Methode MessageList_Load definiert ist.
_receiveListener = new QAManager.MessageListener( onMessage ); |
Die OnMessage()-Methode wird immer aufgerufen, wenn eine Nachricht vom QAnywhere Agent empfangen und in die Warteschlange gestellt wird, die die Anwendung überwacht.
Nachrichten-Listener unterscheiden sich von der unter Szenario für Messaging mit Push-Benachrichtigungen beschriebenen Listener-Komponente. Die Listener-Komponente empfängt Benachrichtigungen, während Nachrichten-Listener-Objekte Nachrichten aus der Warteschlange abrufen.
Wenn Sie einen Nachrichten-Listener für eine Warteschlange festlegen, übermittelt der QAnywhere-Manager die in dieser Warteschlange eintreffenden Nachrichten an diesen Listener. Es kann nur ein Listener für eine gegebene Warteschlange festgelegt werden. Das Festlegen von NULL für den Listener löscht alle Listener dieser Warteschlange.
Die MessageListener-Implementierung empfängt Nachrichten asynchron. Sie können Nachrichten auch synchron empfangen; d.h. dass die Anwendung explizit nach Nachrichten in der Warteschlange sucht, vielleicht als Antwort auf eine Benutzeraktion wie die Schaltfläche "Aktualisieren" und nicht als Folge einer Benachrichtigung, wenn Nachrichten verfügbar sind.
Weitere Initialisierungsaufgaben sind:
Öffnen und starten Sie das QAManager-Objekt.
_qaManager.Open( AcknowledgementMode.EXPLICIT_ACKNOWLEDGEMENT ); _qaManager.Start(); |
Die AcknowledgementMode-Enumerationskonstanten legen fest, wie der Empfang von Nachrichten dem Absender bestätigt wird. Die EXPLICIT_ACKNOWLEDGEMENT-Konstante zeigt an, dass Nachrichten erst bestätigt werden, wenn ein Aufruf an eine der QAManager-Bestätigungsmethoden erfolgt.
Laden Sie etwaige Nachrichten, die in der Warteschlange stehen.
loadMessages(); |
Ordnen Sie einen Listener einer Warteschlange für zukünftige Nachrichten zu.
Der Listener wurde in der MessageList_Load()-Methode deklariert.
_qaManager.SetMessageListener( _options.ReceiveQueueName, _receiveListener ); |
Die options.ReceiveQueueName-Eigenschaft enthält die Zeichenfolge testmessage, also die TestMessage-Warteschlange gemäß der Einstellung im Fenster "Options" (Optionen) in der TestMessage-Anwendung.
Sehen Sie Sich die addMessage()-Methode in derselben Datei an.
Diese Methode wird immer dann aufgerufen, wenn die Anwendung eine Nachricht empfängt. Sie ruft Eigenschaften der Nachricht wie Antwort-Adresse, bevorzugter Name und Uhrzeit des Sendens (Zeitstempel) ab und zeigt diese Informationen auf der TestMessage-Benutzeroberfläche an. Die folgenden Zeilen fügen die ankommende Nachricht in ein QATextMessage-Objekt ein und extrahieren die Antwort-Adresse aus der Nachricht:
text_msg = ( QATextMessage )msg; from = text_msg.ReplyToAddress; |
Damit ist der kurze Einblick in einige der Hauptaufgaben abgeschlossen, die in der MessageList-Datei ausgeführt werden.
Öffnen Sie im Projektmappen-Explorer die Datei NewMessage.
Sehen Sie sich die sendMessage()-Methode an.
Diese Methode übernimmt die im Fenster New Message (Neue Nachricht) eingegebenen Informationen und erstellt ein QATextMessage-Objekt. Der QAManager stellt dann die Nachricht zum Versenden in die Warteschlange.
Hier sind die Zeilen, die ein QATextMessage-Objekt erstellen und seine ReplyToAddress-Eigenschaft einstellen:
qa_manager = MessageList.GetQAManager(); msg = qa_manager.CreateTextMessage(); msg.ReplyToAddress = MessageList.getOptions().ReceiveQueueName; |
Hier sind die Zeilen, die die Nachricht zum Versenden in die Warteschlange stellen. Die Variable dest
ist die Zieladresse, die als Argument an die Funktion übergeben wird.
qa_manager.PutMessage( dest, msg ); |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |