event(8gx)
π event β the Folder change notification daemon (yes bestie, it's giving whole entire daemon)
okay so this page lives in the Gromox admin reference section of the manual, and it's manual page event(8gx). Let's get into it π«Ά
β¨ SYNOPSIS β¨
event [-c config]
that's it. that's the whole vibe. one optional flag. slay.
πΈ DESCRIPTION πΈ
okay so the event daemon is a software bus β an inter-process communication (IPC) mechanism that lets a bunch of processes running concurrently and on multiple machines talk to each other. she's a whole group chat for daemons, fr fr π¬β¨
in practice? midb(8gx), pop3(8gx) and imap(8gx) use her to notify imap(8gx) instances when folder/message states change. so like, when something new happens in a folder, the word gets spread. iconic behavior honestly π
π OPTIONS π
-c configβ reads configuration directives from the given file. if you don't pass this option, then/etc/gromox/gromox.cfgand/etc/gromox/event.cfgwill both be read. (two files! she's thorough π )--versionβ outputs version information and then dips. bye π-?β displays the option summary. the little "help me help you" moment.
β οΈ heads up bestie: all time-based command-line options and configuration file directives follow the syntax described in gromox(7), section "Duration specifications". iykyk π
π¦ CONFIGURATION DIRECTIVES π¦
the usual config file location is /etc/gromox/event.cfg. that's her home π
event_hosts_allowβ a space-separated list of individual host addresses that are allowed to converse with the event service. the addresses must conform togromox(7)Β§ "Host addresses". no networks and no CIDR notations are permitted β like, do not try it, she will not accept it π Default:::1event_listen_ipβ the IPv6 socket address for exposing the event service on. the address must conform togromox(7)Β§ "Host addresses". Default:::1event_listen_portβ the TCP port number for exposing the event service on. Default:33333event_log_fileβ target for log messages here. special values recognized:-(stderr/syslog depending on parent PID) orsyslog. Default:-(auto)event_log_levelβ maximum verbosity of logging.1=crit,2=error,3=warn,4=notice,5=info,6=debug. Default:4(notice)event_threads_numβ the minimum number of client processing threads to keep around. she likes to have helpers on standby π§ Default:50running_identityβ an unprivileged user account to switch the process to after startup. to inhibit the switch, assign the empty value. Default:gromox
π EVENT PROTOCOL π
the event service is exposed as a line-based text protocol. upon connection, the event server gratitiously writes "OK" and will wait for commands. so polite π
each connection to the event daemon starts out in Enqueue Mode, and this is the only mode from which commands can be issued. like, that's the greenhouse where commands grow π±
"FALSE" may be emitted by the server if there is a syntax error. (she's telling u something's wrong, respectfully π)
π ID
the command ID <res_id> declares the particular connection to be a notification sender. res_id is generally the hostname and the PID. the server always responds with "TRUE". (and the connection stays in Enqueue Mode, no plot twist here)
β LISTEN
the command LISTEN <res_id> declares the particular connection to be a notification receiver. res_id follows the same pattern. the server responds with "TRUE" and the connection state changes to the Dequeue Mode (see below π).
πΈ SELECT
the command SELECT <username> <folder> subscribes those connections that have registered as a listener for res_id to notifications.
okay this part is important so read it twice: this means that a process wishing to useevent_stub(4gx)to listen for notifications strictly requires loadingevent_proxy(4gx)too, and, in essence, uses two connections toevent(8gx). two. connections. no cap π
the server responds with "FALSE" if no listener exists, or "TRUE" on success.
π§ UNSELECT
the command UNSELECT <username> <folder> unsubscribes those connections that had registered as a listener for res_id. the server always responds with "TRUE".
π QUIT
terminate the connection. that's it. that's the whole thing. goodbye π
π₯ PING
resets the inactivity timer on the connection. a little "still here bestie!" tap π«Ά
π Partially parsed commands
any other input is treated as a notification item and is not interpreted by event(8gx) beyond checking the number of fields. she's just counting, not reading π
FOLDER-TOUCHβ the notificationFOLDER-TOUCH <username> <folder>informs listeners that the folder metadata has changed and warrants being reloaded. this is also how the arrival of new messages is conveyed. so yes, folder touch = new mail energy β¨MESSAGE-FLAGβ the notificationMESSAGE-FLAG <username> <folder> <messageid>informs listeners that the message metadata has changed and warrants being reloaded. (this operation is no longer recognized since Gromox2.17-26-g10564f3e7.) rip, she's deprecated πMESSAGE-UFLAGβ the notificationMESSAGE-UFLAG <username> <folder> <imapuid>informs listeners that the message metadata has changed and warrants being reloaded.MESSAGE-EXPUNGEβ the notificationMESSAGE-EXPUNGE <username> <folder> <messageid>informs listeners that the message was deleted. gone gone gone ποΈ
ποΈ Client behavior
clients in Dequeue Mode will receive notifications. each notification line received by the client needs to be acknowledged with a "TRUE" response. and listen β it is not possible to exit Dequeue Mode; connection termination is the only way out. there is no door, only the window π
events do not echo for a particular res_id. the event_proxy(4gx) and event_stub(4gx) components use the getpid() function when constructing the res_id for the ID/LISTEN commands. a process like imap(8gx) which uses both components will intentionally not see its own notifications over the gromox-event IPC system this way. she's not ignoring you, she's just built like that π
π SEE ALSO π
gromox(7), event_proxy(4gx), event_stub(4gx)
and that's the page, bestie π this documentation ships with Gromox, and you've been reading event(8gx) β go forth and notify responsibly ππ¦
π¦ where this page comes from
- alpine 3.24: grommunio-gromox-doc 3.6-r0 Β· AGPL-3.0-or-later
- π the page's license: CC-BY-SA-4.0 or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms