aboutsummaryrefslogtreecommitdiff
path: root/docs/nelnet.php
blob: 3c0b89f48be5f4ad77854a54b0fff3b4ce818a93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
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="/inc/css/nevrax.css">
</HEAD>
<BODY MARGINHEIGHT="0" MARGINWIDTH="0">

<!-- uplinks -->
<TABLE CELLSPACING=0 CELLPADDING=0  BORDER=0>
 <TR>
        <TD WIDTH=16><IMG  SRC="/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
        <TD WIDTH=140 BGCOLOR=#dddddd><IMG  SRC="/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
        <TD WIDTH=16><IMG  SRC="/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
        <TD><IMG width=6 height=14 SRC="/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF='/'><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
        <TD><IMG  width=6 height=14  SRC="/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=><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="/inc/img/black_banner.jpg"><A HREF=""><IMG  SRC="/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="/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
	<TD WIDTH=140   BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG  SRC="/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="/news/" TITLE="Rubrique news"><img width=13 height=15  hspace=5 border=0 src=/inc/img/picto-news.gif ALT=#></A></td><td><a  class='linkbox' href="/news/" TITLE="News">News</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/mail/" TITLE="Rubrique mail"><img width=15 height=11  hspace=5 border=0 src=/inc/img/picto-mail.gif ALT=#></A></td><td><a  class='linkbox' href="/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/docs/" TITLE="Rubrique docs"><img width=14 height=16  hspace=5 border=0 src=/inc/img/picto-docs.gif ALT=#></A></td><td><a  class='linkbox' href="/docs/" TITLE="Documentation">Documentation</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/cvs/" TITLE="Rubrique cvs"><img width=13 height=17  hspace=5 border=0 src=/inc/img/picto-cvs.gif ALT=#></A></td><td><a  class='linkbox' href="/cvs/" TITLE="CVS Web">CVS</a></td></tr>
<!--			<tr><td ALIGN=middle><a  class='linkbox' href="/bugs/" TITLE="Rubrique bugs"><img width=20 height=16  hspace=5 border=0 src=/inc/img/picto-bugs.gif ALT=#></A></td><td><a  class='linkbox' href="/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>-->
			<tr><td ALIGN=middle><a  class='linkbox' href="/free/" TITLE="Rubrique license"><img width=18 height=12  hspace=5 border=0 src=/inc/img/picto-free.gif ALT=#></A></td><td><a  class='linkbox' href="/free/" TITLE="Free Software">Free software</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/download/" TITLE="Rubrique download"><img width=13 height=17  hspace=5 border=0 src=/inc/img/picto-cvs.gif ALT=#></A></td><td><a  class='linkbox' href="/download/" TITLE="Download">Download</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/suggest/" TITLE="Rubrique suggest"><img width=14 height=16  hspace=5 border=0 src=/inc/img/picto-docs.gif ALT=#></A></td><td><a  class='linkbox' href="/suggest/" TITLE="FS Suggest">FS Suggest</a></td></tr>
			<tr><td ALIGN=middle><a  class='linkbox' href="/faq/" TITLE="Rubrique suggest"><img width=14 height=16  hspace=5 border=0 src=/inc/img/picto-docs.gif ALT=#></A></td><td><a  class='linkbox' href="/faq/" TITLE="FAQ">FAQ</a></td></tr>
		</TABLE>
		</TD></TR></TABLE></TD></TR></TABLE>
		<!------ End Box  ------>
		

	</TD>
	<TD WIDTH=15><IMG  SRC="/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
	<TD ALIGN=left valign=top><IMG  SRC="/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">

<!-- title -->
<TABLE  background="/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0  BORDER=0 width=100%><tr><td>
<A HREF="/docs"><img src="/inc/img/t_docs.gif" ALT="docs"  HEIGHT=20 BORDER=0></A>
</td><td><IMG  SRC="/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=/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
</TR>
</TABLE>

</BODY>
</HTML>