summaryrefslogtreecommitdiffstats
path: root/docs/design.txt
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/design.txt139
1 files changed, 139 insertions, 0 deletions
diff --git a/docs/design.txt b/docs/design.txt
new file mode 100644
index 0000000..6888f21
--- /dev/null
+++ b/docs/design.txt
@@ -0,0 +1,139 @@
+Design
+
+Irssi’s hierarchy is something like this:
+
+ sub1 sub2
+ \ /
+ xxx IRC COMMON ICQ yyy
+ | | | | |
+ '----+-----:-----+----+----'
+ |
+ GUI (gtk/gnome, qt/kde, text, none)
+ |
+ sub1 sub2 |
+ \ / |
+ xxx IRC | COMMON ICQ yyy
+ '----+-----+-----+----+----'
+ |
+ COMMON UI
+ |
+ sub1 sub2 |
+ \ / |
+ xxx IRC | ICQ yyy
+ | | | | |
+ '----+-----+-----+----'
+ |
+ CORE
+ /
+ lib-config
+
+
+(IRC, ICQ, xxx and yyy are chat protocols ..)
+
+(sub1 and sub2 are submodules of IRC module, like DCC and flood protect)
+
+Chat protocols and frontends are kept in separate modules. Common UI and GUI
+modules also have the common parts which don’t know anything about the chat
+protocols. This should allow implementing modules to whatever chat protocols
+and with whatever frontends easily.
+
+Signals
+
+Communication between different modules are done with “signals”. They are not
+related to UNIX signals in any way, you could more like think of them as
+“events” - which might be a better name for them, but I don’t really want to
+change it anymore :)
+
+So, you send signal with signal_emit() and it’s sent to all modules that have
+grabbed it by calling signal_add() in their init function. For example:
+
+signal_emit("mysignal", 1, "hello");
+
+Sends a “mysignal” function with one argument “hello” - before that, you should
+have grabbed the signal somewhere else with:
+
+static void sig_mysignal(const char *arg1)
+{
+ /* arg1 contains "hello" */
+}
+
+signal_add("mysignal", (SIGNAL_FUNC) sig_mysignal);
+
+There are three different signal_add() functions which you can use to specify
+if you want to grab the signal first, “normally” or last. You can also stop the
+signal from going any further.
+
+Emitting signal with it’s name creates a small overhead since it has to look up
+the signal’s numeric ID first, after which it looks up the signal structure.
+This is done because if you call a signal really often, it’s faster to find it
+with it’s numeric ID instead of the string. You can use signal_get_uniq_id()
+macro to convert the signal name into ID - you’ll have to do this only once! -
+and use signal_emit_id() to emit the signal. Don’t bother to do this unless
+your signal is sent (or could be sent) several times in a second.
+
+See src/core/signals.h for definition of the signal function, and signals.txt
+for a list of signals.
+
+lib-config
+
+Irssi depends on this for reading and saving configuration. (created by me for
+irssi)
+
+CORE module
+
+Provides some functionality that all other modules can use:
+
+ • signal handling
+ • keeping list of settings
+ • keeping list of /commands
+ • keeping track of loaded modules
+ • networking functions (with nonblocking connects, IPv6 support)
+ • handles connecting to servers
+ • raw logging of server’s input/output data
+ • /EVAL support
+ • fgets() like function line_split() without any maximum line limits
+ • command line parameter handling
+ • miscellaneous useful little functions
+ • handles logging
+
+COMMON UI module
+
+ • knows basics about windows and window items (=channels, queries, ..)
+ • printtext() - parsing texts and feeding it for GUI to print.
+ • themes
+ • translation tables
+ • text hilighting
+ • command history
+ • user interface (/commands) for CORE’s functionality
+
+GUI modules
+
+ • all the rest of the functionality needed for a working client.
+
+IRC module
+
+ • CORE
+ □ IRC specific /commands
+ □ flood protecting commands sent to server
+ □ creating IRC masks based on nick/address for bans, ignores, etc.
+ □ keeps list of channels, nicks, channel modes, bans, etc.
+ □ keeps list of servers, server settings, irc networks, server
+ reconnections and irc network splits
+ □ redirection of commands’ replies
+ □ lag detection
+ □ ctcp support and flood protection
+ □ Handles ignoring people
+ • DCC
+ □ DCC chat, send and get
+ • FLOOD
+ □ detects private or channel flooding and sends “flood” signal
+ □ automatic ignoring when flooding
+ • NOTIFYLIST
+ □ handles notifylist
+
+IRC UI module
+
+ • placing channels and queries in windows
+ • nick completion
+ • printing infomation of some events
+