Zum Hauptinhalt springen

Ereignisfunktion des SOA-Service

Ereignisfunktion des SOA-Service

Funktion, die durch einen Task des SOA-Service aufgerufen wird

Details

Diese Funktion wird je nach Betriebsart des Task des SOA-Service zu unterschiedlichen Zeitpunkten aufgerufen. Arbeitet der Task in der Betriebsart TIME (siehe mode ), erfolgt der Aufruf beim Start des SOA-Service und anschließend in regelmäßigen Abständen. Die Zeitabstände sind in der Einstellung time_delay_default bzw. im Task -Objekt angegeben. Bei der Betriebsart SOCKET erfolgt der Aufruf erst bei einem Verbindungsaufbau über den Socket.

  • Ereignisaufrufe Betriebsart TIME: Ereignisaufrufe Betriebsart SOCKET
  • :

Damit die Funktion aufgerufen werden kann, muss sie in dem Eintrag c16_procedure eingetragen werden. Die Funktion selbst muss mit folgendem Funktionskopf definiert sein:

sub <Name>
(
aObjHdl : handle; // Task-object
aEvtType : int; // Event-type
)

aObjHdl

In dem Parameter aObjHdl wird der Deskriptor des verwendeten Task -Objekt übergeben. Jedes Ereignis hat ein eigenes Objekt, welches über eine Reihe von Eigenschaften verfügt. Der Typ des Deskriptors ist in allen Fällen _HdlSvcTime oder _HdlSvcSocket. Der Untertyp ist abhängig davon, ob der Job als Thread (_JobThread) oder als Prozess (_JobProcess) gestartet wurde.

aEvtType

In aEvtType wird der Ereignistyp übergeben. Beim TIME-Service gibt es nur einen Typ von Ereignis, aEvtType enthält daher immer Null. Beim SOCKET-Service gibt es vier unterschiedliche Ereignistypen.

  • _SckEvtConnect Bei einer neuen Verbindung wird dieses Ereignis ausgelöst. Falls die gesamte Verarbeitung in der Ereignisfunktion durchgeführt werden kann, sollte der Socket am Ende mit JobClose () geschlossen werden (Eigenschaft SvcSckHandle des übergebenen Objekts). Damit ist die Verbindung beendet und es gibt auch keine weiteren Ereignisse mehr für diese Verbindung. Um den Socket für einen weiteren Datenaustausch zu verwenden, muss mit Keep-Alives gearbeitet werden (siehe Verarbeitungshinweise ).
  • _SckEvtDisconnect Falls der Socket der Verbindung nicht aktiv mit SckClose () geschlossen wurde, wird nach dem Trennen der Verbindung in jedem Fall dieses Ereignis aufgerufen. Der Socket ist beim Aufruf der Ereignisprozedur bereits geschlossen.
  • _SckEvtData Bleibt der Socket nach dem Ende der Ereignisprozedur noch geöffnet, kann dieses Ereignis auftreten, wenn innerhalb der Keep-Alive-Zeit neue Daten empfangen werden.
  • _SckEvtTimeout Bleibt der Socket nach dem Ende der Ereignisprozedur noch geöffnet, kann dieses Ereignis auftreten, wenn innerhalb der Keep-Alive-Zeit keine neue Daten mehr empfangen wurden.

Eine Funktion mit identischem Funktionskopf muss angegeben werden, wenn mit der Anweisung JobStart () ein Job gestartet wird. Beim Aufruf der Ereignisfunktion wird dann ein Job -Objekt übergeben. Der Typ des Deskriptors ist in allen Fällen _HdlJob, wobei der Untertyp _JobThread oder _JobProcess sein kann.

info

Innerhalb des SOA-Service können nur A+ Prozeduren verarbeitet werden. Der Aufruf von Prozeduren mit dem Befehl CallOld () wird ignoriert.