Dev:Unreal Architecture

Unreal's architecture is made of several important components:

Core
The core includes several components listed in more detail below, but is responsible for loading the configuration, interacting with sockets and low-level I/O, server linking, and other core functionality to the IRCd.


 * Socket Engine
 * "Core" modes
 * "Core" commands
 * Configuration parsing
 * Server linking
 * Client connections
 * Resource management

Modules
The Module article will explain the basics of a module, while Module API will elaborate on the various ways to integrate your module in UnrealIRCd and extend functionality (add commands, modes, etc).

Coding Standards
Throughout Unreal, we generally assume we have C89 support as our baseline, that means we try not to require C99 support anywhere within the code. Furthermore, while we do use POSIX specific features where necessary (socket engine comes to mind) we try to explicitly provide alternatives to make everything we do compatible with Win32.

As a general goal, any modules you write, or patches you submit, should aim to support following environments and compilers:


 * GCC and Generic POSIX Systems
 * clang and Generic POSIX Systems
 * Win32 using a MSVC compiler (not mingw or through cygwin)

In terms of coding style, Unreal is descended from the original IRCd, and so has numerous places in the code where we should and hope to do a better job with in the future. Towards that goal, we want to avoid the following things wherever possible


 * goto statements, with some exceptions for breaking out of nested loops
 * non-explicit variable names
 * K&R style method prototypes

So please avoid putting any of these into the codebase.