Scripting Konzept

<< Klicken Sie hier um das Inhaltsverzeichnis anzuzeigen >>

Navigation:  Anleitungen > Steuerbefehl- und Statushandling einrichten > Scripting (CustomCommandHandling) >

Scripting Konzept

Das Handling von Steuerbefehlen und Statusmeldungen via Script ist Ereignisgetriggert. Dies bedeutet, dass der Studio Controller beim Eintreffen bestimmter Ereignisse prüft, ob im Scripting-Bereich Programmcode zu diesem Ereignis hinterlegt ist, und falls ja führt er diesen Code aus.

 

Ereignisse

Der für ein Ereignis hinterlegte Code wird in sogenannten Ereignis-Handlern abgelegt (programmtechnisch sind es Methoden). Diesen Ereignis-Handlern werden beim Aufruf verschiedene Parameter/Daten übergeben, z.B. die Nummer des Steuerbefehles. Die Parameter die übergegeben werden, werden im Script-Editor oberhalb des Codes angezeigt sobald ein Ereignis ausgewählt wird.

CommandHandlerScriptEventHeader

Der Header besteht aus folgenden Elementen (von links nach rechts):

Type des Rückgabewertes (hier void, dies bedeutet kein Rückgabewert).

Name der Ereignis-Handler-Methode.

In runden Klammern die kommaseparierten Parameter (üblicherweise bestehend aus dem Typ und dem Namen des Parameters).

 

Interessant für uns sind vorallem die Parameter. Der erste Parameter ist bei allen Ereignis-Handlern "ref bool handled". Der Typ des Parameters ist bool (kann die Werte true oder false annehmen), der Name ist handled. Der Zusatz ref bewirkt, dass der geänderte Wert dieses Parameters an den Aufrufer zurück gegeben wird. Mit diesem Parameter können wir steuern, ob der ursprüngliche Steuerbefehl bzw. die ürsprüngliche Statusmeldung weitergeleitet werden soll. Wollen wir z.B. einen Steuerbefehl durch einen anderen ersetzen, werden wir diesen Parmeter auf true setzen, um zu verhindern dass der ursprüngliche Befehl weiter verarbeitet wird.

 

Es gibt vier Ereignisse für die ein Ereignis-Handler erstellt werden kann:

ReceivingCommand: wenn ein Steuerbefehl von einem externen Modul beim Studio Controller eintrifft. Als Parameter werden die Nummer des Steuerbefehles und der optionale Parameter des Steuerbefehles übergeben.

SendingCommand: wenn der Studio Controller einen Steuerbefehl versendet (aus der Playlist/Sendeplan oder via Type Indication). Als Parameter werden die Nummer des Steuerbefehles und der optionale Parameter des Steuerbefehles übergeben.

SendingStatusMessage: wenn der Studio Controller eine Statusmeldung versendet. Als Parameter werden die Nummer der Statusmeldung und der optionale Parameter der Statusmeldung übergeben.

SendingTextCommand: wenn der Studio Controller einen Text-Steuerbefehl versendet (aus der Playlist/Sendeplan). Als Parameter werden der Steuerbefehl und die optionalen Parameter des Steuerbefehles übergeben.

 

Bemerkung: Text-Steuerbefehle sind eine im Aufbau befindliche Erweiterung zu den bisherigen numerischen Steuerbefehlen. Da es zur Zeit keine externen Module gibt die Text-Steuerbefehle unterstützen, können diese nur in der Playlist verwendet werden, und nur wenn sie via Scripting in numerische Befehle umgewandelt werden.

 

Methoden zum Versenden von Steuerbefehlen und Statusmeldungen

Um in einem Ereignis-Handler Steuerbefehle und Statusmeldungen zu ersetzen oder weiterzuleiten, stehen drei verschiedene Methoden zur Verfügung:

void SendMessageToExternalModules(ushort delay, int commandOrStatus, int? parameter = null);
zum Versenden eines Steuerbefehls oder einer Statusmeldung an ein externes Modul (via Windows Message).

