aboutsummaryrefslogtreecommitdiff
path: root/docs/nelnet.php
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/nelnet.php
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to '')
-rw-r--r--docs/nelnet.php3530
1 files changed, 530 insertions, 0 deletions
diff --git a/docs/nelnet.php3 b/docs/nelnet.php3
new file mode 100644
index 00000000..7aab8bb2
--- /dev/null
+++ b/docs/nelnet.php3
@@ -0,0 +1,530 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>Nevrax.org : docs</TITLE>
+ <META name="keywords" content="freesoftware,nel,newt,snowballs,richard stallman,GNU,Multi-User Online World">
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax"></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+<!-- <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>-->
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-free.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/free/" TITLE="Free Software">Free software</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/download/" TITLE="Rubrique download"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/download/" TITLE="Download">Download</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/suggest/" TITLE="Rubrique suggest"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/suggest/" TITLE="FS Suggest">FS Suggest</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/faq/" TITLE="Rubrique suggest"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/faq/" TITLE="FAQ">FAQ</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/docs"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="docs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+
+<!-- End header -->
+
+
+<!-- Nel Network Library -->
+<table width=100%><tr><td align=left><b>Nel Network Library</b></td><td align=right><b></b></td></TR></TABLE>
+<H1>Introduction</H1>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">This documents
+presents 'NeL Net', the NeL network library.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">NeL is a toolkit
+for the development of massively online universes. It provides the
+base technologies and a set of development methodologies for the
+development of both client and server code.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The NeL Net
+comprises code libraries for inter-server communication and
+server-client communication. It also provides implementations of the
+service executables required by the higher level layers of the code
+libraries.</P>
+<H2>Mission Statement</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The first objective
+of NeL Net is to provide a complete data transfer system that
+abstracts system specific code and provides mechanisms for complete
+control of bandwidth usage by the application code.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">NeL Net has a
+further objective of providing a complete toolkit, comprising further
+layers of library code and core service implementations, for the
+development of performance critical distributed program systems for
+massively multi user universe servers.
+</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The current feature
+requirement list for NeL Net corresponds to the application
+architecture for Nevrax' first product. This notably includes the
+requirement for a centralised login validation system at a separate
+geographical location from the universe servers.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Nevrax is currently
+developing a TCP/IP implementation of the low level network layers. A
+UDP implementation may be developed at a later date.</P>
+<H2>Target Platforms</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The Nevrax team
+expect to run GNU/Linux servers for their first product. As such, GNU/Linux
+is the primary target operating system.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">NeL Net is
+currently tested on GNU/Linux and Microsoft Windows NT platforms.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><BR>
+</P>
+<H1>Statement of requirements</H1>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The Network library
+addresses the following problems:</P>
+<H2>Client -&gt; Server communication</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The product
+ code (also referred to as app code) on the Client needs to be able
+ to pass blocks of information to the network layer for communication
+ to the server. The network code is responsible for ensuring that
+ the blocks of data arrive complete server-side. In the majority of
+ cases the blocks of data from the client will be significantly
+ smaller than the maximum packet size, which means that the network
+ code should not need to split data blocks across network packets.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">In order for
+ the app code to control the flow of data to the server, the network
+ code should buffer sends until either an app-definable time has
+ elapsed or an app-definable packet size has been reached.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Note: The
+ information sent from the client to the server will generally be
+ small in size, typically representing player actions such as
+ movement.
+ </P>
+</UL>
+<H2>Server -&gt; Client communication</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The app code
+ on the Server needs to be able to pass blocks of information to the
+ network layer for communication to the client. This problem is
+ exactly the same as the Client -&gt; Server problem, described
+ above.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The app code
+ is responsible for limiting the amount of data sent to each player
+ each second by prioritising the information to be dispatched. In
+ order to achieve this, the network code should buffer sends until
+ the app code explicitly requests a buffer flush. The network API
+ should provide the app code with the means of tracking the growth of
+ the output buffer.
+ </P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Note: The
+ information sent from the server to the client will often be large
+ in size, as the server must inform the player of changes of state
+ and position of all other characters and objects in the player's
+ vicinity.
+ </P>
+</UL>
+<H2>Inter-Process communication across servers</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The different
+ processes that make up the game need to be able to send messages to
+ each other to request or exchange information.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">There needs to
+ be a transparent routing mechanism that locates the services to
+ which messages are addressed and dispatches them.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">There needs to
+ be a standard framework that handles the queue of incoming messages
+ and manages the dispatch of messages to different modules within a
+ process. (e.g. A process that manages a set of AI controlled
+ characters may have one module that handles incoming environment
+ information, another that treats other processes' information
+ requests, and so on).</P>
+</UL>
+<H2>On the fly backup management</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">There needs to
+ be a reliable centralised system for backing up and retrieving world
+ data.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The system
+ must be capable of treating large volumes of data as 'transactions'.
+ This means that if a server goes down - when it comes back up
+ transactions will never be 'half complete'. Any transactions that
+ had been begun but not finished must be automatically undone.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The backup
+ system must be capable of managing a 'backup schedule' under which
+ it sends backup requests to scheduled processes and treats the
+ return data.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The backup
+ system must be capable of handling spontaneous backups from
+ different processes (particularly the player management processes
+ who are capable of backing up players at any time).</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The backup
+ system will be called upon to retrieve player data whenever a player
+ logs in. This operation must be reasonably fast.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The backup
+ system will be called upon to supply data to each system at system
+ initialisation time. The backup system should supply such systems
+ with their complete data sets.</P>
+</UL>
+<H2>General requirements</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The app code
+ is responsible for network traffic and must be capable of much lower
+ level access to the Network library than the above requirements
+ suggest.</P>
+</UL>
+<H2>Login/ logout management</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The product
+ that Nevrax is developing handles multiple instances of the game
+ world running on different server sets (known as 'Shards') with a
+ single centralised login manager.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The login
+ manager must:</P>
+ <UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Receive login
+ requests from client machines</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Validate
+ login requests with the account management system</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Provide the
+ client with the active shard list</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Negotiate a
+ connection with the shard of the client's choice</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Dispatch the
+ shard's IP address and a unique login key to the client</P>
+ </UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The login
+ manager must refuse attempts to login multiple times under the same
+ user account. This implies that the login manager must be warned
+ when players log out.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The login
+ system should include client and shard modules that provide a high
+ level interface to the login manager, encapsulating communication.</P>
+</UL>
+<H2>Account management</H2>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">No choice has
+ been made as to what solution to take to account management at NeL.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">It is
+ sufficient to know that we need a standard API for the account
+ management system capable of validating logins.</P>
+</UL>
+<H1>Technical design details</H1>
+<H2>Design outline</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The NeL network
+library provides a single solution which caters for all of the Server
+-&gt; Client, Client -&gt; Server and Inter-Process communication
+requirements.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">This solution is
+structured as a number of layers that are stacked on top of each
+other. The API gives the app programmers direct access to all of the
+layers.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">There is a program
+skeleton for the programs within a shard who are capable of
+communicating with each other via layer 5 messages. Programs of this
+form are referred to as 'Services'.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The backup system
+is a standalone service (a service being a process which exposes a
+standard message interface) which will encapsulate a 3rd party
+database.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The login manager
+and account manager are standalone programs at an isolated site.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">In a nutshell the
+network support layers include:</P>
+<TABLE WIDTH=568 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=1 CELLSPACING=0>
+ <COL WIDTH=112>
+ <COL WIDTH=450>
+ <TR VALIGN=TOP>
+ <TD WIDTH=112>
+ <P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 4</P>
+ <P STYLE="margin-top: 0.11cm">(Top Layer)</P>
+ </TD>
+ <TD WIDTH=450>
+ <P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Inter-Service
+ message addressing layer</P>
+ <P STYLE="margin-top: 0.11cm">Handles routing of messages to
+ services, encapsulating connection to naming service and handling
+ of lost connections.</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=112>
+ <P STYLE="margin-top: 0.11cm">Layer 3</P>
+ </TD>
+ <TD WIDTH=450>
+ <P STYLE="margin-top: 0.11cm">Message management layer<BR>(Handling
+ of asynchronous message passing, and callbacks)</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=112>
+ <P STYLE="margin-top: 0.11cm">Layer 2</P>
+ </TD>
+ <TD WIDTH=450>
+ <P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Serialised data
+ management layer</P>
+ <P STYLE="margin-top: 0.11cm">Supports the standard serial()
+ mechanism provided by NeL for handling data streams.</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=112>
+ <P STYLE="margin-top: 0.11cm">Layer 1</P>
+ </TD>
+ <TD WIDTH=450>
+ <P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Data block
+ management layer<BR>(buffering and structuring of data with
+ generic serialization system)</P>
+ <P STYLE="margin-top: 0.11cm">Also provides multi-threading
+ listening system for services</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=112>
+ <P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 0</P>
+ <P STYLE="margin-top: 0.11cm">(Bottom Layer)</P>
+ </TD>
+ <TD WIDTH=450>
+ <P STYLE="margin-top: 0.11cm">Data transfer layer<BR>Abstraction
+ of the network API and links (PC may be across a network, or local
+ messaging)</P>
+ </TD>
+ </TR>
+</TABLE>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><BR>
+</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><BR>
+</P>
+<H2>Layer 0</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 0 includes
+the following classes:</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CSock&nbsp;:
+ Base interface and behavior definition for hierarchical descendents</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CTcpSock&nbsp;:
+ Implementation of a socket class for the TCP/IP protocol</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CUdpSock&nbsp;:
+ Implementation of a socket class for the UDP protocol</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Layer 1</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 1 includes
+the following classes:</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CBufNetBase&nbsp;:
+ Buffer functionality common to client and server</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CBufClient&nbsp;:
+ Implements client-specific buffer functionality
+ </P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CBufServer&nbsp;:
+ Implements server-specific buffer functionality</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Layer 2</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 2 includes
+the following classes:</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CStreamNetBase&nbsp;:
+ Stream functionality common to client and server</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CStreamClient&nbsp;:
+ Client-specific stream functionality</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CStreamServer&nbsp;:
+ Server-specific stream functionality</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Layer 3</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Layer 3 includes
+the following classes:</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CCallbackNetBase&nbsp;:
+ Functionality common to client and server</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CCallbackClient&nbsp;:
+ Client-specific functionality</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CCallbackServer&nbsp;:
+ Server-specific functionality</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Layer 4</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>System Services</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The following
+system services are provided as part of NeL. For each of these
+services there exists an API class that may be instantiated in any
+app-specific service in order to encapsulate the system service's
+functionality.</P>
+<H3>The Naming Service</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">A standalone
+program used by all services to reference each other.</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">All services
+ connect to the naming service when they are initialised. They
+ inform the naming service of their name and whereabouts.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The naming
+ service is capable of informing any service of the whereabouts of
+ any other service.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">When more than
+ one instance of the same service connect to the naming service we
+ anticipate the possibility of the naming service managing simple
+ load balancing by distributing connection requests to the given
+ service across the available instances.</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I><B>API class:
+</B>CNamingClient</I></P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Generates
+ dynamic port numbers</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Registers the
+ application service's name with the naming service.</P>
+</UL>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Retrieves the
+ IP address and port number for a named service.</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I> See
+ technical documentation for details</I></P>
+</UL>
+<H3>The Time Service</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Provides standard
+universal time (in milliseconds) for the services within a shard and
+also for remote clients across the internet.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I><B>API class:
+</B>CUniTime - See technical documentation for details</I></P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Synchronises
+ the local machine time with the universal time</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Provides
+ access to the universal time</P>
+</UL>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I>See
+ technical documentation for details</I></P>
+</UL>
+<H3>The Log Service</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Provides a
+centralised information logging system.</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I><B>API class:
+</B>CNetDisplayer</I></P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Allows any log
+ message to be directed to the log service (instead of or as well as
+ the screen, a disk log file, etc)</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">This is a
+ displayer in the logging system (see misc library for details)</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><I>See
+ technical documentation for more details</I></P>
+</UL>
+<H2>The Service Skeleton</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The network library
+presents a generic service skeleton, which includes the base
+functions of a distributed service. At initialisation time it
+performs the following:</P>
+<UL>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Reads and
+ interprets configuration file and command line parameters</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Redirects the
+ system signals to NeL handler routines</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Connects to
+ the Log Service</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Connects to
+ the Time Service and synchronises clock with universal time</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Creates and
+ registers callbacks for network layer 3</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Sets up the
+ service's 'listen' socket</P>
+ <LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Registers
+ itself with the Naming Service</P>
+</UL>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The skeleton also
+handles exceptions and housekeeping when the program exits (whether
+cleanly or not)</P>
+<H2>Login system</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H3>Login manager(stand alone)</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H3>Login client API</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H3>Login shard API</H3>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Account manager (stand alone)</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">Stand alone program
+that handles the list of users permitted to connect to shards managed
+by a given Login Manager.
+</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">NeL provides a
+skeleton program that includes the communication protocols for the
+Login manager.</P>
+<H2>Backup Service</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+<H2>Administration</H2>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">NeL provides the
+base mechanisms for administering a NeL shard. Two basic services
+are provided:</P>
+<P STYLE="margin-top: 0.21cm; margin-bottom: 0cm">The <B>Admin
+Service </B>(1 per shard)</P>
+<UL>
+ <LI><P STYLE="margin-bottom: 0cm">Provides an entry point for
+ cluster administration.</P>
+ <LI><P STYLE="margin-bottom: 0cm">Provides access to logging
+ information and mechanisms for starting or restarting services</P>
+</UL>
+<P STYLE="margin-top: 0.21cm; margin-bottom: 0cm">The <B>Admin
+Executor</B> (1 per server)</P>
+<UL>
+ <LI><P STYLE="margin-bottom: 0cm">This is the relay for the Admin
+ Service.</P>
+ <LI><P STYLE="margin-bottom: 0cm">Fetches statistics on the local
+ machine and relays them to the Admin Service</P>
+ <LI><P STYLE="margin-bottom: 0cm">Launches and controls the services
+ running on the local machine.</P>
+</UL>
+<H1>Future plans</H1>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">The purely network
+library is typically self-contained, and not much subject to
+modification, unless one wants to change the entire paradigm around
+which the platform runs. Addition of a specific and non-standard
+network or network API would be the only reason one would change
+layer 1.
+</P>
+<P STYLE="margin-top: 0.11cm; margin-bottom: 0cm"><FONT COLOR="#0000ff">****
+Document under construction</FONT></P>
+
+<!-- footer -->
+<BR><FONT Size=+5>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML> \ No newline at end of file