SandUhr besitzt eine umfangreiche CORBA-Schnittstelle. Damit kann man auch in eigenen Skripten und Programmen neue Uhren erzeugen oder auf bestehende Uhren zugreifen. Die Schnittstelle erlaubt es sogar, eigene Alarmmechanismen an das Programm anzuschließen. Unten findet sich als Beispiel eine Methode, um die Alarmmeldung per Email zuzustellen.
CORBA ist ein komplexes Gefüge, das dazu dient unterschiedliche Programmteile auch dann miteinander verbinden zu können, wenn sie möglicherweise in unterschiedlichen Programmiersprachen geschrieben sind, oder auf unterschiedlichen Rechnern eines Netzwerkes laufen. Die volle Dosis an Schlagworten findet sich auf der offiziellen CORBA-Webseite unter www.corba.org.
CORBA ist objektorientiert. Ein CORBA-Server implementiert Objekte und Kunden können (vom Server vorgegebene) Anforderungen an den Server senden, um bestimme Aufgaben zu erledigen. SandUhr implementiert zwei Klassen von CORBA-Objekten:
SandUhr::Timer-Objekte. Diese entsprechen den sanduhrförmigen Fenstern auf dem Bildschirm. Sie stellen Anfragen zur Verfügung, um die Einträge aus dem Eigenschaftendialog der Uhr zu setzen oder abzufragen.
SandUhr::TimerFactory-Objekte. Jede Kopie des SandUhr-Programms implementiert genau ein TimerFactory-Objekt. Das entspricht im wesentlichen dem Kontrollfenster, das man in dem Menü der Uhren öffnen kann. Die Hauptaufgabe dieses Objektes ist es, neue Uhren zu erzeugen.
Die CORBA-Unterstützung von SandUhr ist mittels
ORBit realisiert. Dies ist der
Standard-CORBA-ORB des GNOME-Projekts. Informationen über
ORBit gibt es auf der ,
Die Alarmmethoden von SandUhr werden durch Klassen
beschrieben, die von SandUhr::AlarmAction
abgeleitet sind. Drei solcher Klassen sind vordefiniert und
werden direkt von SandUhr implementiert.
Alle Alarmmethoden verwenden die folgenden Attribute und
Funktionen.
Popup-Fenster: Falls dieses Attribut den Wert TRUE hat,
wird die Alarmmeldung nicht nur durch Aufruf der
Deliver()-Funktion zugestellt, sondern
SandUhr öffnet zusätzlich noch ein Popup-Fenster.
Anschließen von Alarmmechanismen: Diese Methode wird von dem Timer-Objekt aufgerufen, bevor es
auf das AlarmAction-Objekt auf
irgendeine andere Weise zugreift. Die Funktion kann
z.B. verwendet werden, um ein "reference
counting" zu implementieren.
Abtrennen von Alarmmechanismen: Diese Methode wird von dem Timer-Objekt aufgerufen, wenn es
an dem AlarmAction-Objekt nicht
länger interessiert ist. Die Funktion kann z.B. verwendet
werden, um ein "reference counting"
zu implementieren.
Zustellung des Alarms: Diese Methode wird von dem Timer-Objekt aufgerufen, wenn die
Uhr abgelaufen ist. Sie ist dafür verantwortlich, dem
Benutzer die Meldung zuzustellen. Falls das misslingt, muss
die Deliver-Funktionen eine
DeliveryFailed-Ausnahme auslösen. Das
Argument TimeSpec enthält eine
normalisierte Form der Alarmzeit, nicht die ursprüngliche
Beschreibung des Benutzers.
SandUhr selbst implentiert drei spezielle Subklassen von
AlarmAction:
Tastaturpieps: Piepse mehrfach. Count ist die Anzahl
der Piepstöne. Der Wert wird während der Zustellung der
Alarms heruntergezählt, bis er Null erreicht.
Abspielen einer Sounddatei: Spiele eine Sounddatei mittels des „enlightened sound
daemon“ esd ab. Der Dateiname
SoundFile bezeichnet eine Datei auf dem
Rechner, auf dem das
AlarmSound-Objekt lebt.
Ausführen eines Programms: Führe ein beliebiges Shell-Kommando aus. Das Kommando
CommandString wird mittels der Funktion
gnome_execute_shell() auf dem Rechner
ausgeführt, auf dem das
AlarmCommand-Objekt lebt.
SandUhr::AlarmAction
Name
SandUhr::AlarmAction, SandUhr::AlarmBeep, SandUhr::AlarmSound, SandUhr::AlarmCommand -- CORBA-Schnittstelle für die SandUhr-AlarmmethodenBESCHREIBUNG
readonly attribute boolean NeedsPopup;
void Attach (in Timer T);
void Detach (in Timer T);
void Deliver (in string TimeSpec, in string Message)
raises (DeliveryFailed);
interface AlarmBeep: AlarmAction {
attribute unsigned short Count;
};
interface AlarmSound: AlarmAction {
attribute string SoundFile;
};
interface AlarmCommand: AlarmAction {
attribute string CommandString;
};
Zurück Zum Anfang Nach vorne SandUhr::Timer Nach oben SandUhr::TimerFactory