
HRegisterToHook()
*****************


FUNKTION
========

   int HRegisterToHook(int hookid, object|closure consumer, int
   hookprio,
      int consumertype, int timeInSeconds)


DEFINIERT IN
============

   /std/hook_provider.c /sys/hook.h


ARGUMENTE
=========

   * hookid: gibt den Hook-Typ an Man kann sich nur fuer Hooktypen
     eintragen, die die Methode HListHooks() angeboten hat.

   * consumer: Objekt oder Closure. Wenn ein Objekt uebergeben wird,
     wird eine Closure auf HookCallback() an diesem Objekt erstellt
     und gespeichert, andernfalls wird die uebergebene Closure
     gespeichert. Diese Closure wird spaeter beim Ausloesen des Hooks
     aufgerufen.

   * hookprio: Gibt die Prioritaet an, mit der der Hook laufen soll.
     Diese Angabe bestimmt die Reihenfolge, in der die Hooks in der
     Liste der Hooks eingetragen werden. Siehe Abschnitt Beschreibung
     fuer Details.

   * consumertype: Gibt an, um welche Art von Consumer es sich
     handelt.

   * timeInSeconds: gibt die Laufzeit des Hooks an. Falls 0
     eingetragen wird, laeuft der Hook ewig.


BESCHREIBUNG
============

   Registriert ein Objekt oder eine Closure als Hook-Konsument.

   Die Callback-Methode wird mit folgenden Argumenten gerufen:

   * object hooksource: das Objekt, in welchem das Ereignis
     ausgeloest wurde

   * int hookid: die ID des Hooks

   * mixed hookdata: die Daten des Hooks (siehe Doku zum jeweiligen
     Hook)

   Fuer hookprio sind folgende Werte vorgesehen (Konstanten aus
   hook.h):

   * H_HOOK_LIBPRIO(x)

   * H_HOOK_GUILDPRIO(x) oder

   * H_HOOK_OTHERPRIO(x).

   x darf 0, 1 oder 2 sein (je niedriger, desto hoeher die
   Prioritaet).

   Fuer consumertype gibt es vier festgelegte Arten, die fuer alle
   Hooks existieren koennen, aber nicht muessen (Konstanten aus
   hook.h):

   * H_LISTENER: Wird nur informiert

   * H_DATA_MODIFICATOR: Kann Daten des Ereignisses aendern

   * H_HOOK_MODIFICATOR: Kann das Ereignis zusaetzlich abbrechen

   * H_HOOK_SURVEYOR: Kann zusaetzlich entscheiden, ob sich Objekte
     registrieren, Daten modifizieren oder Ereignisse abbrechen
     koennen

   Die Methode  *HConsumerTypeIsAllowed* gibt Aufschluss darueber,
   welche Consumer-Typen tatsaechlich freigegeben sind.


RUECKGABEWERTE
==============

   1  : Registrierung erfolgreich

   -1 : Hook unbekannt

   -2 : consumer ist keine closure und es konnte kein Callback auf
      HookCallback im consumer erstellt werden.

   -3 : Consumer ist bereits registriert

   -4 : Consumer-Typ ist nicht erlaubt

   -5 : hookprio ist nicht erlaubt

   -6 : Surveyor hat Registrierung nicht erlaubt

   -7 : zuviele Hooks registriert / kein Hookeintrag frei


SIEHE AUCH
==========

   HUnregisterFromHook(), HookCallback(), HListHooks(),
   HIsHookConsumer()

Letzte Aenderung: 05.10.2022, Bugfix
