Arathorn | 3ec3af0 | 2021-01-20 00:17:51 +0100 | [diff] [blame] | 1 | |
| 2 | Der Ebenenverwalter channeld. |
| 3 | ----------------------------- |
| 4 | |
| 5 | Alle noetigen Defines sind in /p/daemon/channel.h definiert. Wenn man den |
| 6 | channeld verwenden will, bitte dieses inkludieren. |
| 7 | |
| 8 | Typischer Aufruf: CHMASTER->join("Abenteuer", this_object()); |
| 9 | |
| 10 | |
| 11 | Oeffentliche Funktionen |
| 12 | ------------------------ |
| 13 | |
| 14 | Zuerst die wohl am haeufigsten verwendeten Funktionen, beitreten, senden, |
| 15 | verlassen. |
| 16 | |
| 17 | public int join(string chname, object joining) |
| 18 | |
| 19 | Objekt <joining> betritt Ebene <chname>. Dies wird zugelassen, wenn es |
| 20 | die Berechtigung hat und noch nicht Mitglied ist. |
| 21 | (Man kann einer Ebene nicht zweimal beitreten.) |
| 22 | Wenn <joining> der urspruengliche Ersteller der Ebene ist, wird er |
| 23 | automatisch zum neuen Supervisor (SV). |
| 24 | Rueckgabewert: 0 bei Erfolg, E_ACCESS_DENIED (-1) sonst. |
| 25 | Hinweis: Das Objekt <joining> muss einen string bei Aufruf von name() |
| 26 | zurueckgeben. |
| 27 | |
| 28 | |
| 29 | public varargs int send(string chname, object sender, string msg, int type) |
| 30 | |
| 31 | Nachricht <msg> vom Typ <type> mit Absender <pl> auf der Ebene <chname> |
| 32 | posten, sofern <pl> dort senden darf. |
| 33 | <type> ist einer der Nachrichtentypen aus "channel.h": |
| 34 | MSG_SAY 0 normale Nachricht |
| 35 | MSG_EMOTE 1 Emote |
| 36 | MSG_GEMOTE 2 Genitiv-Emote |
| 37 | |
| 38 | Die Nachricht <msg> wird an die Funktion ChannelMessage() in den Ebenen- |
| 39 | Mitgliedern uebergeben und von dieser ausgegeben. |
| 40 | |
| 41 | Rueckgabewerte: |
| 42 | 0 Nachricht erfolgreich gesendet |
| 43 | E_ACCESS_DENIED -1 Zugriff verweigert |
| 44 | E_NOT_MEMBER -3 Objekt <sender> hat die Ebene nicht betreten |
| 45 | E_EMPTY_MESSAGE -4 Die Nachricht hatte keinen Inhalt |
| 46 | |
| 47 | |
| 48 | public int leave(string chname, object leaving) |
| 49 | |
| 50 | Objekt <leaving> verlaesst Ebene <chname>. |
| 51 | Wenn danach kein Zuhoerer mehr auf der Ebene ist, loest sie sich auf. |
| 52 | |
| 53 | Zugriffsrechte werden dabei ueberprueft, obwohl es normalerweise keinen |
| 54 | Grund geben duerfte, das Verlassen einer Ebene zu verbieten. Es ist |
| 55 | allerdings technisch durchaus moeglich, dem Objekt <leaving> das |
| 56 | Verlassen zu verweigern, z.B. auf Grund eines Banns. |
| 57 | Rueckgabewerte: |
| 58 | 0 erfolgreich verlassen |
| 59 | E_ACCESS_DENIED -1 Zugriff verweigert |
| 60 | E_NOT_MEMBER -2 Objekt <leaving> war gar nicht Mitglied |
| 61 | |
| 62 | |
| 63 | public varargs int new(string ch_name, object owner, string|closure desc, |
| 64 | int channel_flags) |
| 65 | |
| 66 | Erstellt eine neue Ebene <ch_name> mit <owner> als Ebenenbesitzer. Wird |
| 67 | auch vom channeld selbst verwendet, um die in channeld.init definierten |
| 68 | Ebenen zu erzeugen. Inaktive Ebenen werden ebenfalls ueber new() |
| 69 | reaktiviert, mitsamt ihrer bestehenden History. |
| 70 | |
| 71 | <ch_name> Darf nicht 0 oder leer sein. Zur Anzeige wird der Name in der |
| 72 | angegebenen Schreibweise verwendet, fuer interne Zwecke wird |
| 73 | aber immer der kleingeschriebene Name genutzt. Das gilt auch |
| 74 | fuer die Pruefung von Zugriffsrechten. |
| 75 | <desc> Kann die statische Beschreibung der Ebene sein oder eine |
| 76 | Closure, die dynamisch aktualisierte Infos ausgibt. |
| 77 | <owner> Besitzer des Channels, Supervisor (SV) genannt. |
| 78 | Sollte eine Funktion ch_check_access() definieren, die gerufen |
| 79 | wird, wenn eine Ebenenaktion vom Typ join/leave/send/list/users |
| 80 | eingeht. |
| 81 | <channel_flags> |
| 82 | |
| 83 | Rueckgabewerte: |
| 84 | 0 Ebene erfolgreich erstellt. |
| 85 | E_ACCESS_DENIED -1 |
| 86 | - Channelname existiert schon |
| 87 | - Maximalzahl Channels erreicht |
| 88 | - Channelname war Unsinn (leer oder 0) |
| 89 | - keine Beschreibung angegeben, und es existiert auch keine passende |
| 90 | inaktive Ebene |
| 91 | - kein Supervisor (SV) angegeben |
| 92 | - angegebener Supervisor darf keine Ebenen erstellen (Bann, oder |
| 93 | verbotener Name) |
| 94 | - bei Reaktivierung einer inaktiven Ebene wird ein neuer Supervisor |
| 95 | angegeben, aber die Ebene war mit unveraenderlichem Supervisor |
| 96 | (CHF_FIXED_SUPERVISOR) initialisiert worden; ein neuer Supervisor |
| 97 | wird dann abgelehnt, damit die Kontrolle ueber die Ebene nicht von |
| 98 | anderen Objekten uebernommen werden kann. |
| 99 | |
| 100 | Fuer die Erstellung und Funktionsweise von Supervisor-Objekten wird |
| 101 | auf |
| 102 | |
| 103 | |
| 104 | public int|mapping list(object pl) |
| 105 | |
| 106 | Gibt ein Mapping mit allen Ebenen aus, die das Objekt <pl> lesen kann, |
| 107 | oder den Fehlercode E_ACCESS_DENIED (-1). |
| 108 | Struktur des Mappings: |
| 109 | ([ string chname, ({object* members, closure access_cl, string desc, |
| 110 | object supervisor, string ch_name }) ]) |
| 111 | |
| 112 | |
| 113 | public string|string* find(string chname, object pl) |
| 114 | |
| 115 | Ebene suchen, deren Name <chname> enthaelt, und auf der Objekt <pl> |
| 116 | senden darf. |
| 117 | Rueckgabewerte: |
| 118 | - den gefundenen Namen als String |
| 119 | - String-Array, wenn es mehrere Treffer gibt |
| 120 | - 0, wenn es keinen Treffer gibt |
| 121 | |
| 122 | |
| 123 | public int|<int|string>** history(string chname, object pl) |
| 124 | |
| 125 | Ebenen-History abfragen. Objekt <pl> muss berechtigt sein, dem Channel |
| 126 | <chname> beizutreten. |
| 127 | Rueckgabewert: E_ACCESS_DENIED (-1) bei fehlender Berechtigung, ansonsten |
| 128 | ({string channelname, string sender, string msg, int msg_type}) |
| 129 | |
| 130 | |
| 131 | public int transfer_ownership(string chname, object new_owner) |
| 132 | |
| 133 | Aendert den Ersteller/Besitzer der Ebene. |
| 134 | Achtung: das ist nicht das gleiche wie der aktuelle Supervisor (SV)! |
| 135 | Nur der aktuelle Besitzer, Supervisor oder EM+ darf die Ebene |
| 136 | verschenken. |
| 137 | |
| 138 | |
| 139 | public int change_channel_flags(string chname, int newflags) |
| 140 | |
| 141 | Aendert die Zugriffsflags der Ebene. Hierbei handelt es sich nicht um die |
| 142 | Stufenlimits fuer join() oder send(). |
| 143 | Nur der aktuelle Supervisor (SV), der Ersteller, oder EM+ duerfen die |
| 144 | Flags aendern. |
| 145 | Die moeglichen Flags sind die, die auch in channeld.init verwendet werden |
| 146 | und in /p/daemon/channel.h definiert sind: |
| 147 | CHF_FIXED_SUPERVISOR 1 kein Wechsel des Supervisor erlaubt |
| 148 | |
| 149 | Folgende Flags werden nur in Supervisor-Objekten verwendet: |
| 150 | CH_ACCESS_WIZARD 1 reine Magierebene |
| 151 | CH_ACCESS_NOGUEST 2 keine Gaeste erlaubt |
| 152 | |
| 153 | |
| 154 | Funktionen fuer Erzmagierkommandos: |
| 155 | |
| 156 | public int remove_channel(string chname, object pl) |
| 157 | Wird aus der Shell gerufen, fuer das Erzmagier-Kommando "kill". |
| 158 | |
| 159 | public int clear_history(string chname) |
| 160 | Wird aus der Shell aufgerufen, fuer das Erzmagier-Kommando "clear". |
| 161 | |
| 162 | |
| 163 | Siehe auch: |
| 164 | ----------- |
| 165 | |
| 166 | Init-Datei: channeld.init |
| 167 | Supervisor: channel-supervisor |
| 168 | Beispiele: /doc/beispiele/ebenen/supervisor.c |
| 169 | /doc/beispiele/ebenen/supervisor-thing.c |
| 170 | |