aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a03876.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/doxygen/nel/a03876.html3204
1 files changed, 3204 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a03876.html b/docs/doxygen/nel/a03876.html
new file mode 100644
index 00000000..35c8b38e
--- /dev/null
+++ b/docs/doxygen/nel/a03876.html
@@ -0,0 +1,3204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: NLNET::IService class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NLNET::IService Class Reference</h1><code>#include &lt;<a class="el" href="a06365.html">service.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Base class for all network services. You must inherite from this class to create your own service. You must not create ctor and dtor but implement <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> and <a class="el" href="a03876.html#NLNET_1_1IServicez2089_1">release()</a> methods. You have to create a global callback array called CallbackArray.<p>
+service_howto<p>
+Temporary command line arguments : <ul>
+<li>-n</li>
+</ul>
+<dl compact><dt><b>Author:</b></dt><dd>Vianney Lecroart <p>
+Olivier Cado <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2000 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00177">177</a> of file <a class="el" href="a06365.html">service.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>get methods. These methods provide a way to read internal service variables.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a> (char argName)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; std::string &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_1">getArgs</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns arguments of the program pass from the user to the program using parameters (ie: "myprog param1 param2"). <a href="#NLNET_1_1IServicez2091_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_2">getRecordingState</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the recording state (don't needed if you use layer5). <a href="#NLNET_1_1IServicez2091_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::string &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_3">getServiceAliasName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current service alias name setted by AES. <a href="#NLNET_1_1IServicez2091_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05379.html#a93">TServiceId</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_4">getServiceId</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the service identifier. <a href="#NLNET_1_1IServicez2091_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::string &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_5">getServiceLongName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current service long name (ie: test_serivce). <a href="#NLNET_1_1IServicez2091_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::string &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_6">getServiceShortName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current service short name (ie: TS). <a href="#NLNET_1_1IServicez2091_6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_7">getServiceUnifiedName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current service unified name that is alias/short-id or short-id if alias is empty. <a href="#NLNET_1_1IServicez2091_7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_8">getStatus</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the status. <a href="#NLNET_1_1IServicez2091_8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a> (char argName)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if the argument if present in the command line (ie: haveArg('p') will return true if -p is in the command line). <a href="#NLNET_1_1IServicez2091_9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03876.html">IService</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2091_10">getInstance</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the instance of the service to access to methods/variables class. <a href="#NLNET_1_1IServicez2091_10"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>variables. These variables are used by the internal system.</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_0">_AliasName</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Array of arguments pass from the command line. <a href="#NLNET_1_1IServicez2101_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03917.html">TUnifiedCallbackItem</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_2">_CallbackArray</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_3">_CallbackArraySize</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_4">_DontUseAES</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if the service don't use the admin executor service <a href="#NLNET_1_1IServicez2101_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if the service don't use the naming service <a href="#NLNET_1_1IServicez2101_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_6">_Initialized</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if the service initialisation is passed <a href="#NLNET_1_1IServicez2101_6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Recording state. <a href="#NLNET_1_1IServicez2101_8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_9">_ResetMeasures</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Require to reset the hierarchical timer. <a href="#NLNET_1_1IServicez2101_9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_10">_ShardId</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shard Id. <a href="#NLNET_1_1IServicez2101_10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current service name sets by the actual service when declaring NLNET_SERVICE_MAIN. <a href="#NLNET_1_1IServicez2101_11"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05379.html#a93">TServiceId</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the service id of this sevice <a href="#NLNET_1_1IServicez2101_12"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_13">_Status</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the status of this service (the status is give to the at the release time) <a href="#NLNET_1_1IServicez2101_13"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a05378.html#a242">NLMISC::TTime</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_14">_UpdateTimeout</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Select timeout value in milliseconds between to call of user <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>. <a href="#NLNET_1_1IServicez2101_14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The directory where the configfile is. <a href="#NLNET_1_1IServicez2101_15"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; <a class="el" href="a04558.html#a9">uint16</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_16">ListeningPort</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Listening port of this service. <a href="#NLNET_1_1IServicez2101_16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_17">LogDirectory</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The directory where the logfiles are. <a href="#NLNET_1_1IServicez2101_17"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_18">RunningDirectory</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The directory where the service is running. <a href="#NLNET_1_1IServicez2101_18"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_19">Version</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03876.html">IService</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2101_20">_Instance</a> = NULL</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Instance of this service (singleton). <a href="#NLNET_1_1IServicez2101_20"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicea0">getPort</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicea1">getShardId</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicea2">setVersion</a> (const std::string &amp;version)</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">set methods. These methods provide a way to modify internal service variables.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2093_0">exit</a> (<a class="el" href="a04558.html#a14">sint</a> code=0x10)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2093_1">setStatus</a> (<a class="el" href="a04558.html#a14">sint</a> status)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2093_2">setUpdateTimeout</a> (<a class="el" href="a05378.html#a242">NLMISC::TTime</a> timeout)</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">User overload methods. These methods can be overload by the user do handle init, update and release operation.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes the service (must be called before the first call to <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>). <a href="#NLNET_1_1IServicez2089_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2089_1">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Finalization. Release the service. For example, this founction free all allocation made in the <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> function. <a href="#NLNET_1_1IServicez2089_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function is called every "frame" (you must call <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> before). It returns false if the service is stopped. <a href="#NLNET_1_1IServicez2089_2"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">private methods. These methods are used by internal system but can't be put in private, don't use them.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_0">IService</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ctor. You must not inherit ctor but overload <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> function. <a href="#NLNET_1_1IServicez2097_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_1">main</a> (const char *serviceShortName, const char *serviceLongName, <a class="el" href="a04558.html#a9">uint16</a> servicePort, const char *configDir, const char *logDir, const char *compilationDate)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This main is called by the macro (service5 says if we have to use layer5 or not). <a href="#NLNET_1_1IServicez2097_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_2">requireResetMeasures</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Require to reset the hierarchical timer. <a href="#NLNET_1_1IServicez2097_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_3">setArgs</a> (const char *args)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the command line and init _Args variable. You must call this before calling <a class="el" href="a03876.html#NLNET_1_1IServicez2097_1">main()</a>. <a href="#NLNET_1_1IServicez2097_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_4">setArgs</a> (int argc, const char **argv)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the command line and init _Args variable. You must call this before calling <a class="el" href="a03876.html#NLNET_1_1IServicez2097_1">main()</a>. <a href="#NLNET_1_1IServicez2097_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_5">setCallbackArray</a> (<a class="el" href="a03917.html">TUnifiedCallbackItem</a> *array, <a class="el" href="a04558.html#a15">uint</a> nbelem)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the default callback array given from the macro. <a href="#NLNET_1_1IServicez2097_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>virtual&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2097_6">~IService</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dtor. You must not inherit dtor but overload <a class="el" href="a03876.html#NLNET_1_1IServicez2089_1">release()</a> function. <a href="#NLNET_1_1IServicez2097_6"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServiceo0">SaveFilesDirectory</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03727.html">NLMISC::CWindowDisplayer</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The window displayer instance. <a href="#NLNET_1_1IServiceo1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03646.html">NLMISC::CVariable</a>&lt; std::string &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServiceo2">WriteFilesDirectory</a></td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">variables. These variables can be read/modified by the user.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02813.html">NLMISC::CLog</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2095_0">CommandLog</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02401.html">NLMISC::CConfigFile</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a></td></tr>
+
+<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr>
+<tr><td colspan="2"><div class="groupHeader">methods. These methods are used by internal system.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicez2099_0">setRecordingState</a> (<a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a> rec)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Changes the recording state (use if you know what you are doing). <a href="#NLNET_1_1IServicez2099_0"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen0">cbAESConnection</a> (const std::string &amp;serviceName, <a class="el" href="a04558.html#a9">uint16</a> sid, void *arg)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen1">cbDirectoryChanged</a> (const <a class="el" href="a03648.html">NLMISC::IVariable</a> &amp;var)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen2">cbReceiveShardId</a> (<a class="el" href="a02918.html">NLNET::CMessage</a> &amp;msgin, const std::string &amp;serviceName, <a class="el" href="a04558.html#a9">uint16</a> serviceId)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>struct&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen3">getWinDisplayerInfoClass</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen4">serviceGetView</a> (<a class="el" href="a04558.html#a11">uint32</a> rid, const std::string &amp;rawvarpath, std::vector&lt; std::string &gt; &amp;vara, std::vector&lt; std::string &gt; &amp;vala)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>struct&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03876.html#NLNET_1_1IServicen5">serviceInfoClass</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NLNET_1_1IServicez2097_0" doxytag="NLNET::IService::IService" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NLNET::IService::IService </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Ctor. You must not inherit ctor but overload <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> function.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l00278">278</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a06364.html#l00230">NLNET::cbDirectoryChanged()</a>.
+<p>
+<div class="fragment"><pre>00278 :
+00279 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>(0),
+00280 <a class="code" href="a03876.html#NLNET_1_1IServiceo2">WriteFilesDirectory</a>(<span class="stringliteral">"WriteFilesDirectory"</span>, <span class="stringliteral">"directory where to save generic shard information (packed_sheets for example)"</span>, <span class="stringliteral">"."</span>, 0, <span class="keyword">true</span>, cbDirectoryChanged),
+00281 <a class="code" href="a03876.html#NLNET_1_1IServiceo0">SaveFilesDirectory</a>(<span class="stringliteral">"SaveFilesDirectory"</span>, <span class="stringliteral">"directory where to save specific shard information (shard time for example)"</span>, <span class="stringliteral">"."</span>, 0, <span class="keyword">true</span>, cbDirectoryChanged),
+00282 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_16">ListeningPort</a>(<span class="stringliteral">"ListeningPort"</span>, <span class="stringliteral">"listening port for this service"</span>, 0, 0, <span class="keyword">true</span>),
+00283 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a>(CCallbackNetBase::Off),
+00284 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_14">_UpdateTimeout</a>(100),
+00285 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a>(0),
+00286 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_13">_Status</a>(0),
+00287 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_6">_Initialized</a>(<span class="keyword">false</span>),
+00288 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a>(<span class="stringliteral">"ConfigDirectory"</span>, <span class="stringliteral">"directory where config files are"</span>, <span class="stringliteral">"."</span>, 0, <span class="keyword">true</span>, cbDirectoryChanged),
+00289 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_17">LogDirectory</a>(<span class="stringliteral">"LogDirectory"</span>, <span class="stringliteral">"directory where the service is logging"</span>, <span class="stringliteral">"."</span>, 0, <span class="keyword">true</span>, cbDirectoryChanged),
+00290 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_18">RunningDirectory</a>(<span class="stringliteral">"RunningDirectory"</span>, <span class="stringliteral">"directory where the service is running on"</span>, <span class="stringliteral">"."</span>, 0, <span class="keyword">true</span>, cbDirectoryChanged),
+00291 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_19">Version</a>(<span class="stringliteral">"Version"</span>, <span class="stringliteral">"Version of the shard"</span>, <span class="stringliteral">""</span>),
+00292 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_2">_CallbackArray</a> (0),
+00293 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_3">_CallbackArraySize</a> (0),
+00294 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a>(<span class="keyword">false</span>),
+00295 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_4">_DontUseAES</a>(<span class="keyword">false</span>),
+00296 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_9">_ResetMeasures</a>(<span class="keyword">false</span>)
+00297 {
+00298 <span class="comment">// Singleton</span>
+00299 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_20">_Instance</a> = <span class="keyword">this</span>;
+00300 }
+
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_6" doxytag="NLNET::IService::~IService" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual NLNET::IService::~<a class="el" href="a03876.html">IService</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Dtor. You must not inherit dtor but overload <a class="el" href="a03876.html#NLNET_1_1IServicez2089_1">release()</a> function.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00300">300</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+<div class="fragment"><pre>00300 {}
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NLNET_1_1IServicez2093_0" doxytag="NLNET::IService::exit" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::exit </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>code</em> = 0x10 </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Call this function if you want the service quits next loop. The code will be returned outside of the application. <dl compact><dt><b>Warning:</b></dt><dd>If you set the code to 0, it ll NOT exit the service </dd></dl>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l01333">1333</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a06364.html#l00117">NLNET::ExitSignalAsked</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>01334 {
+01335 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Somebody called IService::exit(), I have to quit"</span>);
+01336 <a class="code" href="a05379.html#a48">ExitSignalAsked</a> = code;
+01337 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_0" doxytag="NLNET::IService::getArg" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> string NLNET::IService::getArg </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>argName</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the parameter linked to an option (ie: getArg('p') will return "toto" if -ptoto is in the command line) It'll thrown an Exception if the argName is not found
+<p>
+Definition at line <a class="el" href="a06364.html#l00319">319</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00320 {
+00321 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a11">uint32</a> i = 0; i &lt; <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>.size(); i++)
+00322 {
+00323 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i].size() &gt;= 2 &amp;&amp; <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i][0] == <span class="charliteral">'-'</span>)
+00324 {
+00325 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i][1] == argName)
+00326 {
+00327 <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i].substr(2);
+00328 }
+00329 }
+00330 }
+00331 <span class="keywordflow">throw</span> <a class="code" href="a02482.html">Exception</a> (<span class="stringliteral">"Parameter '-%c' is not found in command line"</span>, argName);
+00332 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_1" doxytag="NLNET::IService::getArgs" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;std::string&gt;&amp; NLNET::IService::getArgs </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns arguments of the program pass from the user to the program using parameters (ie: "myprog param1 param2").
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00221">221</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+<div class="fragment"><pre>00221 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_10" doxytag="NLNET::IService::getInstance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03876.html">IService</a>* NLNET::IService::getInstance </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the instance of the service to access to methods/variables class.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00200">200</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a05622.html#l00290">nlassert</a>.
+<p>
+Referenced by <a class="el" href="a05421.html#l00079">NLAILINK::getLocalServerID()</a>.
+<p>
+<div class="fragment"><pre>00200 { <a class="code" href="a04199.html#a6">nlassert</a> (_Instance != NULL); <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_20">_Instance</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicea0" doxytag="NLNET::IService::getPort" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a9">uint16</a> NLNET::IService::getPort </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00317">317</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00339">ListeningPort</a>, and <a class="el" href="a05981.html#l00098">uint16</a>.
+<p>
+<div class="fragment"><pre>00317 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_16">ListeningPort</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_2" doxytag="NLNET::IService::getRecordingState" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a> NLNET::IService::getRecordingState </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the recording state (don't needed if you use layer5).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00238">238</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+<div class="fragment"><pre>00238 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_3" doxytag="NLNET::IService::getServiceAliasName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::string&amp; NLNET::IService::getServiceAliasName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the current service alias name setted by AES.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00209">209</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00347">_AliasName</a>.
+<p>
+<div class="fragment"><pre>00209 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_0">_AliasName</a>; };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_4" doxytag="NLNET::IService::getServiceId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a05379.html#a93">TServiceId</a> NLNET::IService::getServiceId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the service identifier.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00215">215</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00356">_SId</a>, and <a class="el" href="a06090.html#l00042">NLNET::TServiceId</a>.
+<p>
+<div class="fragment"><pre>00215 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_5" doxytag="NLNET::IService::getServiceLongName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::string&amp; NLNET::IService::getServiceLongName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the current service long name (ie: test_serivce).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00206">206</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00346">_LongName</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00206 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a>; };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_6" doxytag="NLNET::IService::getServiceShortName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::string&amp; NLNET::IService::getServiceShortName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the current service short name (ie: TS).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00203">203</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00345">_ShortName</a>.
+<p>
+<div class="fragment"><pre>00203 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a>; };
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_7" doxytag="NLNET::IService::getServiceUnifiedName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string NLNET::IService::getServiceUnifiedName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the current service unified name that is alias/short-id or short-id if alias is empty.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l01348">1348</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a06365.html#l00347">_AliasName</a>, <a class="el" href="a06365.html#l00345">_ShortName</a>, <a class="el" href="a06365.html#l00356">_SId</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05646.html#l01119">res</a>, and <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>.
+<p>
+<div class="fragment"><pre>01349 {
+01350 <a class="code" href="a04199.html#a6">nlassert</a> (!<a class="code" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a>.empty());
+01351 string <a class="code" href="a04223.html#a643">res</a>;
+01352 <span class="keywordflow">if</span> (!<a class="code" href="a03876.html#NLNET_1_1IServicez2101_0">_AliasName</a>.empty())
+01353 {
+01354 <a class="code" href="a04223.html#a643">res</a> = <a class="code" href="a03876.html#NLNET_1_1IServicez2101_0">_AliasName</a>+<span class="stringliteral">"/"</span>;
+01355 }
+01356 <a class="code" href="a04223.html#a643">res</a> += <a class="code" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a>;
+01357 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a> != 0)
+01358 {
+01359 <a class="code" href="a04223.html#a643">res</a> += <span class="stringliteral">"-"</span>;
+01360 <a class="code" href="a04223.html#a643">res</a> += <a class="code" href="a05378.html#a244">toString</a> (_SId);
+01361 }
+01362 <span class="keywordflow">return</span> <a class="code" href="a04223.html#a643">res</a>;
+01363 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicea1" doxytag="NLNET::IService::getShardId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> NLNET::IService::getShardId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00319">319</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00387">_ShardId</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00319 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_10">_ShardId</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_8" doxytag="NLNET::IService::getStatus" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NLNET::IService::getStatus </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the status.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00218">218</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00359">_Status</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00218 { <span class="keywordflow">return</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_13">_Status</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2091_9" doxytag="NLNET::IService::haveArg" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NLNET::IService::haveArg </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">char&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>argName</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns true if the argument if present in the command line (ie: haveArg('p') will return true if -p is in the command line).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l00304">304</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00305 {
+00306 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a11">uint32</a> i = 0; i &lt; <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>.size(); i++)
+00307 {
+00308 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i].size() &gt;= 2 &amp;&amp; <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i][0] == <span class="charliteral">'-'</span>)
+00309 {
+00310 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>[i][1] == argName)
+00311 {
+00312 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00313 }
+00314 }
+00315 }
+00316 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00317 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2089_0" doxytag="NLNET::IService::init" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual void NLNET::IService::init </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Initializes the service (must be called before the first call to <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00185">185</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00185 {}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_1" doxytag="NLNET::IService::main" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> NLNET::IService::main </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>serviceShortName</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>serviceLongName</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>servicePort</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>configDir</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>logDir</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>compilationDate</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This main is called by the macro (service5 says if we have to use layer5 or not).
+<p>
+
+<p>
+Layer5 Startup
+<p>
+Definition at line <a class="el" href="a06364.html#l00419">419</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a06365.html#l00347">_AliasName</a>, <a class="el" href="a06365.html#l00376">_CallbackArraySize</a>, <a class="el" href="a06365.html#l00381">_DontUseAES</a>, <a class="el" href="a06365.html#l00379">_DontUseNS</a>, <a class="el" href="a06365.html#l00346">_LongName</a>, <a class="el" href="a06365.html#l00384">_ResetMeasures</a>, <a class="el" href="a06365.html#l00387">_ShardId</a>, <a class="el" href="a06365.html#l00345">_ShortName</a>, <a class="el" href="a06365.html#l00356">_SId</a>, <a class="el" href="a06365.html#l00353">_UpdateTimeout</a>, <a class="el" href="a06554.html#l00086">CTimeoutAssertionThread::activate()</a>, <a class="el" href="a06645.html#l01188">NLNET::CUnifiedNetwork::addCallbackArray()</a>, <a class="el" href="a05943.html#l00115">NLMISC::CLog::addDisplayer()</a>, <a class="el" href="a05597.html#l00058">NLMISC::CConfigFile::CVar::asInt()</a>, <a class="el" href="a05621.html#l00093">NLMISC::AssertLog</a>, <a class="el" href="a05810.html#l00385">NLNET::CInetAddress::asString()</a>, <a class="el" href="a05597.html#l00097">NLMISC::CConfigFile::CVar::asString()</a>, <a class="el" href="a05621.html#l00974">NLMISC::beep()</a>, <a class="el" href="a05379.html#a170">NLNET::Bench()</a>, <a class="el" href="a06364.html#l00266">NLNET::builtinServiceCallbacks</a>, <a class="el" href="a06364.html#l00405">NLNET::cbExecuteCommands()</a>, <a class="el" href="a06364.html#l00361">NLNET::cbLogFilter()</a>, <a class="el" href="a05621.html#l00893">NLMISC::changeLogDirectory()</a>, <a class="el" href="a05977.html#l00062">NLMISC::CMemDisplayer::clear()</a>, <a class="el" href="a06365.html#l00273">CommandLog</a>, <a class="el" href="a06364.html#l00132">NLNET::CompilationDate</a>, <a class="el" href="a06365.html#l00365">ConfigDirectory</a>, <a class="el" href="a06365.html#l00270">ConfigFile</a>, <a class="el" href="a06751.html#l00120">NLMISC::CWindowDisplayer::create()</a>, <a class="el" href="a06751.html#l00096">NLMISC::CWindowDisplayer::createLabel()</a>, <a class="el" href="a05621.html#l00092">NLMISC::DebugLog</a>, <a class="el" href="a06554.html#l00095">CTimeoutAssertionThread::desactivate()</a>, <a class="el" href="a05943.html#l00323">NLMISC::CLog::displayNL()</a>, <a class="el" href="a05621.html#l00089">NLMISC::ErrorLog</a>, <a class="el" href="a05597.html#l00461">NLMISC::CConfigFile::exists()</a>, <a class="el" href="a06364.html#l00117">NLNET::ExitSignalAsked</a>, <a class="el" href="a06364.html#l00319">getArg()</a>, <a class="el" href="a06645.html#l01481">NLNET::CUnifiedNetwork::getInstance()</a>, <a class="el" href="a06365.html#l00206">getServiceLongName()</a>, <a class="el" href="a06365.html#l00218">getStatus()</a>, <a class="el" href="a05597.html#l00431">NLMISC::CConfigFile::getVar()</a>, <a class="el" href="a05597.html#l00441">NLMISC::CConfigFile::getVarPtr()</a>, <a class="el" href="a05788.html#l00056">H_AUTO</a>, <a class="el" href="a06364.html#l00304">haveArg()</a>, <a class="el" href="a05621.html#l00091">NLMISC::InfoLog</a>, <a class="el" href="a06365.html#l00185">init()</a>, <a class="el" href="a06665.html#l00050">NLMISC::IVariable::init()</a>, <a class="el" href="a05391.html#l00636">NLNET::initAdmin()</a>, <a class="el" href="a06364.html#l00211">NLNET::initSignal()</a>, <a class="el" href="a05637.html#l00061">IsDebuggerPresent</a>, <a class="el" href="a06364.html#l00133">NLNET::LaunchingDate</a>, <a class="el" href="a06365.html#l00339">ListeningPort</a>, <a class="el" href="a05597.html#l00244">NLMISC::CConfigFile::load()</a>, <a class="el" href="a05977.html#l00058">NLMISC::CMemDisplayer::lockStrings()</a>, <a class="el" href="a06365.html#l00368">LogDirectory</a>, <a class="el" href="a06364.html#l00154">NLNET::MyTAT</a>, <a class="el" href="a06364.html#l00135">NLNET::NbUserUpdate</a>, <a class="el" href="a06364.html#l00097">NLNET::NegFiltersNames</a>, <a class="el" href="a05379.html#a169">NLNET::NetSpeedLoop()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00101">nldebug</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05586.html#l00073">NLMISC::nlSleep()</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a06365.html#l00191">release()</a>, <a class="el" href="a05943.html#l00150">NLMISC::CLog::removeDisplayer()</a>, <a class="el" href="a06365.html#l00371">RunningDirectory</a>, <a class="el" href="a06365.html#l00313">SaveFilesDirectory</a>, <a class="el" href="a05670.html#l00128">NLNET::sendEmail()</a>, <a class="el" href="a05621.html#l00110">NLMISC::setAssert()</a>, <a class="el" href="a05597.html#l00647">NLMISC::CConfigFile::setCallback()</a>, <a class="el" href="a05670.html#l00349">NLNET::setDefaultEmailParams()</a>, <a class="el" href="a06751.html#l00107">NLMISC::CWindowDisplayer::setLabel()</a>, <a class="el" href="a05943.html#l00079">NLMISC::CLog::setProcessName()</a>, <a class="el" href="a06331.html#l00067">NLMISC::setReportEmailFunction()</a>, <a class="el" href="a05673.html#l00101">NLMISC::CEntityId::setServiceId()</a>, <a class="el" href="a06365.html#l00251">setStatus()</a>, <a class="el" href="a06752.html#l00073">NLMISC::CWindowDisplayer::setTitleBar()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05538.html#l02935">size</a>, <a class="el" href="a05597.html#l00216">NLMISC::CConfigFile::CVar::size()</a>, <a class="el" href="a05586.html#l00581">NLMISC::strupr()</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, <a class="el" href="a06553.html#l00047">NLMISC::TTime</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05981.html#l00102">uint64</a>, <a class="el" href="a05981.html#l00096">uint8</a>, <a class="el" href="a05977.html#l00060">NLMISC::CMemDisplayer::unlockStrings()</a>, <a class="el" href="a06751.html#l00077">NLMISC::CWindowDisplayer::update()</a>, <a class="el" href="a06365.html#l00188">update()</a>, <a class="el" href="a05391.html#l00648">NLNET::updateAdmin()</a>, <a class="el" href="a05379.html#a168">NLNET::UserSpeedLoop()</a>, <a class="el" href="a05646.html#l00237">v</a>, <a class="el" href="a05646.html#l00236">w</a>, <a class="el" href="a05621.html#l00090">NLMISC::WarningLog</a>, <a class="el" href="a06365.html#l00305">WindowDisplayer</a>, <a class="el" href="a05646.html#l00236">x</a>, and <a class="el" href="a05646.html#l00236">y</a>.
+<p>
+<div class="fragment"><pre>00420 {
+00421 <span class="keywordtype">bool</span> userInitCalled = <span class="keyword">false</span>;
+00422 <span class="comment">// bool resyncEvenly = false;</span>
+00423 <a class="code" href="a02402.html">CConfigFile::CVar</a> *var = NULL;
+00424
+00425 <span class="comment">// a short name service can't be a number</span>
+00426 <a class="code" href="a04199.html#a6">nlassert</a> (atoi(serviceShortName) == 0);
+00427
+00428 <span class="keywordflow">try</span>
+00429 {
+00430 <span class="comment">//</span>
+00431 <span class="comment">// Init parameters</span>
+00432 <span class="comment">//</span>
+00433
+00434 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a> = serviceShortName;
+00435 CLog::setProcessName (_ShortName);
+00436
+00437 <span class="comment">// get the path where to run the service if any in the command line</span>
+00438 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'A'</span>))
+00439 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_18">RunningDirectory</a> = CPath::standardizePath(<a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'A'</span>));
+00440
+00441 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a> = CPath::standardizePath(configDir);
+00442 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_17">LogDirectory</a> = CPath::standardizePath(logDir);
+00443 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a> = serviceLongName;
+00444
+00445 <a class="code" href="a05379.html#a52">CompilationDate</a> = compilationDate;
+00446
+00447 <a class="code" href="a05379.html#a53">LaunchingDate</a> = CTime::getSecondsSince1970();
+00448
+00449 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_16">ListeningPort</a> = servicePort;
+00450
+00451 <a class="code" href="a05378.html#a353">setReportEmailFunction</a> ((<span class="keywordtype">void</span>*)sendEmail);
+00452 <a class="code" href="a05379.html#a135">setDefaultEmailParams</a> (<span class="stringliteral">"gw.nevrax.com"</span>, <span class="stringliteral">""</span>, <span class="stringliteral">"lecroart@nevrax.com"</span>);
+00453
+00454
+00455 <span class="comment">//</span>
+00456 <span class="comment">// Load the config file</span>
+00457 <span class="comment">//</span>
+00458
+00459 <span class="comment">// get the config file dir if any in the command line</span>
+00460 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'C'</span>))
+00461 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a> = CPath::standardizePath(<a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'C'</span>));
+00462
+00463 string cfn = <a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a>.c_str() + <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a> + <span class="stringliteral">".cfg"</span>;
+00464 <span class="keywordflow">if</span> (!CFile::fileExists(<a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a>.c_str() + <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a> + <span class="stringliteral">".cfg"</span>))
+00465 {
+00466 <span class="comment">// check if the default exists</span>
+00467 <span class="keywordflow">if</span> (!CFile::fileExists(<a class="code" href="a03876.html#NLNET_1_1IServicez2101_15">ConfigDirectory</a>.c_str() + <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a> + <span class="stringliteral">"_default.cfg"</span>))
+00468 {
+00469 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"SERVICE: The config file '%s' is not found, neither the default one, can't launch the service"</span>, cfn.c_str());
+00470 }
+00471 <span class="keywordflow">else</span>
+00472 {
+00473 <span class="comment">// create the basic .cfg that link the default one</span>
+00474 FILE *fp = fopen (cfn.c_str(), <span class="stringliteral">"w"</span>);
+00475 <span class="keywordflow">if</span> (fp == NULL)
+00476 {
+00477 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"SERVICE: Can't create config file '%s'"</span>, cfn.c_str());
+00478 }
+00479 fprintf(fp, <span class="stringliteral">"// link the default config file for %s\n"</span>, <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a>.c_str());
+00480 fprintf(fp, <span class="stringliteral">"RootConfigFilename = \"%s_default.cfg\";\n"</span>, <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a>.c_str());
+00481 fclose (fp);
+00482 }
+00483 }
+00484
+00485 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea12">load</a> (cfn);
+00486
+00487 <span class="comment">// setup variable with config file variable</span>
+00488 <a class="code" href="a03648.html#NLMISC_1_1IVariablee3">IVariable::init</a> (ConfigFile);
+00489
+00490 <span class="comment">// we have to call this again because the config file can changed this variable but the cmd line is more prioritary</span>
+00491 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'A'</span>))
+00492 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_18">RunningDirectory</a> = CPath::standardizePath(<a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'A'</span>));
+00493
+00494
+00495 <span class="comment">//</span>
+00496 <span class="comment">// Init debug/log stuffs (must be first things otherwise we can't log if errors)</span>
+00497 <span class="comment">//</span>
+00498
+00499 <span class="comment">// get the log dir if any in the command line</span>
+00500 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'L'</span>))
+00501 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_17">LogDirectory</a> = CPath::standardizePath(<a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'L'</span>));
+00502
+00503 <a class="code" href="a05378.html#a297">changeLogDirectory</a> (LogDirectory);
+00504
+00505 <span class="comment">// we create the log with service name filename ("test_service.log" for example)</span>
+00506 fd.setParam (<a class="code" href="a03876.html#NLNET_1_1IServicez2101_17">LogDirectory</a>.c_str() + <a class="code" href="a03876.html#NLNET_1_1IServicez2101_7">_LongName</a> + <span class="stringliteral">".log"</span>, <span class="keyword">false</span>);
+00507
+00508 <a class="code" href="a05378.html#a13">DebugLog</a>-&gt;addDisplayer (&amp;fd);
+00509 <a class="code" href="a05378.html#a12">InfoLog</a>-&gt;addDisplayer (&amp;fd);
+00510 <a class="code" href="a05378.html#a11">WarningLog</a>-&gt;addDisplayer (&amp;fd);
+00511 <a class="code" href="a05378.html#a14">AssertLog</a>-&gt;addDisplayer (&amp;fd);
+00512 <a class="code" href="a05378.html#a10">ErrorLog</a>-&gt;addDisplayer (&amp;fd);
+00513 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_0">CommandLog</a>.<a class="code" href="a02813.html#NLNET_1_1CNetLoga0">addDisplayer</a> (&amp;fd, <span class="keyword">true</span>);
+00514
+00515 <span class="comment">//</span>
+00516 <span class="comment">// Init the hierarchical timer</span>
+00517 <span class="comment">//</span>
+00518
+00519 CHTimer::startBench(<span class="keyword">false</span>, <span class="keyword">true</span>);
+00520 CHTimer::endBench();
+00521
+00522
+00523 <span class="comment">//</span>
+00524 <span class="comment">// Set the assert mode</span>
+00525 <span class="comment">//</span>
+00526
+00527 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea5">exists</a> (<span class="stringliteral">"Assert"</span>))
+00528 <a class="code" href="a05378.html#a292">setAssert</a> (<a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea9">getVar</a>(<span class="stringliteral">"Assert"</span>).asInt() == 1);
+00529
+00530 <span class="comment">//</span>
+00531 <span class="comment">// Set the shard Id</span>
+00532 <span class="comment">//</span>
+00533
+00534 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"NoWSShardId"</span>)) != NULL)
+00535 {
+00536 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_10">_ShardId</a> = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00537 }
+00538 <span class="keywordflow">else</span>
+00539 {
+00540 <span class="comment">// something high enough as default</span>
+00541 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_10">_ShardId</a> = 666;
+00542 }
+00543
+00544 <span class="comment">//</span>
+00545 <span class="comment">// Set the negative filter from the config file</span>
+00546 <span class="comment">//</span>
+00547
+00548 <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keywordtype">char</span> **name = <a class="code" href="a05379.html#a46">NegFiltersNames</a>; *name; name++)
+00549 {
+00550 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (*name)) != NULL)
+00551 {
+00552 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea17">setCallback</a> (*name, cbLogFilter);
+00553 <a class="code" href="a05379.html#a177">cbLogFilter</a>(*var);
+00554 }
+00555 }
+00556
+00557 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea17">setCallback</a> (<span class="stringliteral">"Commands"</span>, cbExecuteCommands);
+00558 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"Commands"</span>)) != NULL)
+00559 {
+00560 <a class="code" href="a05379.html#a178">cbExecuteCommands</a>(*var);
+00561 }
+00562
+00563
+00564 <span class="comment">//</span>
+00565 <span class="comment">// Create the window if needed</span>
+00566 <span class="comment">//</span>
+00567
+00568 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"WindowStyle"</span>)) != NULL)
+00569 {
+00570 string disp = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a> ();
+00571 <span class="preprocessor">#ifdef NL_USE_GTK</span>
+00572 <span class="preprocessor"></span> <span class="keywordflow">if</span> (disp == <span class="stringliteral">"GTK"</span>)
+00573 {
+00574 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> = <span class="keyword">new</span> CGtkDisplayer (<span class="stringliteral">"DEFAULT_WD"</span>);
+00575 }
+00576 <span class="preprocessor">#endif // NL_USE_GTK</span>
+00577 <span class="preprocessor"></span>
+00578 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00579 <span class="preprocessor"></span> <span class="keywordflow">if</span> (disp == <span class="stringliteral">"WIN"</span>)
+00580 {
+00581 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> = <span class="keyword">new</span> CWinDisplayer (<span class="stringliteral">"DEFAULT_WD"</span>);
+00582 }
+00583 <span class="preprocessor">#endif // NL_OS_WINDOWS</span>
+00584 <span class="preprocessor"></span>
+00585 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> == NULL &amp;&amp; disp != <span class="stringliteral">"NONE"</span>)
+00586 {
+00587 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"SERVICE: Unknown value for the WindowStyle (should be GTK, WIN or NONE), use no window displayer"</span>);
+00588 }
+00589 }
+00590
+00591 vector &lt;pair&lt;string,uint&gt; &gt; displayedVariables;
+00592 <span class="comment">//uint speedNetLabel, speedUsrLabel, rcvLabel, sndLabel, rcvQLabel, sndQLabel, scrollLabel;</span>
+00593 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> != NULL)
+00594 {
+00595 <span class="comment">//</span>
+00596 <span class="comment">// Init window param if necessary</span>
+00597 <span class="comment">//</span>
+00598
+00599 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a04223.html#a572">x</a>=-1, <a class="code" href="a04223.html#a573">y</a>=-1, <a class="code" href="a04223.html#a575">w</a>=-1, h=-1, fs=10, history=-1;
+00600 <span class="keywordtype">bool</span> iconified = <span class="keyword">false</span>, ww = <span class="keyword">false</span>;
+00601 string fn;
+00602
+00603 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"XWinParam"</span>)) != NULL) <a class="code" href="a04223.html#a572">x</a> = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00604 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"YWinParam"</span>)) != NULL) <a class="code" href="a04223.html#a573">y</a> = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00605 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"WWinParam"</span>)) != NULL) <a class="code" href="a04223.html#a575">w</a> = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00606 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"HWinParam"</span>)) != NULL) h = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00607 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"HistoryWinParam"</span>)) != NULL) history = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00608 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"IWinParam"</span>)) != NULL) iconified = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>() == 1;
+00609 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"FontSize"</span>)) != NULL) fs = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00610 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"FontName"</span>)) != NULL) fn = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>();
+00611 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"WordWrap"</span>)) != NULL) ww = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>() == 1;
+00612
+00613 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'I'</span>)) iconified = <span class="keyword">true</span>;
+00614
+00615 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera0">create</a> (string(<span class="stringliteral">"*INIT* "</span>) + _ShortName + <span class="stringliteral">" "</span> + _LongName, iconified, x, <a class="code" href="a04223.html#a573">y</a>, <a class="code" href="a04223.html#a575">w</a>, h, history, fs, fn, ww, &amp;CommandLog);
+00616
+00617 <a class="code" href="a05378.html#a13">DebugLog</a>-&gt;addDisplayer (WindowDisplayer);
+00618 <a class="code" href="a05378.html#a12">InfoLog</a>-&gt;addDisplayer (WindowDisplayer);
+00619 <a class="code" href="a05378.html#a11">WarningLog</a>-&gt;addDisplayer (WindowDisplayer);
+00620 <a class="code" href="a05378.html#a10">ErrorLog</a>-&gt;addDisplayer (WindowDisplayer);
+00621 <a class="code" href="a05378.html#a14">AssertLog</a>-&gt;addDisplayer (WindowDisplayer);
+00622 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_0">CommandLog</a>.<a class="code" href="a02813.html#NLNET_1_1CNetLoga0">addDisplayer</a>(WindowDisplayer, <span class="keyword">true</span>);
+00623
+00624 <span class="comment">// adding default displayed variables</span>
+00625 displayedVariables.push_back(make_pair(string(<span class="stringliteral">"NetLop|NetSpeedLoop"</span>), <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera1">createLabel</a> (<span class="stringliteral">"NetLop"</span>)));
+00626 displayedVariables.push_back(make_pair(string(<span class="stringliteral">"UsrLop|UserSpeedLoop"</span>), <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera1">createLabel</a> (<span class="stringliteral">"UsrLop"</span>)));
+00627 <span class="comment">// displayedVariables.push_back(make_pair(string("Rcv|ReceivedBytes"), WindowDisplayer-&gt;createLabel ("Rcv")));</span>
+00628 <span class="comment">// displayedVariables.push_back(make_pair(string("Snd|SentBytes"), WindowDisplayer-&gt;createLabel ("Snd")));</span>
+00629 <span class="comment">// displayedVariables.push_back(make_pair(string("RcvQ|ReceivedQueueSize"), WindowDisplayer-&gt;createLabel ("RcvQ")));</span>
+00630 <span class="comment">// displayedVariables.push_back(make_pair(string("SndQ|SentQueueSize"), WindowDisplayer-&gt;createLabel ("SndQ")));</span>
+00631 displayedVariables.push_back(make_pair(string(<span class="stringliteral">"|Scroller"</span>), <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera1">createLabel</a> (<span class="stringliteral">"NeL Rulez"</span>)));
+00632
+00633 <a class="code" href="a02402.html">CConfigFile::CVar</a> *<a class="code" href="a04223.html#a576">v</a> = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a>(<span class="stringliteral">"DisplayedVariables"</span>);
+00634 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a576">v</a> != NULL)
+00635 {
+00636 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; <a class="code" href="a04223.html#a576">v</a>-&gt;size(); i++)
+00637 {
+00638 displayedVariables.push_back(make_pair(<a class="code" href="a04223.html#a576">v</a>-&gt;asString(i), <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera1">createLabel</a> (<a class="code" href="a04223.html#a576">v</a>-&gt;asString(i).c_str())));
+00639 }
+00640 }
+00641 }
+00642
+00643 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Starting Service '%s' using NeL ("</span>__DATE__<span class="stringliteral">" "</span>__TIME__<span class="stringliteral">") compiled %s"</span>, <a class="code" href="a03876.html#NLNET_1_1IServicez2101_11">_ShortName</a>.c_str(), <a class="code" href="a05379.html#a52">CompilationDate</a>.c_str());
+00644 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: On OS: %s"</span>, CSystemInfo::getOS().c_str());
+00645
+00646 <a class="code" href="a03876.html#NLNET_1_1IServicez2093_1">setStatus</a> (EXIT_SUCCESS);
+00647
+00648 <span class="comment">//</span>
+00649 <span class="comment">// Redirect signal if needed (in release mode only)</span>
+00650 <span class="comment">//</span>
+00651
+00652 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00653 <span class="preprocessor"></span><span class="preprocessor">#ifdef NL_RELEASE</span>
+00654 <span class="preprocessor"></span> <a class="code" href="a05379.html#a174">initSignal</a>();
+00655 <span class="preprocessor">#else</span>
+00656 <span class="preprocessor"></span> <span class="comment">// don't install signal is the application is started in debug mode</span>
+00657 <span class="keywordflow">if</span> (<a class="code" href="a04214.html#a0">IsDebuggerPresent</a> ())
+00658 {
+00659 <span class="comment">//nlinfo("Running with the debugger, don't redirect signals");</span>
+00660 <a class="code" href="a05379.html#a174">initSignal</a>();
+00661 }
+00662 <span class="keywordflow">else</span>
+00663 {
+00664 <span class="comment">//nlinfo("Running without the debugger, redirect SIGINT signal");</span>
+00665 <a class="code" href="a05379.html#a174">initSignal</a>();
+00666 }
+00667 <span class="preprocessor">#endif</span>
+00668 <span class="preprocessor"></span><span class="preprocessor">#else // NL_OS_UNIX</span>
+00669 <span class="preprocessor"></span> <a class="code" href="a05379.html#a174">initSignal</a>();
+00670 <span class="preprocessor">#endif</span>
+00671 <span class="preprocessor"></span>
+00672
+00673 <span class="comment">//</span>
+00674 <span class="comment">// Ignore SIGPIPE (broken pipe) on unix system</span>
+00675 <span class="comment">//</span>
+00676
+00677 <span class="preprocessor">#ifdef NL_OS_UNIX</span>
+00678 <span class="preprocessor"></span> <span class="comment">// Ignore the SIGPIPE signal</span>
+00679 sigset_t SigList;
+00680 <span class="keywordtype">bool</span> IgnoredPipe = <span class="keyword">true</span>;
+00681 <span class="keywordflow">if</span> (sigemptyset (&amp;SigList) == -1)
+00682 {
+00683 perror(<span class="stringliteral">"sigemptyset()"</span>);
+00684 IgnoredPipe = <span class="keyword">false</span>;
+00685 }
+00686
+00687 <span class="keywordflow">if</span> (sigaddset (&amp;SigList, SIGPIPE) == -1)
+00688 {
+00689 perror(<span class="stringliteral">"sigaddset()"</span>);
+00690 IgnoredPipe = <span class="keyword">false</span>;
+00691 }
+00692
+00693 <span class="keywordflow">if</span> (sigprocmask (SIG_BLOCK, &amp;SigList, NULL) == -1)
+00694 {
+00695 perror(<span class="stringliteral">"sigprocmask()"</span>);
+00696 IgnoredPipe = <span class="keyword">false</span>;
+00697 }
+00698 <a class="code" href="a04199.html#a0">nldebug</a> (<span class="stringliteral">"SERVICE: SIGPIPE %s"</span>, IgnoredPipe?<span class="stringliteral">"Ignored"</span>:<span class="stringliteral">"Not Ignored"</span>);
+00699 <span class="preprocessor">#endif // NL_OS_UNIX</span>
+00700 <span class="preprocessor"></span>
+00701
+00702 <span class="comment">//</span>
+00703 <span class="comment">// Initialize the network system</span>
+00704 <span class="comment">//</span>
+00705
+00706 string localhost;
+00707 <span class="keywordflow">try</span>
+00708 {
+00709 <span class="comment">// Initialize WSAStartup and network stuffs</span>
+00710 CSock::initNetwork();
+00711
+00712 <span class="comment">// Get the localhost name</span>
+00713 localhost = <a class="code" href="a02665.html#NLNET_1_1CInetAddresse1">CInetAddress::localHost</a>().<a class="code" href="a02665.html#NLNET_1_1CInetAddressa6">hostName</a>();
+00714 }
+00715 <span class="keywordflow">catch</span> (<a class="code" href="a03810.html">NLNET::ESocket</a> &amp;)
+00716 {
+00717 localhost = <span class="stringliteral">"&lt;UnknownHost&gt;"</span>;
+00718 }
+00719
+00720 <span class="comment">// Set the localhost name and service name to the logger</span>
+00721 CLog::setProcessName (localhost+<span class="stringliteral">"/"</span>+_ShortName);
+00722 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Host: %s"</span>, localhost.c_str());
+00723
+00724 <span class="comment">//</span>
+00725 <span class="comment">// Initialize server parameters</span>
+00726 <span class="comment">//</span>
+00727
+00728 <span class="comment">// set the listen port if there are a port arg in the command line</span>
+00729 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'P'</span>))
+00730 {
+00731 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_16">ListeningPort</a> = atoi(<a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'P'</span>).c_str());
+00732 }
+00733
+00734 <span class="comment">// set the aliasname if is present in the command line</span>
+00735 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'N'</span>))
+00736 {
+00737 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_0">_AliasName</a> = <a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'N'</span>);
+00738 }
+00739
+00740 <span class="comment">// Load the recording state from the config file</span>
+00741 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"Rec"</span>)) != NULL)
+00742 {
+00743 string srecstate = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>();
+00744 <a class="code" href="a05378.html#a276">strupr</a>( srecstate );
+00745 <span class="keywordflow">if</span> ( srecstate == <span class="stringliteral">"RECORD"</span> )
+00746 {
+00747 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a> = CCallbackNetBase::Record;
+00748 <a class="code" href="a04199.html#a1">nlinfo</a>( <span class="stringliteral">"SERVICE: Service recording messages"</span> );
+00749 }
+00750 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( srecstate == <span class="stringliteral">"REPLAY"</span> )
+00751 {
+00752 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a> = CCallbackNetBase::Replay;
+00753 <a class="code" href="a04199.html#a1">nlinfo</a>( <span class="stringliteral">"SERVICE: Service replaying messages"</span> );
+00754 }
+00755 <span class="keywordflow">else</span>
+00756 {
+00757 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a> = CCallbackNetBase::Off;
+00758 }
+00759 }
+00760 <span class="keywordflow">else</span>
+00761 {
+00762 <span class="comment">// Not found</span>
+00763 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a> = CCallbackNetBase::Off;
+00764 }
+00765
+00766 <span class="comment">// Load the default stream format</span>
+00767 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"StringMsgFormat"</span>)) != NULL)
+00768 {
+00769 <a class="code" href="a02918.html#NLNET_1_1CMessagee1">CMessage::setDefaultStringMode</a>( var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>() == 1 );
+00770 }
+00771 <span class="keywordflow">else</span>
+00772 {
+00773 <span class="comment">// Not found =&gt; binary</span>
+00774 <a class="code" href="a02918.html#NLNET_1_1CMessagee1">CMessage::setDefaultStringMode</a>( <span class="keyword">false</span> );
+00775 }
+00776
+00777 <span class="comment">/*</span>
+00778 <span class="comment"> //</span>
+00779 <span class="comment"> // Layer4 Startup (Connect to the Naming Service (except for the NS itself and Login Service))</span>
+00780 <span class="comment"> //</span>
+00781 <span class="comment"></span>
+00782 <span class="comment"> if (IService::_ShortName != "NS" &amp;&amp; IService::_ShortName != "LS" &amp;&amp; IService::_ShortName != "AES" &amp;&amp; IService::_ShortName != "AS")</span>
+00783 <span class="comment"> {</span>
+00784 <span class="comment"> bool ok = false;</span>
+00785 <span class="comment"> while (!ok)</span>
+00786 <span class="comment"> {</span>
+00787 <span class="comment"> // read the naming service address from the config file</span>
+00788 <span class="comment"> CInetAddress loc(ConfigFile.getVar("NSHost").asString(), ConfigFile.getVar("NSPort").asInt());</span>
+00789 <span class="comment"> try</span>
+00790 <span class="comment"> {</span>
+00791 <span class="comment"> CNetManager::init( &amp;loc, _RecordingState );</span>
+00792 <span class="comment"> ok = true;</span>
+00793 <span class="comment"> }</span>
+00794 <span class="comment"> catch (ESocketConnectionFailed &amp;)</span>
+00795 <span class="comment"> {</span>
+00796 <span class="comment"> nlwarning ("Could not connect to the Naming Service (%s). Retrying in a few seconds...", loc.asString().c_str());</span>
+00797 <span class="comment"> nlSleep (5000);</span>
+00798 <span class="comment"> }</span>
+00799 <span class="comment"> }</span>
+00800 <span class="comment"> }</span>
+00801 <span class="comment"> else</span>
+00802 <span class="comment"> {</span>
+00803 <span class="comment"> CNetManager::init( NULL, _RecordingState );</span>
+00804 <span class="comment"> }</span>
+00805 <span class="comment">*/</span>
+00806
+00810
+00811 <span class="comment">// get the sid</span>
+00812 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"SId"</span>)) != NULL)
+00813 {
+00814 <a class="code" href="a04558.html#a10">sint32</a> sid = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>();
+00815 <span class="keywordflow">if</span> (sid&lt;=0 || sid&gt;255)
+00816 {
+00817 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"SERVICE: Bad SId value in the config file, %d is not in [0;255] range"</span>, sid);
+00818 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a> = 0;
+00819 }
+00820 <span class="keywordflow">else</span>
+00821 {
+00822 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a> = (<a class="code" href="a04558.html#a7">uint8</a>) sid;
+00823 }
+00824 }
+00825 <span class="keywordflow">else</span>
+00826 {
+00827 <span class="comment">// ok, SId not found, use dynamic sid</span>
+00828 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_12">_SId</a> = 0;
+00829 }
+00830
+00831
+00832 <span class="comment">// look if we don't want to use NS</span>
+00833 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"DontUseNS"</span>)) != NULL)
+00834 {
+00835 <span class="comment">// if we set the value in the config file, get it</span>
+00836 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a> = (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>() == 1);
+00837 }
+00838 <span class="keywordflow">else</span>
+00839 {
+00840 <span class="comment">// if not, we use ns only if service is not ns, ls, aes, as</span>
+00841 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a> = <span class="keyword">false</span>;
+00842 }
+00843
+00844 <span class="comment">//</span>
+00845 <span class="comment">// Register all network associations (must be before the CUnifiedNetwork::getInstance()-&gt;init)</span>
+00846 <span class="comment">//</span>
+00847
+00848 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"Networks"</span>)) != NULL)
+00849 {
+00850 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a7">uint8</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a> (); i++)
+00851 CUnifiedNetwork::getInstance()-&gt;addNetworkAssociation (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i), i);
+00852 }
+00853
+00854 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"DefaultNetworks"</span>)) != NULL)
+00855 {
+00856 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a7">uint8</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a> (); i++)
+00857 CUnifiedNetwork::getInstance()-&gt;addDefaultNetwork(var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i));
+00858 }
+00859
+00860 <span class="comment">// normal setup for the common services</span>
+00861 <span class="keywordflow">if</span> (!<a class="code" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a>)
+00862 {
+00863 <span class="keywordtype">bool</span> ok = <span class="keyword">false</span>;
+00864 <span class="keywordflow">while</span> (!ok)
+00865 {
+00866 string LSAddr;
+00867
+00868 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'B'</span>))
+00869 {
+00870 <span class="comment">// if the naming service address is set on the command line, get it (overwrite the cfg)</span>
+00871 LSAddr = <a class="code" href="a03876.html#NLNET_1_1IServicez2091_0">getArg</a>(<span class="charliteral">'B'</span>);
+00872 }
+00873 <span class="keywordflow">else</span>
+00874 {
+00875 <span class="comment">// else read the naming service address from the config file</span>
+00876 LSAddr = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea9">getVar</a> (<span class="stringliteral">"NSHost"</span>).asString();
+00877 }
+00878
+00879 <span class="comment">// if there's no port to the NS, use the default one 50000</span>
+00880 <span class="keywordflow">if</span> (LSAddr.find(<span class="stringliteral">":"</span>) == string::npos)
+00881 LSAddr += <span class="stringliteral">":50000"</span>;
+00882
+00883 <a class="code" href="a02665.html">CInetAddress</a> loc(LSAddr);
+00884 <span class="keywordflow">try</span>
+00885 {
+00886 <span class="keywordflow">if</span> ( CUnifiedNetwork::getInstance()-&gt;init (&amp;loc, _RecordingState, _ShortName, ListeningPort, _SId) )
+00887 {
+00888 ok = <span class="keyword">true</span>;
+00889 }
+00890 <span class="keywordflow">else</span>
+00891 {
+00892 <a class="code" href="a04199.html#a1">nlinfo</a>( <span class="stringliteral">"SERVICE: Exiting..."</span> );
+00893 <a class="code" href="a05378.html#a299">beep</a>( 880, 400 );
+00894 <a class="code" href="a05378.html#a299">beep</a>( 440, 400 );
+00895 <a class="code" href="a05378.html#a299">beep</a>( 220, 400 );
+00896 <span class="keywordflow">return</span> 10;
+00897 }
+00898 }
+00899 <span class="keywordflow">catch</span> (ESocketConnectionFailed &amp;)
+00900 {
+00901 <a class="code" href="a04199.html#a2">nlwarning</a> (<span class="stringliteral">"SERVICE: Could not connect to the Naming Service (%s). Retrying in a few seconds..."</span>, loc.<a class="code" href="a02665.html#NLNET_1_1CInetAddressa1">asString</a>().c_str());
+00902 <a class="code" href="a05378.html#a256">nlSleep</a> (5000);
+00903 }
+00904 }
+00905 }
+00906 <span class="keywordflow">else</span>
+00907 {
+00908 CUnifiedNetwork::getInstance()-&gt;init(NULL, _RecordingState, _ShortName, ListeningPort, _SId);
+00909 }
+00910
+00911 <span class="comment">// At this point, the _SId must be ok if we use the naming service.</span>
+00912 <span class="comment">// If it's 0, it means that we don't use NS and we left the other side server to find a sid for your connection</span>
+00913
+00914 <span class="keywordflow">if</span>(!<a class="code" href="a03876.html#NLNET_1_1IServicez2101_5">_DontUseNS</a>)
+00915 {
+00916 <a class="code" href="a04199.html#a6">nlassert</a> (_SId != 0);
+00917 }
+00918
+00919 <span class="comment">//</span>
+00920 <span class="comment">// Connect to the local AES and send identification</span>
+00921 <span class="comment">//</span>
+00922
+00923 <span class="comment">// look if we don't want to use NS</span>
+00924 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"DontUseAES"</span>)) != NULL)
+00925 {
+00926 <span class="comment">// if we set the value in the config file, get it</span>
+00927 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_4">_DontUseAES</a> = var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_2">asInt</a>() == 1;
+00928 }
+00929 <span class="keywordflow">else</span>
+00930 {
+00931 <span class="comment">// if not, we use aes only if service is not aes or as</span>
+00932 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_4">_DontUseAES</a> = <span class="keyword">false</span>;
+00933 }
+00934
+00935 <a class="code" href="a05379.html#a115">initAdmin</a> (_DontUseAES);
+00936
+00937
+00938 <span class="comment">//</span>
+00939 <span class="comment">// Add callback array</span>
+00940 <span class="comment">//</span>
+00941
+00942 <span class="comment">// add inner service callback array</span>
+00943 <a class="code" href="a03632.html#NLNET_1_1CUnifiedNetworke0">NLNET::CUnifiedNetwork::getInstance</a>()-&gt;addCallbackArray(builtinServiceCallbacks, <span class="keyword">sizeof</span>(builtinServiceCallbacks)/<span class="keyword">sizeof</span>(builtinServiceCallbacks[0]));
+00944
+00945 <span class="comment">// add callback set in the NLNET_SERVICE_MAIN macro</span>
+00946 <a class="code" href="a03632.html#NLNET_1_1CUnifiedNetworke0">NLNET::CUnifiedNetwork::getInstance</a>()-&gt;addCallbackArray(_CallbackArray, _CallbackArraySize);
+00947
+00948 <span class="comment">//</span>
+00949 <span class="comment">// Now we have the service id, we can set the entites id generator</span>
+00950 <span class="comment">//</span>
+00951
+00952 <a class="code" href="a02189.html#NLAIAGENT_1_1CIdente1">NLMISC::CEntityId::setServiceId</a>(_SId);
+00953
+00954 <span class="comment">// Set the localhost name and service name and the sid</span>
+00955 CLog::setProcessName (localhost+<span class="stringliteral">"/"</span>+_ShortName+<span class="stringliteral">"-"</span>+<a class="code" href="a05378.html#a244">toString</a>((<a class="code" href="a04558.html#a9">uint16</a>)_SId));
+00956
+00957
+00958 <span class="comment">//</span>
+00959 <span class="comment">// Add default pathes</span>
+00960 <span class="comment">//</span>
+00961
+00962 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"IgnoredFiles"</span>)) != NULL)
+00963 {
+00964 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a>(); i++)
+00965 {
+00966 CPath::addIgnoredDoubleFile (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i));
+00967 }
+00968 }
+00969
+00970 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"Paths"</span>)) != NULL)
+00971 {
+00972 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a>(); i++)
+00973 {
+00974 CPath::addSearchPath (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i), <span class="keyword">true</span>, <span class="keyword">false</span>);
+00975 }
+00976 }
+00977
+00978 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"PathsNoRecurse"</span>)) != NULL)
+00979 {
+00980 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a>(); i++)
+00981 {
+00982 CPath::addSearchPath (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i), <span class="keyword">false</span>, <span class="keyword">false</span>);
+00983 }
+00984 }
+00985
+00986 <span class="comment">// if we can, try to setup where to save files</span>
+00987 <span class="keywordflow">if</span> (IService::getInstance()-&gt;haveArg(<span class="charliteral">'W'</span>))
+00988 {
+00989 <span class="comment">// use the command line param if set</span>
+00990 <a class="code" href="a03876.html#NLNET_1_1IServiceo0">SaveFilesDirectory</a> = IService::getInstance()-&gt;getArg(<span class="charliteral">'W'</span>);
+00991 }
+00992
+00993
+00994 <span class="comment">//</span>
+00995 <span class="comment">// Call the user service init</span>
+00996 <span class="comment">//</span>
+00997
+00998 userInitCalled = <span class="keyword">true</span>; <span class="comment">// the bool must be put *before* the call to init()</span>
+00999 <a class="code" href="a03876.html#NLNET_1_1IServicez2089_0">init</a> ();
+01000
+01001
+01002 <span class="comment">//</span>
+01003 <span class="comment">// Connects to the present services</span>
+01004 <span class="comment">// WARNING: only after the user init() was called because the</span>
+01005 <span class="comment">// addService may call up service callbacks.</span>
+01006 <span class="comment">//</span>
+01007
+01008 CUnifiedNetwork::getInstance()-&gt;connect();
+01009
+01010 <span class="comment">//</span>
+01011 <span class="comment">// Say to the AES that the service is ready</span>
+01012 <span class="comment">//</span>
+01013
+01014 <span class="keywordflow">if</span> (!<a class="code" href="a03876.html#NLNET_1_1IServicez2101_4">_DontUseAES</a>)
+01015 {
+01016 <span class="comment">// send the ready message (service init finished)</span>
+01017 <a class="code" href="a02918.html">CMessage</a> msgout (<span class="stringliteral">"SR"</span>);
+01018 CUnifiedNetwork::getInstance()-&gt;send(<span class="stringliteral">"AES"</span>, msgout);
+01019 }
+01020
+01021
+01022 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_6">_Initialized</a> = <span class="keyword">true</span>;
+01023
+01024 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Service initialised, executing StartCommands"</span>);
+01025
+01026 <span class="comment">//</span>
+01027 <span class="comment">// Call the user command from the config file if any</span>
+01028 <span class="comment">//</span>
+01029
+01030 <span class="keywordflow">if</span> ((var = <a class="code" href="a03876.html#NLNET_1_1IServicez2095_1">ConfigFile</a>.<a class="code" href="a02401.html#NLMISC_1_1CConfigFilea10">getVarPtr</a> (<span class="stringliteral">"StartCommands"</span>)) != NULL)
+01031 {
+01032 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVara4">size</a>(); i++)
+01033 {
+01034 ICommand::execute (var-&gt;<a class="code" href="a02402.html#NLMISC_1_1CConfigFile_1_1CVarz1933_3">asString</a>(i), <a class="code" href="a03876.html#NLNET_1_1IServicez2095_0">CommandLog</a>);
+01035 }
+01036 }
+01037
+01038 string str;
+01039 CLog logDisplayVars;
+01040 <a class="code" href="a02750.html">CLightMemDisplayer</a> mdDisplayVars;
+01041 logDisplayVars.addDisplayer (&amp;mdDisplayVars);
+01042
+01043 <span class="comment">//</span>
+01044 <span class="comment">// Activate the timeout assertion thread</span>
+01045 <span class="comment">//</span>
+01046
+01047 IThread::create(&amp;MyTAT)-&gt;start();
+01048
+01049 <span class="comment">//</span>
+01050 <span class="comment">// Set service ready</span>
+01051 <span class="comment">//</span>
+01052
+01053 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Service ready"</span>);
+01054
+01055 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> != NULL)
+01056 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera6">setTitleBar</a> (_ShortName + <span class="stringliteral">" "</span> + _LongName + <span class="stringliteral">" "</span> + <a class="code" href="a03876.html#NLNET_1_1IServicez2101_19">Version</a>.c_str());
+01057
+01058 <span class="comment">//</span>
+01059 <span class="comment">// Call the user service update each loop and check files and network activity</span>
+01060 <span class="comment">//</span>
+01061
+01062 <span class="keywordflow">do</span>
+01063 {
+01064 <a class="code" href="a05379.html#a56">MyTAT</a>.<a class="code" href="a03537.html#CTimeoutAssertionThreada0">activate</a>();
+01065
+01066 <span class="keywordflow">if</span>(<a class="code" href="a05379.html#a170">Bench</a>) CHTimer::startBench(<span class="keyword">false</span>, <span class="keyword">true</span>, <span class="keyword">false</span>);
+01067
+01068 <span class="comment">// count the amount of time to manage internal system</span>
+01069 <a class="code" href="a05378.html#a242">TTime</a> bbefore = CTime::getLocalTime ();
+01070
+01071 <span class="comment">// call the user update and exit if the user update asks it</span>
+01072 {
+01073 <a class="code" href="a04365.html#a4">H_AUTO</a>(NLNETServiceUpdate);
+01074 <span class="keywordflow">if</span> (!<a class="code" href="a03876.html#NLNET_1_1IServicez2089_2">update</a> ())
+01075 {
+01076 CHTimer::endBench();
+01077 <span class="keywordflow">break</span>;
+01078 }
+01079 }
+01080
+01081 <span class="comment">// if the launching mode is 'quit after the first update' we set the exit signal</span>
+01082 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServicez2091_9">haveArg</a>(<span class="charliteral">'Q'</span>))
+01083 {
+01084 <a class="code" href="a05379.html#a48">ExitSignalAsked</a> = 1;
+01085 }
+01086 <a class="code" href="a05379.html#a54">NbUserUpdate</a>++;
+01087
+01088 <span class="comment">// count the amount of time to manage internal system</span>
+01089 <a class="code" href="a05378.html#a242">TTime</a> before = CTime::getLocalTime ();
+01090
+01091 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> != NULL)
+01092 {
+01093 <span class="comment">// update the window displayer and quit if asked</span>
+01094 <span class="keywordflow">if</span> (!<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera7">update</a> ())
+01095 {
+01096 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: The window displayer was closed by user, need to quit"</span>);
+01097 <a class="code" href="a05379.html#a48">ExitSignalAsked</a> = 1;
+01098 }
+01099 }
+01100
+01101 <span class="comment">// stop the loop if the exit signal asked</span>
+01102 <span class="keywordflow">if</span> (<a class="code" href="a05379.html#a48">ExitSignalAsked</a> &gt; 0)
+01103 {
+01104 CHTimer::endBench();
+01105 <span class="keywordflow">break</span>;
+01106 }
+01107
+01108 CConfigFile::checkConfigFiles ();
+01109
+01110 <a class="code" href="a05379.html#a116">updateAdmin</a> ();
+01111
+01112 CFile::checkFileChange();
+01113
+01114 <span class="comment">// get and manage layer 5 messages</span>
+01115 CUnifiedNetwork::getInstance()-&gt;update (_UpdateTimeout);
+01116
+01117 <span class="comment">// resync the clock every hours</span>
+01118 <span class="comment">// if (resyncEvenly)</span>
+01119 <span class="comment">// {</span>
+01120 <span class="comment">// static TTime LastSyncTime = CTime::getLocalTime ();</span>
+01121
+01122 <span class="comment">//---------------------------------------</span>
+01123 <span class="comment">// To simulate Ctrl-C in the debugger... Exit after 1 min !</span>
+01124 <span class="comment">/*if (CTime::getLocalTime () - LastSyncTime &gt; 60 * 1000 )</span>
+01125 <span class="comment"> {</span>
+01126 <span class="comment"> ExitSignalAsked = 1;</span>
+01127 <span class="comment"> }*/</span>
+01128 <span class="comment">//---------------------------------------</span>
+01129 <span class="comment">/*</span>
+01130 <span class="comment"> if (CTime::getLocalTime () - LastSyncTime &gt; 60*60*1000)</span>
+01131 <span class="comment"> {</span>
+01132 <span class="comment"> CUniTime::syncUniTimeFromService ( _RecordingState );</span>
+01133 <span class="comment"> LastSyncTime = CTime::getLocalTime ();</span>
+01134 <span class="comment"> }</span>
+01135 <span class="comment">*/</span>
+01136 <span class="comment">// }</span>
+01137
+01138 <a class="code" href="a05379.html#a169">NetSpeedLoop</a> = (<a class="code" href="a04558.html#a10">sint32</a>) (CTime::getLocalTime () - before);
+01139 <a class="code" href="a05379.html#a168">UserSpeedLoop</a> = (<a class="code" href="a04558.html#a10">sint32</a>) (before - bbefore);
+01140
+01141 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> != NULL)
+01142 {
+01143 <a class="code" href="a04558.html#a13">uint64</a> rcv, snd, rcvq, sndq;
+01144 rcv = CUnifiedNetwork::getInstance()-&gt;getBytesReceived ();
+01145 snd = CUnifiedNetwork::getInstance()-&gt;getBytesSent ();
+01146 rcvq = CUnifiedNetwork::getInstance()-&gt;getReceiveQueueSize ();
+01147 sndq = CUnifiedNetwork::getInstance()-&gt;getSendQueueSize ();
+01148
+01149 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a15">uint</a> i = 0; i &lt; displayedVariables.size(); i++)
+01150 {
+01151 <span class="comment">// it s a separator, do nothing</span>
+01152 <span class="keywordflow">if</span> (displayedVariables[i].first.empty())
+01153 <span class="keywordflow">continue</span>;
+01154
+01155 <span class="comment">// it s a command, do nothing</span>
+01156 <span class="keywordflow">if</span> (displayedVariables[i].first[0] == <span class="charliteral">'@'</span>)
+01157 <span class="keywordflow">continue</span>;
+01158
+01159 string dispName = displayedVariables[i].first;
+01160 string varName = dispName;
+01161 <a class="code" href="a04558.html#a11">uint32</a> pos = dispName.find(<span class="stringliteral">"|"</span>);
+01162 <span class="keywordflow">if</span> (pos != string::npos)
+01163 {
+01164 varName = displayedVariables[i].first.substr(pos+1);
+01165 dispName = displayedVariables[i].first.substr(0, pos);
+01166 }
+01167
+01168 <span class="keywordflow">if</span> (dispName.empty())
+01169 str = <span class="stringliteral">""</span>;
+01170 <span class="keywordflow">else</span>
+01171 str = dispName + <span class="stringliteral">": "</span>;
+01172
+01173 mdDisplayVars.<a class="code" href="a02751.html#NLMISC_1_1CMemDisplayera0">clear</a> ();
+01174 ICommand::execute(varName, logDisplayVars, <span class="keyword">true</span>);
+01175 <span class="keyword">const</span> std::deque&lt;std::string&gt; &amp;strs = mdDisplayVars.<a class="code" href="a02751.html#NLMISC_1_1CMemDisplayera3">lockStrings</a>();
+01176 <span class="keywordflow">if</span> (strs.size()&gt;0)
+01177 {
+01178 str += strs[0].substr(0,strs[0].<a class="code" href="a04115.html#a94">size</a>()-1);
+01179 <span class="comment">/*</span>
+01180 <span class="comment"> string s_ = strs[0];</span>
+01181 <span class="comment"></span>
+01182 <span class="comment"> uint32 pos = strs[0].find("=");</span>
+01183 <span class="comment"> if(pos != string::npos &amp;&amp; pos + 2 &lt; strs[0].size())</span>
+01184 <span class="comment"> {</span>
+01185 <span class="comment"> uint32 pos2 = string::npos;</span>
+01186 <span class="comment"> if(strs[0][strs[0].size()-1] == '\n')</span>
+01187 <span class="comment"> pos2 = strs[0].size() - pos - 2 - 1;</span>
+01188 <span class="comment"></span>
+01189 <span class="comment"> str += strs[0].substr (pos+2, pos2);</span>
+01190 <span class="comment"> }</span>
+01191 <span class="comment"> else</span>
+01192 <span class="comment"> {</span>
+01193 <span class="comment"> str += "???";</span>
+01194 <span class="comment"> }*/</span>
+01195 }
+01196 <span class="keywordflow">else</span>
+01197 {
+01198 str += <span class="stringliteral">"???"</span>;
+01199 }
+01200 mdDisplayVars.<a class="code" href="a02751.html#NLMISC_1_1CMemDisplayera5">unlockStrings</a>();
+01201 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>-&gt;<a class="code" href="a03727.html#NLMISC_1_1CWindowDisplayera5">setLabel</a> (displayedVariables[i].second, str);
+01202 }
+01203
+01204 }
+01205
+01206 <span class="comment">// nldebug ("SYNC: updatetimeout must be %d and is %d, sleep the rest of the time", _UpdateTimeout, delta);</span>
+01207
+01208 CHTimer::endBench();
+01209
+01210 <span class="comment">// Resetting the hierarchical timer must be done outside the top-level timer</span>
+01211 <span class="keywordflow">if</span> ( <a class="code" href="a03876.html#NLNET_1_1IServicez2101_9">_ResetMeasures</a> )
+01212 {
+01213 CHTimer::clear();
+01214 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_9">_ResetMeasures</a> = <span class="keyword">false</span>;
+01215 }
+01216
+01217 <a class="code" href="a05379.html#a56">MyTAT</a>.<a class="code" href="a03537.html#CTimeoutAssertionThreada2">desactivate</a>();
+01218 }
+01219 <span class="keywordflow">while</span> (<span class="keyword">true</span>);
+01220 }
+01221 <span class="comment">/* catch (ETrapDebug &amp;)</span>
+01222 <span class="comment"> {</span>
+01223 <span class="comment"> // we have to do that if we want to trap unhandled exception with the report message box</span>
+01224 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01225 <span class="comment"> }</span>
+01226 <span class="comment">*/</span> <span class="keywordflow">catch</span> (<a class="code" href="a03789.html">EFatalError</a> &amp;)
+01227 {
+01228 <span class="comment">// Somebody call nlerror, so we have to quit now, the message already display</span>
+01229 <span class="comment">// so we don't have to to anything</span>
+01230 <a class="code" href="a03876.html#NLNET_1_1IServicez2093_1">setStatus</a> (EXIT_FAILURE);
+01231 }
+01232 <span class="keywordflow">catch</span> ( <a class="code" href="a04558.html#a15">uint</a> ) <span class="comment">// SEH exceptions</span>
+01233 {
+01234 <a class="code" href="a05378.html#a10">ErrorLog</a>-&gt;displayNL( <span class="stringliteral">"SERVICE: System exception"</span> );
+01235 }
+01236
+01237 <span class="preprocessor">#ifdef NL_RELEASE</span>
+01238 <span class="preprocessor"></span><span class="comment">/* // in release mode, we catch everything to handle clean release.</span>
+01239 <span class="comment"> catch (Exception &amp;e)</span>
+01240 <span class="comment"> {</span>
+01241 <span class="comment"> // Catch NeL exception to release the system cleanly</span>
+01242 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01243 <span class="comment"> nlinfo ("ERROR: NeL Exception: Error running the service \"%s\": %s", _ShortName.c_str(), e.what());</span>
+01244 <span class="comment"> }</span>
+01245 <span class="comment"> catch (...)</span>
+01246 <span class="comment"> {</span>
+01247 <span class="comment"> // Catch anything we can to release the system cleanly</span>
+01248 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01249 <span class="comment"> nlinfo ("ERROR: Unknown external exception");</span>
+01250 <span class="comment"> }</span>
+01251 <span class="comment">*/</span>
+01252 <span class="preprocessor">#endif</span>
+01253 <span class="preprocessor"></span>
+01254 <span class="keywordflow">try</span>
+01255 {
+01256 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Service starts releasing"</span>);
+01257
+01258 <span class="comment">//</span>
+01259 <span class="comment">// Call the user service release() if the init() was called</span>
+01260 <span class="comment">//</span>
+01261
+01262 <span class="keywordflow">if</span> (userInitCalled)
+01263 <a class="code" href="a03876.html#NLNET_1_1IServicez2089_1">release</a> ();
+01264
+01265 <span class="comment">//</span>
+01266 <span class="comment">// Delete all network connection (naming client also)</span>
+01267 <span class="comment">//</span>
+01268
+01269 CUnifiedNetwork::getInstance()-&gt;release ();
+01270
+01271 CSock::releaseNetwork ();
+01272
+01273 <span class="comment">//</span>
+01274 <span class="comment">// Remove the window displayer</span>
+01275 <span class="comment">//</span>
+01276
+01277 <span class="keywordflow">if</span> (<a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> != NULL)
+01278 {
+01279 <a class="code" href="a05378.html#a13">DebugLog</a>-&gt;removeDisplayer (WindowDisplayer);
+01280 <a class="code" href="a05378.html#a12">InfoLog</a>-&gt;removeDisplayer (WindowDisplayer);
+01281 <a class="code" href="a05378.html#a11">WarningLog</a>-&gt;removeDisplayer (WindowDisplayer);
+01282 <a class="code" href="a05378.html#a10">ErrorLog</a>-&gt;removeDisplayer (WindowDisplayer);
+01283 <a class="code" href="a05378.html#a14">AssertLog</a>-&gt;removeDisplayer (WindowDisplayer);
+01284 <a class="code" href="a03876.html#NLNET_1_1IServicez2095_0">CommandLog</a>.<a class="code" href="a02813.html#NLNET_1_1CNetLoga16">removeDisplayer</a> (WindowDisplayer);
+01285
+01286 <span class="keyword">delete</span> <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a>;
+01287 <a class="code" href="a03876.html#NLNET_1_1IServiceo1">WindowDisplayer</a> = NULL;
+01288 }
+01289
+01290 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Service released succesfuly"</span>);
+01291 }
+01292 <span class="comment">/* catch (ETrapDebug &amp;)</span>
+01293 <span class="comment"> {</span>
+01294 <span class="comment"> // we have to do that if we want to trap unhandled exception with the report message box</span>
+01295 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01296 <span class="comment"> }</span>
+01297 <span class="comment">*/</span> <span class="keywordflow">catch</span> (<a class="code" href="a03789.html">EFatalError</a> &amp;)
+01298 {
+01299 <span class="comment">// Somebody call nlerror, so we have to quit now, the message already display</span>
+01300 <span class="comment">// so we don't have to to anything</span>
+01301 <a class="code" href="a03876.html#NLNET_1_1IServicez2093_1">setStatus</a> (EXIT_FAILURE);
+01302 }
+01303
+01304 <span class="preprocessor">#ifdef NL_RELEASE</span>
+01305 <span class="preprocessor"></span><span class="comment">/* // in release mode, we catch everything to handle clean release.</span>
+01306 <span class="comment"> catch (Exception &amp;e)</span>
+01307 <span class="comment"> {</span>
+01308 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01309 <span class="comment"> nlinfo ("ERROR: NeL Exception: Error releasing the service \"%s\": %s", _ShortName.c_str(), e.what());</span>
+01310 <span class="comment"> }</span>
+01311 <span class="comment"> catch (...)</span>
+01312 <span class="comment"> {</span>
+01313 <span class="comment"> // Catch anything we can to release the system cleanly</span>
+01314 <span class="comment"> setStatus (EXIT_FAILURE);</span>
+01315 <span class="comment"> nlinfo ("ERROR: Unknown external exception");</span>
+01316 <span class="comment"> }</span>
+01317 <span class="comment">*/</span>
+01318 <span class="preprocessor">#endif</span>
+01319 <span class="preprocessor"></span>
+01320 CHTimer::display();
+01321 CHTimer::displayByExecutionPath ();
+01322 CHTimer::displayHierarchical(&amp;CommandLog, <span class="keyword">true</span>, 64);
+01323 CHTimer::displayHierarchicalByExecutionPathSorted (&amp;CommandLog, CHTimer::TotalTime, <span class="keyword">true</span>, 64);
+01324
+01325 <a class="code" href="a04199.html#a1">nlinfo</a> (<span class="stringliteral">"SERVICE: Service ends"</span>);
+01326
+01327 string name = <a class="code" href="a03876.html#NLNET_1_1IServicez2091_5">getServiceLongName</a> () + <span class="stringliteral">".memory_report"</span>;
+01328 NLMEMORY::StatisticsReport (name.c_str(), <span class="keyword">false</span>);
+01329
+01330 <span class="keywordflow">return</span> <a class="code" href="a05379.html#a48">ExitSignalAsked</a>?100+<a class="code" href="a05379.html#a48">ExitSignalAsked</a>:<a class="code" href="a03876.html#NLNET_1_1IServicez2091_8">getStatus</a> ();
+01331 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2089_1" doxytag="NLNET::IService::release" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual void NLNET::IService::release </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Finalization. Release the service. For example, this founction free all allocation made in the <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> function.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00191">191</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00191 {}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_2" doxytag="NLNET::IService::requireResetMeasures" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::requireResetMeasures </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Require to reset the hierarchical timer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l01342">1342</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a06365.html#l00384">_ResetMeasures</a>.
+<p>
+<div class="fragment"><pre>01343 {
+01344 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_9">_ResetMeasures</a> = <span class="keyword">true</span>;
+01345 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_3" doxytag="NLNET::IService::setArgs" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setArgs </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>args</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the command line and init _Args variable. You must call this before calling <a class="el" href="a03876.html#NLNET_1_1IServicez2097_1">main()</a>.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l00335">335</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00336 {
+00337 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>.push_back (<span class="stringliteral">"&lt;ProgramName&gt;"</span>);
+00338
+00339 string sargs (args);
+00340 <a class="code" href="a04558.html#a11">uint32</a> pos1 = 0, pos2 = 0;
+00341
+00342 <span class="keywordflow">do</span>
+00343 {
+00344 pos1 = sargs.find_first_not_of (<span class="stringliteral">" "</span>, pos2);
+00345 <span class="keywordflow">if</span> (pos1 == string::npos) <span class="keywordflow">break</span>;
+00346 pos2 = sargs.find_first_of (<span class="stringliteral">" "</span>, pos1);
+00347 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>.push_back (sargs.substr (pos1, pos2-pos1));
+00348 }
+00349 <span class="keywordflow">while</span> (pos2 != string::npos);
+00350 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_4" doxytag="NLNET::IService::setArgs" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setArgs </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">int&nbsp;</td>
+ <td class="mdname" nowrap> <em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const char **&nbsp;</td>
+ <td class="mdname" nowrap> <em>argv</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the command line and init _Args variable. You must call this before calling <a class="el" href="a03876.html#NLNET_1_1IServicez2097_1">main()</a>.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l00352">352</a> of file <a class="el" href="a06364.html">service.cpp</a>.
+<p>
+References <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+<div class="fragment"><pre>00353 {
+00354 <span class="keywordflow">for</span> (<a class="code" href="a04558.html#a14">sint</a> i = 0; i &lt; argc; i++)
+00355 {
+00356 <a class="code" href="a03876.html#NLNET_1_1IServicez2101_1">_Args</a>.push_back (argv[i]);
+00357 }
+00358 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2097_5" doxytag="NLNET::IService::setCallbackArray" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setCallbackArray </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03917.html">TUnifiedCallbackItem</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>array</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>nbelem</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the default callback array given from the macro.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00291">291</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00376">_CallbackArraySize</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00291 { <a class="code" href="a03876.html#NLNET_1_1IServicez2101_2">_CallbackArray</a> = array; <a class="code" href="a03876.html#NLNET_1_1IServicez2101_3">_CallbackArraySize</a> = nbelem; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2099_0" doxytag="NLNET::IService::setRecordingState" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setRecordingState </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>rec</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Changes the recording state (use if you know what you are doing).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00327">327</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+<div class="fragment"><pre>00327 { <a class="code" href="a03876.html#NLNET_1_1IServicez2101_8">_RecordingState</a> = rec; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2093_1" doxytag="NLNET::IService::setStatus" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setStatus </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a14">sint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>status</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the status of the service, this status is return to the application. EXIT_SUCCESS is the default status You can set it to EXIT_FAILURE or any value you want. It's useful when you use the service in a script and you want to know the return value of the application to do the appropriate things.
+<p>
+Definition at line <a class="el" href="a06365.html#l00251">251</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00359">_Status</a>, and <a class="el" href="a05981.html#l00104">sint</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00251 { <a class="code" href="a03876.html#NLNET_1_1IServicez2101_13">_Status</a> = status; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2093_2" doxytag="NLNET::IService::setUpdateTimeout" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setUpdateTimeout </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a05378.html#a242">NLMISC::TTime</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>timeout</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Selects timeout value in seconds for each update. You are absolutely certain that your <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a> function will not be called before this amount of time you set. If you set the update timeout value higher than 0, all messages in queues will be process until the time greater than the timeout user <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>. If you set the update timeout value to 0, all messages in queues will be process one time before calling the user <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>.<p>
+The default value is 100 (100ms)
+<p>
+Definition at line <a class="el" href="a06365.html#l00264">264</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+References <a class="el" href="a06365.html#l00353">_UpdateTimeout</a>, and <a class="el" href="a06553.html#l00047">NLMISC::TTime</a>.
+<p>
+<div class="fragment"><pre>00264 { <span class="comment">/*if (timeout&gt;1.0) nlerror ("IServer::setUpdateTimeout is now a double in SECOND and not ms");*/</span> <a class="code" href="a03876.html#NLNET_1_1IServicez2101_14">_UpdateTimeout</a> = timeout; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicea2" doxytag="NLNET::IService::setVersion" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLNET::IService::setVersion </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::string &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>version</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00315">315</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+<div class="fragment"><pre>00315 { <a class="code" href="a03876.html#NLNET_1_1IServicez2101_19">Version</a> = version; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2089_2" doxytag="NLNET::IService::update" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> virtual bool NLNET::IService::update </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This function is called every "frame" (you must call <a class="el" href="a03876.html#NLNET_1_1IServicez2089_0">init()</a> before). It returns false if the service is stopped.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00188">188</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>.
+<p>
+<div class="fragment"><pre>00188 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Friends And Related Function Documentation</h2>
+<a class="anchor" name="NLNET_1_1IServicen0" doxytag="NLNET::IService::cbAESConnection" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void cbAESConnection </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::string &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>serviceName</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>sid</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>void *&nbsp;</td>
+ <td class="mdname" nowrap> <em>arg</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [friend]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicen1" doxytag="NLNET::IService::cbDirectoryChanged" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void cbDirectoryChanged </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03648.html">NLMISC::IVariable</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>var</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [friend]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicen2" doxytag="NLNET::IService::cbReceiveShardId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void cbReceiveShardId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02918.html">NLNET::CMessage</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>msgin</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const std::string &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>serviceName</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>serviceId</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [friend]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicen3" doxytag="NLNET::IService::getWinDisplayerInfoClass" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> friend struct getWinDisplayerInfoClass<code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00394">394</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicen4" doxytag="NLNET::IService::serviceGetView" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void serviceGetView </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>rid</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const std::string &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>rawvarpath</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::vector&lt; std::string &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vara</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::vector&lt; std::string &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vala</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [friend]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicen5" doxytag="NLNET::IService::serviceInfoClass" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> friend struct serviceInfoClass<code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00393">393</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NLNET_1_1IServicez2101_0" doxytag="NLNET::IService::_AliasName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string <a class="el" href="a03876.html#NLNET_1_1IServicez2101_0">NLNET::IService::_AliasName</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00347">347</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00209">getServiceAliasName()</a>, <a class="el" href="a06364.html#l01348">getServiceUnifiedName()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_1" doxytag="NLNET::IService::_Args" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_1">NLNET::IService::_Args</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Array of arguments pass from the command line.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00336">336</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_2" doxytag="NLNET::IService::_CallbackArray" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03917.html">TUnifiedCallbackItem</a>* <a class="el" href="a03876.html#NLNET_1_1IServicez2101_2">NLNET::IService::_CallbackArray</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00375">375</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_3" doxytag="NLNET::IService::_CallbackArraySize" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a15">uint</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_3">NLNET::IService::_CallbackArraySize</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00376">376</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>, and <a class="el" href="a06365.html#l00291">setCallbackArray()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_4" doxytag="NLNET::IService::_DontUseAES" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a03876.html#NLNET_1_1IServicez2101_4">NLNET::IService::_DontUseAES</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if the service don't use the admin executor service
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00381">381</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_5" doxytag="NLNET::IService::_DontUseNS" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a03876.html#NLNET_1_1IServicez2101_5">NLNET::IService::_DontUseNS</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if the service don't use the naming service
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00379">379</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_6" doxytag="NLNET::IService::_Initialized" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a03876.html#NLNET_1_1IServicez2101_6">NLNET::IService::_Initialized</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+true if the service initialisation is passed
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00362">362</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_20" doxytag="NLNET::IService::_Instance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03876.html">IService</a> * <a class="el" href="a03876.html#NLNET_1_1IServicez2101_20">NLNET::IService::_Instance</a> = NULL<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Instance of this service (singleton).
+<p>
+
+<p>
+Definition at line <a class="el" href="a06364.html#l00115">115</a> of file <a class="el" href="a06364.html">service.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_7" doxytag="NLNET::IService::_LongName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string <a class="el" href="a03876.html#NLNET_1_1IServicez2101_7">NLNET::IService::_LongName</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00346">346</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00206">getServiceLongName()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_8" doxytag="NLNET::IService::_RecordingState" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02306.html#NLNET_1_1CCallbackServerw8">CCallbackNetBase::TRecordingState</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_8">NLNET::IService::_RecordingState</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Recording state.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00342">342</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_9" doxytag="NLNET::IService::_ResetMeasures" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a03876.html#NLNET_1_1IServicez2101_9">NLNET::IService::_ResetMeasures</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Require to reset the hierarchical timer.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00384">384</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>, and <a class="el" href="a06364.html#l01342">requireResetMeasures()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_10" doxytag="NLNET::IService::_ShardId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_10">NLNET::IService::_ShardId</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Shard Id.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00387">387</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00319">getShardId()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_11" doxytag="NLNET::IService::_ShortName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string <a class="el" href="a03876.html#NLNET_1_1IServicez2101_11">NLNET::IService::_ShortName</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Current service name sets by the actual service when declaring NLNET_SERVICE_MAIN.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00345">345</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00203">getServiceShortName()</a>, <a class="el" href="a06364.html#l01348">getServiceUnifiedName()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_12" doxytag="NLNET::IService::_SId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a05379.html#a93">TServiceId</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_12">NLNET::IService::_SId</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+the service id of this sevice
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00356">356</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00215">getServiceId()</a>, <a class="el" href="a06364.html#l01348">getServiceUnifiedName()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_13" doxytag="NLNET::IService::_Status" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a14">sint</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_13">NLNET::IService::_Status</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+the status of this service (the status is give to the at the release time)
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00359">359</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00218">getStatus()</a>, and <a class="el" href="a06365.html#l00251">setStatus()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_14" doxytag="NLNET::IService::_UpdateTimeout" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a05378.html#a242">NLMISC::TTime</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2101_14">NLNET::IService::_UpdateTimeout</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Select timeout value in milliseconds between to call of user <a class="el" href="a03876.html#NLNET_1_1IServicez2089_2">update()</a>.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00353">353</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>, and <a class="el" href="a06365.html#l00264">setUpdateTimeout()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2095_0" doxytag="NLNET::IService::CommandLog" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02813.html">NLMISC::CLog</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2095_0">NLNET::IService::CommandLog</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00273">273</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_15" doxytag="NLNET::IService::ConfigDirectory" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_15">NLNET::IService::ConfigDirectory</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The directory where the configfile is.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00365">365</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2095_1" doxytag="NLNET::IService::ConfigFile" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02401.html">NLMISC::CConfigFile</a> <a class="el" href="a03876.html#NLNET_1_1IServicez2095_1">NLNET::IService::ConfigFile</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00270">270</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_16" doxytag="NLNET::IService::ListeningPort" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;<a class="el" href="a04558.html#a9">uint16</a>&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_16">NLNET::IService::ListeningPort</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Listening port of this service.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00339">339</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06365.html#l00317">getPort()</a>, and <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_17" doxytag="NLNET::IService::LogDirectory" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_17">NLNET::IService::LogDirectory</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The directory where the logfiles are.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00368">368</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_18" doxytag="NLNET::IService::RunningDirectory" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_18">NLNET::IService::RunningDirectory</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The directory where the service is running.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00371">371</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServiceo0" doxytag="NLNET::IService::SaveFilesDirectory" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServiceo0">NLNET::IService::SaveFilesDirectory</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Directory where to store files that the services will write during the exploitation of the game (for example: player backup, string cache) Use .toString() to access to the value
+<p>
+Definition at line <a class="el" href="a06365.html#l00313">313</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServicez2101_19" doxytag="NLNET::IService::Version" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServicez2101_19">NLNET::IService::Version</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00373">373</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServiceo1" doxytag="NLNET::IService::WindowDisplayer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03727.html">NLMISC::CWindowDisplayer</a>* <a class="el" href="a03876.html#NLNET_1_1IServiceo1">NLNET::IService::WindowDisplayer</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The window displayer instance.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06365.html#l00305">305</a> of file <a class="el" href="a06365.html">service.h</a>.
+<p>
+Referenced by <a class="el" href="a06364.html#l00419">main()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLNET_1_1IServiceo2" doxytag="NLNET::IService::WriteFilesDirectory" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03646.html">NLMISC::CVariable</a>&lt;std::string&gt; <a class="el" href="a03876.html#NLNET_1_1IServiceo2">NLNET::IService::WriteFilesDirectory</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Directory where to store files that the services will write but are the same for all shard instance (for example: packet_sheets) Use .toString() to access to the value
+<p>
+Definition at line <a class="el" href="a06365.html#l00309">309</a> of file <a class="el" href="a06365.html">service.h</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a06365.html">service.h</a><li><a class="el" href="a06364.html">service.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 14:08:16 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>