void SendInternalCommand(ushort delay, int command, int? parameter);
zum Versenden eines Steuerbefehls an den Studio Controller.

void SendInternalCommand(ushort delay, int command, params int[] parameters);
ebenfalls zum Versenden eines Steuerbefehls an den Studio Controller (wenn zwei oder mehr Parameter übergeben werden sollen).

 

Die Parameter haben folgende Bedeutung:

delay: Verzögerung/Offset in Millisekunden

commandOrStatus: Nummer des Sterbefehles oder der Statusmeldung

parameter: optionaler Parameter des Steuerbefehles bzw. der Statusmeldung

parameters: optionale Parameter des Steuerbefehles

 

Die Methoden müssen auf dem CustomCommandHandler-Objekt aufgerufen werden, also z.B.

CustomCommandHandler.SendInternalCommand(0, 101010);

CustomCommandHandler.SendMessageToExternalModules(250, 12345);

 

Bemerkung: Diese Methoden versenden den Steuerbefehl bzw. die Statusmeldung direkt, d.h. sie durchlaufen weder das Scripting noch die Ersetzungstabellen.

 

Studio Controller Status

Das CustomCommandHandler-Objekt stellt drei Eigenschaften mit dem Status des Studio Controllers zur Verfügung:

Abhaken: true falls das Abhaken eingeschaltet ist, sonst false.

Automat: true falls der Automat eingeschaltet ist, sonst false.

Pfl: true falls PFL aktiv ist, sonst false.

 

Damit können abhängig vom Status unterschiedliche Aktionen ausgeführt werden, und zwar in der Art

if (CustomCommandHandler.Automat)

{

// Der Automat ist eingeschaltet, mach irgend was ...

}

else

{

// Der Automat ist ausgeschaltet, mach was anderes ...

}

 

Kommentare

Da das Scripting auf C# basiert, können C#-Kommentare verwendet werden:

 

// Einzeiliger Kommentar, bzw. der Rest der Zeile.

 

/*

Mehrzeiliger

Kommentar

*/

 

Logger

Das Logger-Objekt stellt verschiedene Methoden zur Verfügung um Meldungen in die DABiS-Log-Datei zu schreiben, z.B.

Logger.Debug("Schreibt diesen Text auf Debug-Level in die Log-Datei");

 

Folgende Log-Methoden stehen zur Verfügung:

void Debug(object message);

void Debug(object message, Exception ex);

void DebugFormat(string format, params object[] args);

 

void Info2(object message);

void Info2(object message, Exception ex);

void Info2Format(string format, params object[] args);

 

void Info(object message);

void Info(object message, Exception ex);

void InfoFormat(string format, params object[] args);

 

void Warn(object message);

void Warn(object message, Exception ex);

void WarnFormat(string format, params object[] args);

 

void Error(object message);

void Error(object message, Exception ex);

void ErrorFormat(string format, params object[] args);

 

Allgemeine Codeabschnitte

Die allgemeinen Codeabschnitte stellen erweiterte Programmiermöglichkeiten zur Verfügung. Die Verwendung setzt jedoch Programmier- und C#- Kenntnisse voraus und kann im Rahmen dieser Hilfe nicht weiter beschrieben werden.

 

Free Code

Ermöglicht beliebige Elemente in der generierten Klasse zu erstellen, z.B. Felder, Eigenschaften, Methoden usw.

 

Load

Der Code wird in eine Load-Methode verpackt, die beim Starten aufgerufen wird und für Initialisierungszwecke verwendet werden kann.

 

Unload

Aus technischen Gründen wird dieser Codeabschnitt zur Zeit im Studio Controller nicht ausgeführt!

 

Referenced Assemblies

Ermöglicht die Referenzierung zusätzlich verwendeter Assemlies, z.B.

CoreLibraries\DabisContracts.dll

System.Xml.dll

 

Using Directives

Erlaubt die Angabe zusätzlicher using-Direktiven, z.B.

using Sohard.Dabis.DataContracts.Utils;

using System.Xml.Serialization;