Bluetooth – lokaler Server J2ME


Erzeugen eines lokalen Servers

Die Methode init() erwartet den Nicknamen sowie das Objekt, welches das BTListener-Interface implementiert, als Übergabeparameter. Beim Initialisieren wird die Blacklist aus dem Recordstore geladen, die Methode setzt die Sichtbarkeit des eigenen Geräts auf GIAC (General / Unlimited Inquiry Access Code) und initialisiert den JABWT Stack. Anschliessend wird der Thread für die Serverfunktionalität, der in der run() – Methode implementiert ist, gestartet.

Die run() – Methode der Klasse BluetoothLayer implementiert die Serverfunktionaliät der Midlet-Suite. Über den Aufruf von Connector.open() wird ein StreamConnectionNotifyer erzeugt, durch die Übergabe der eigenen UUID wird der eigene Service eindeutig identifiziert, die Attribute “authenticate=false” und “authorize=false” setzten die Sicherheitseinstellungen der Verbindung. Die Verbindung muss also vom Benutzer weder authorisiert ( Pairing ), noch bestätigt werden. Ausserdem wird der Service-Name “name=n3po” festgelegt.

Ein ServiceRecord-Template wird an den eigenen Dienst angepasst indem der ServiceRecord ServiceAbility auf 0xFF (Service Status Full Available) gesetzt sowie die ServiceDescription ( 0x0101 ) mit dem Wert des Profils bzw. Kennworts versehen wird.

Durch das Setzen der Service Description wird es dem Client ermöglicht, bereits vor einem Connect zu überprüfen, ob der Server als Kommunikationspartner überhaupt in Frage kommt.

Solange das „done“ – Flag nicht gesetzt ist wird in einer Schleife die blockierende Methode acceptAndOpen() des StreamConnectionNotifyer – Objekts aufgerufen, die auf die Verbindung durch einen Client wartet. Falls das Programm gerade mit einem anderen Gerät kommuniziert, verhindert das „paused“- Flag den Aufruf von acceptAndOpen() solange, bis die aktive Verbindung durch einen der Kommunikationspartner getrennt wurde.

Nachdem ein Client verbunden hat, wird das RemoteDevice-Objekt der StreamConnection mit dem Aufruf RemoteDevice.getRemoteDevice( c ) erzeugt, wobei c für das StreamConnection-Objekt steht.

Wenn die Bluetooth-MAC des Geräts nicht im knownDevices – Vector gefunden wurde oder die Kommunikation mit dem Gerät zuvor durch den Benutzer verboten wurde ( blackListedDevices ), wird das Flag paused auf true gesetzt, damit die weitere Aktivität des Bluetoothlayers ( Service- und Device Discovery ) vorerst gestoppt wird, solange die Verbindung zwischen den beiden Geräten besteht. Mit Hilfe der erzeugten RemoteDevice und der StreamConnection wird nun ein EndPoint – Objekt erzeugt und der Sender bzw. Receiverthread vom Typ BTSender bzw. BTReceiver erzeugt und sofort gestartet.

Über die Methoden setActiveRemoteDevice() und setActiveEndpoint() wird der aktuelle Kommunikationspartner des BluetoothLayers festgelegt, danach das RemoteDevice in die knownDevices – Liste eingehängt. Der Vector knownDevices enthält die Geräte, mit denen bereits kommuniziert wurde, diese werden dann im weiteren Verlauf bei der Device – und Service Discovery ignoriert.

Die knownDevices werden jedoch nicht persistent gespeichert, so dass nach einem Neustart des Programms diese Geräte wieder als Kommunikationspartner in Betracht gezogen werden – im Gegensatz zu den Geräten, deren Bluetooth-MAC in der blackList persistent abgespeichert werden. Falls während der Verbindung durch den Client eine Exception auftritt, wird die StreamConnection geschlossen.



Ähnliche Artikel zu "Bluetooth – lokaler Server J2ME":


Wenn Du noch Fragen zum Thema Bluetooth – lokaler Server J2ME hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an:

Wie ist DEINE Meinung zum Thema Bluetooth – lokaler Server J2ME?

Schreib sie einfach als Kommentar:




karbacher.org © Bluetooth – lokaler Server J2ME