[srvx-devel] srvx-2.0 draft architecture document
Brought to you by:
entrope
From: Entrope <en...@us...> - 2002-10-20 14:45:10
|
Again, comments. This only discusses the lower levels, and doesn't specify how services interact with each other. (This could probably be rolled into doxygen-compatible docs, but I haven't looked up how to import a graph file like framework.dot.) Entrope ====================== = srvx 2.x Framework = ====================== This document describes the general architecture and details the lower levels of the srvx 2.x framework. It is intended as both a design spec and a "getting started" guide for new developers. A rough diagram of the layering is available in framework.dot. (To convert it to GIF, run "dot -Tgif -o framework.gif framework.dot".) Each node in that graph has its own section in this file. ================= = framework.dot = ================= digraph srvx { label="srvx component framework"; svc_mods [label="service modules"]; svc_core [label="services core"]; irc_core [label="IRC core"]; logging [label="logging"]; db_virt [label="DB virtualizer"]; ioset [label="ioset I/O code"]; formatters [label="string formatters"]; db_libs [label="database libs"]; os_apis [label="C++ standard library,\nBerkeley sockets,\nother system APIs"]; svc_mods -> { svc_core irc_core logging ioset db_virt }; svc_core -> { irc_core formatters }; irc_core -> { ioset }; logging -> { formatters db_libs os_apis }; db_virt -> { db_libs os_apis }; ioset -> { os_apis }; db_libs -> { os_apis }; } ======================== = HIGH LEVEL OVERVIEWS = ======================== C++ standard library, Berkeley sockets, other system APIs --------------------------------------------------------- These are system APIs that srvx does not implement, but merely runs on top of. ioset I/O code -------------- An "ioset" is a managed set of sockets. The manager can: initiate new outbound connections, set up new listening sockets, close sockets (whether connected or listening), and check for read and/or write activity on registered sockets (with a specified inactivity timeout). The operations on an ioset are high level, so that it may be implemented with either a polling API or completion port API, without overly impacting its users. See: srvx::ioset, srvx::socket, srvx::iobuf classes string formatters ----------------- Utilities to format strings and provide internationalization support. See: srvx::format class (will be heavily revised for I18N) database libs ------------- This represents supported third-party (or recdb) database libraries; for example, libpqxx or the C++ bindings for the Sleepycat Berkeley DB. See: third party documentation for them DB virtualizer -------------- This component acts as an adapter between internal database representation and the external APIs. It also provides helper utilities such as a dirty object cache. See: (not yet written; probably srvx::database class) logging ------- Directs log events to appropriate consumers. Depending on configuration, it might send command logs to a SQL database, error notices to an IRC channel, and other messages to a text file. See: srvx::logger, srvx::log class, srvx::log_store classes IRC core -------- This provides the API and core of IRC support in a protocol-agnostic way. It interfaces between the per-protocol support code and the individual services and service modules. See: srvx::irc::protocol class services core ------------- Provides helper utilities and code common to many service modules. See: (not yet written; probably srvx::service class) service modules --------------- Each module implements a family of commands; for example, userlist maintenance, channel control, proxy checking, etc. See: (not yet written) |