| |
| Der Ebenenverwalter channeld. |
| ----------------------------- |
| |
| Alle noetigen Defines sind in /p/daemon/channel.h definiert. Wenn man den |
| channeld verwenden will, bitte dieses inkludieren. |
| |
| Typischer Aufruf: CHMASTER->join("Abenteuer", this_object()); |
| |
| |
| Oeffentliche Funktionen |
| ------------------------ |
| |
| Zuerst die wohl am haeufigsten verwendeten Funktionen, beitreten, senden, |
| verlassen. |
| |
| public int join(string chname, object joining) |
| |
| Objekt <joining> betritt Ebene <chname>. Dies wird zugelassen, wenn es |
| die Berechtigung hat und noch nicht Mitglied ist. |
| (Man kann einer Ebene nicht zweimal beitreten.) |
| Wenn <joining> der urspruengliche Ersteller der Ebene ist, wird er |
| automatisch zum neuen Supervisor (SV). |
| Rueckgabewert: 0 bei Erfolg, E_ACCESS_DENIED (-1) sonst. |
| Hinweis: Das Objekt <joining> muss einen string bei Aufruf von name() |
| zurueckgeben. |
| |
| |
| public varargs int send(string chname, object sender, string msg, int type) |
| |
| Nachricht <msg> vom Typ <type> mit Absender <pl> auf der Ebene <chname> |
| posten, sofern <pl> dort senden darf. |
| <type> ist einer der Nachrichtentypen aus "channel.h": |
| MSG_SAY 0 normale Nachricht |
| MSG_EMOTE 1 Emote |
| MSG_GEMOTE 2 Genitiv-Emote |
| |
| Die Nachricht <msg> wird an die Funktion ChannelMessage() in den Ebenen- |
| Mitgliedern uebergeben und von dieser ausgegeben. |
| |
| Rueckgabewerte: |
| 0 Nachricht erfolgreich gesendet |
| E_ACCESS_DENIED -1 Zugriff verweigert |
| E_NOT_MEMBER -3 Objekt <sender> hat die Ebene nicht betreten |
| E_EMPTY_MESSAGE -4 Die Nachricht hatte keinen Inhalt |
| |
| |
| public int leave(string chname, object leaving) |
| |
| Objekt <leaving> verlaesst Ebene <chname>. |
| Wenn danach kein Zuhoerer mehr auf der Ebene ist, loest sie sich auf. |
| |
| Zugriffsrechte werden dabei ueberprueft, obwohl es normalerweise keinen |
| Grund geben duerfte, das Verlassen einer Ebene zu verbieten. Es ist |
| allerdings technisch durchaus moeglich, dem Objekt <leaving> das |
| Verlassen zu verweigern, z.B. auf Grund eines Banns. |
| Rueckgabewerte: |
| 0 erfolgreich verlassen |
| E_ACCESS_DENIED -1 Zugriff verweigert |
| E_NOT_MEMBER -2 Objekt <leaving> war gar nicht Mitglied |
| |
| |
| public varargs int new(string ch_name, object owner, string|closure desc, |
| int channel_flags) |
| |
| Erstellt eine neue Ebene <ch_name> mit <owner> als Ebenenbesitzer. Wird |
| auch vom channeld selbst verwendet, um die in channeld.init definierten |
| Ebenen zu erzeugen. Inaktive Ebenen werden ebenfalls ueber new() |
| reaktiviert, mitsamt ihrer bestehenden History. |
| |
| <ch_name> Darf nicht 0 oder leer sein. Zur Anzeige wird der Name in der |
| angegebenen Schreibweise verwendet, fuer interne Zwecke wird |
| aber immer der kleingeschriebene Name genutzt. Das gilt auch |
| fuer die Pruefung von Zugriffsrechten. |
| <desc> Kann die statische Beschreibung der Ebene sein oder eine |
| Closure, die dynamisch aktualisierte Infos ausgibt. |
| <owner> Besitzer des Channels, Supervisor (SV) genannt. |
| Sollte eine Funktion ch_check_access() definieren, die gerufen |
| wird, wenn eine Ebenenaktion vom Typ join/leave/send/list/users |
| eingeht. |
| <channel_flags> |
| |
| Rueckgabewerte: |
| 0 Ebene erfolgreich erstellt. |
| E_ACCESS_DENIED -1 |
| - Channelname existiert schon |
| - Maximalzahl Channels erreicht |
| - Channelname war Unsinn (leer oder 0) |
| - keine Beschreibung angegeben, und es existiert auch keine passende |
| inaktive Ebene |
| - kein Supervisor (SV) angegeben |
| - angegebener Supervisor darf keine Ebenen erstellen (Bann, oder |
| verbotener Name) |
| - bei Reaktivierung einer inaktiven Ebene wird ein neuer Supervisor |
| angegeben, aber die Ebene war mit unveraenderlichem Supervisor |
| (CHF_FIXED_SUPERVISOR) initialisiert worden; ein neuer Supervisor |
| wird dann abgelehnt, damit die Kontrolle ueber die Ebene nicht von |
| anderen Objekten uebernommen werden kann. |
| |
| Fuer die Erstellung und Funktionsweise von Supervisor-Objekten wird |
| auf |
| |
| |
| public int|mapping list(object pl) |
| |
| Gibt ein Mapping mit allen Ebenen aus, die das Objekt <pl> lesen kann, |
| oder den Fehlercode E_ACCESS_DENIED (-1). |
| Struktur des Mappings: |
| ([ string chname, ({object* members, closure access_cl, string desc, |
| object supervisor, string ch_name }) ]) |
| |
| |
| public string|string* find(string chname, object pl) |
| |
| Ebene suchen, deren Name <chname> enthaelt, und auf der Objekt <pl> |
| senden darf. |
| Rueckgabewerte: |
| - den gefundenen Namen als String |
| - String-Array, wenn es mehrere Treffer gibt |
| - 0, wenn es keinen Treffer gibt |
| |
| |
| public int|<int|string>** history(string chname, object pl) |
| |
| Ebenen-History abfragen. Objekt <pl> muss berechtigt sein, dem Channel |
| <chname> beizutreten. |
| Rueckgabewert: E_ACCESS_DENIED (-1) bei fehlender Berechtigung, ansonsten |
| ({string channelname, string sender, string msg, int msg_type}) |
| |
| |
| public int transfer_ownership(string chname, object new_owner) |
| |
| Aendert den Ersteller/Besitzer der Ebene. |
| Achtung: das ist nicht das gleiche wie der aktuelle Supervisor (SV)! |
| Nur der aktuelle Besitzer, Supervisor oder EM+ darf die Ebene |
| verschenken. |
| |
| |
| public int change_channel_flags(string chname, int newflags) |
| |
| Aendert die Zugriffsflags der Ebene. Hierbei handelt es sich nicht um die |
| Stufenlimits fuer join() oder send(). |
| Nur der aktuelle Supervisor (SV), der Ersteller, oder EM+ duerfen die |
| Flags aendern. |
| Die moeglichen Flags sind die, die auch in channeld.init verwendet werden |
| und in /p/daemon/channel.h definiert sind: |
| CHF_FIXED_SUPERVISOR 1 kein Wechsel des Supervisor erlaubt |
| |
| Folgende Flags werden nur in Supervisor-Objekten verwendet: |
| CH_ACCESS_WIZARD 1 reine Magierebene |
| CH_ACCESS_NOGUEST 2 keine Gaeste erlaubt |
| |
| |
| Funktionen fuer Erzmagierkommandos: |
| |
| public int remove_channel(string chname, object pl) |
| Wird aus der Shell gerufen, fuer das Erzmagier-Kommando "kill". |
| |
| public int clear_history(string chname) |
| Wird aus der Shell aufgerufen, fuer das Erzmagier-Kommando "clear". |
| |
| |
| Siehe auch: |
| ----------- |
| |
| Init-Datei: channeld.init |
| Supervisor: channel-supervisor |
| Beispiele: /doc/beispiele/ebenen/supervisor.c |
| /doc/beispiele/ebenen/supervisor-thing.c |
| |