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> <A CLASS=uplinks HREF='/'><b>Home</B></FONT></A> </TD>
<TD><IMG width=6 height=14 SRC="/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=><b>nevrax.com</B></FONT></A> </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 -> 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 -> 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 -> 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
-> Client, Client -> 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 :
Base interface and behavior definition for hierarchical descendents</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CTcpSock :
Implementation of a socket class for the TCP/IP protocol</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CUdpSock :
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 :
Buffer functionality common to client and server</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CBufClient :
Implements client-specific buffer functionality
</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CBufServer :
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 :
Stream functionality common to client and server</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CStreamClient :
Client-specific stream functionality</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CStreamServer :
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 :
Functionality common to client and server</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CCallbackClient :
Client-specific functionality</P>
<LI><P STYLE="margin-top: 0.11cm; margin-bottom: 0cm">CCallbackServer :
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> </FONT>
</TD>
<TD WIDTH=15><IMG SRC=/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
</TR>
</TABLE>
</BODY>
</HTML>
|