The latter can only be set by the <code>NumberSource</code> and can not be affected once this object is created.</p></div></div></li><liclass="indented0 "name="net.psforever.objects.guid.RegisteredToWrongPlaceException"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="RegisteredToWrongPlaceExceptionextendsRuntimeException"></a><aid="RegisteredToWrongPlaceException:RegisteredToWrongPlaceException"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/RegisteredToWrongPlaceException.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="RegisteredToWrongPlaceException.html"title="The entity was registered, but not to the target UNS."><spanclass="name">RegisteredToWrongPlaceException</span></a><spanclass="result"> extends <spanname="scala.RuntimeException"class="extype">RuntimeException</span></span></span><pclass="shortcomment cmt">The entity was registered, but not to the target UNS.</p><divclass="fullcomment"><divclass="comment cmt"><p>The entity was registered, but not to the target UNS.
Rookie mistake.</p></div></div></li><liclass="indented0 "name="net.psforever.objects.guid.RegisteringException"group="Ungrouped"fullComment="no"data-isabs="false"visbl="pub"><aid="RegisteringExceptionextendsException"></a><aid="RegisteringException:RegisteringException"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/RegisteringException.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="RegisteringException.html"title=""><spanclass="name">RegisteringException</span></a><spanclass="result"> extends <spanname="scala.Exception"class="extype">Exception</span></span></span></li><liclass="indented0 "name="net.psforever.objects.guid.StraightforwardTask"group="Ungrouped"fullComment="yes"data-isabs="true"visbl="pub"><aid="StraightforwardTaskextendsTask"></a><aid="StraightforwardTask:StraightforwardTask"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/StraightforwardTask.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">trait</span></span><spanclass="symbol"><ahref="StraightforwardTask.html"title="A primary unit of work in a workflow that is set up to execute and never be taken back."><spanclass="name">StraightforwardTask</span></a><spanclass="result"> extends <ahref="Task.html"name="net.psforever.objects.guid.Task"id="net.psforever.objects.guid.Task"class="extype">Task</a></span></span><pclass="shortcomment cmt">A primary unit of work in a workflow that is set up to execute and never be taken back.</p><divclass="fullcomment"><divclass="comment cmt"><p>A primary unit of work in a workflow that is set up to execute and never be taken back.
Good for top-level tasking that only reports on the success of work carried out by subtasks.
</p></div></div></li><liclass="indented0 "name="net.psforever.objects.guid.Task"group="Ungrouped"fullComment="no"data-isabs="true"visbl="pub"><aid="TaskextendsTaskBehaviors"></a><aid="Task:Task"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/Task.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">trait</span></span><spanclass="symbol"><ahref="Task.html"title="A primary unit of work in a workflow."><spanclass="name">Task</span></a><spanclass="result"> extends <ahref="TaskBehaviors.html"name="net.psforever.objects.guid.TaskBehaviors"id="net.psforever.objects.guid.TaskBehaviors"class="extype">TaskBehaviors</a></span></span><pclass="shortcomment cmt">A primary unit of work in a workflow.</p></li><liclass="indented0 "name="net.psforever.objects.guid.TaskBehaviors"group="Ungrouped"fullComment="no"data-isabs="true"visbl="pub"><aid="TaskBehaviorsextendsAnyRef"></a><aid="TaskBehaviors:TaskBehaviors"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/TaskBehaviors.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">sealed </span><spanclass="kind">trait</span></span><spanclass="symbol"><ahref="TaskBehaviors.html"title="Parts of the task resolution lifecycle."><spanclass="name">TaskBehaviors</span></a><spanclass="result"> extends <spanname="scala.AnyRef"class="extype">AnyRef</span></span></span><pclass="shortcomment cmt">Parts of the task resolution lifecycle.</p></li><liclass="indented0 "name="net.psforever.objects.guid.TaskBundle"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="TaskBundleextendsTaskBehaviorswithProductwithSerializable"></a><aid="TaskBundle:TaskBundle"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/TaskBundle.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">case class</span></span><spanclass="symbol"><ahref="TaskBundle.html"title="The packaging of a more complicated unit of work in a workflow in which one task relies on the successful completion of other tasks."><spanclass="name">TaskBundle</span></a><spanclass="params">(<spanname="mainTask">mainTask: <ahref="Task.html"name="net.psforever.objects.guid.Task"id="net.psforever.objects.guid.Task"class="extype">Task</a></span>, <spanname="subTasks">subTasks: <spanname="scala.Seq"class="extype">Seq</span>[<ahref="TaskBundle.html"name="net.psforever.objects.guid.TaskBundle"id="net.psforever.objects.guid.TaskBundle"class="extype">TaskBundle</a>]</span>)</span><spanclass="result"> extends <ahref="TaskBehaviors.html"name="net.psforever.objects.guid.TaskBehaviors"id="net.psforever.objects.guid.TaskBehaviors"class="extype">TaskBehaviors</a> with <spanname="scala.Product"class="extype">Product</span> with <spanname="scala.Serializable"class="extype">Serializable</span></span></span><pclass="shortcomment cmt">The packaging of a more complicated unit of work in a workflow
in which one task relies on the successful completion of other tasks.</p><divclass="fullcomment"><divclass="comment cmt"><p>The packaging of a more complicated unit of work in a workflow
in which one task relies on the successful completion of other tasks.</p></div><dlclass="paramcmts block"><dtclass="param">mainTask</dt><ddclass="cmt"><p>the primary task</p></dd><dtclass="param">subTasks</dt><ddclass="cmt"><p>tasks that are necessary to complete before starting on the primary one</p></dd></dl></div></li><liclass="indented0 "name="net.psforever.objects.guid.TaskNotExecutedException"group="Ungrouped"fullComment="no"data-isabs="false"visbl="pub"><aid="TaskNotExecutedExceptionextendsException"></a><aid="TaskNotExecutedException:TaskNotExecutedException"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/TaskNotExecutedException.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="TaskNotExecutedException.html"title=""><spanclass="name">TaskNotExecutedException</span></a><spanclass="result"> extends <spanname="scala.Exception"class="extype">Exception</span></span></span></li><liclass="indented0 "name="net.psforever.objects.guid.UniqueNumberOps"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="UniqueNumberOpsextendsAnyRef"></a><aid="UniqueNumberOps:UniqueNumberOps"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/UniqueNumberOps.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="UniqueNumberOps.html"title="Wrap around converted NumberPools and synchronize a portion of the number registration process as a part of the global unique identifier (GUID, UID) number system (UNS, "unique number system")."><spanclass="name">UniqueNumberOps</span></a><spanclass="result"> extends <spanname="scala.AnyRef"class="extype">AnyRef</span></span></span><pclass="shortcomment cmt">Wrap around converted <code>NumberPool</code>s and synchronize a portion of the number registration process
as a part of the global unique identifier (GUID, UID) number system (UNS, "unique number system").</p><divclass="fullcomment"><divclass="comment cmt"><p>Wrap around converted <code>NumberPool</code>s and synchronize a portion of the number registration process
as a part of the global unique identifier (GUID, UID) number system (UNS, "unique number system").
The ultimate goal is to manage a coherent group of unique identifiers for a given "region".
Both parts of the UID system sit atop the <code>Zone</code> for easy external access.
The plain part - the <code>NumberPoolHub</code> here - is used for low-priority requests
such as checking for existing associations.<br>
<br>
A four part process is used for object registration tasks.
First, the requested <code>NumberPool</code> is located among the list of known <code>NumberPool</code>s.
Second, an asynchronous request is sent to that pool to retrieve a number.
(Only any number. Only a failing case allows for selection of a specific number.)
Third, the asynchronous request returns and the original information about the request is recovered.
Fourth, both sides of the contract are completed by the object being assigned the number and
the underlying "number source" is made to remember an association between the object and the number.
Short circuits and recoveries as available on all steps though reporting is split between logging and callbacks.
The process of removing the association between a number and object (unregistering) is a similar four part process.<br>
<br>
The important relationship between this <code>Actor</code> and the <code>Map</code> of <code>NumberPoolActors</code> is as a "gate."
A single <code>Map</code> is constructed and shared between multiple entry points to the UID system where requests are messaged.
Multiple entry points send messages to the same <code>NumberPool</code>.
That <code>NumberPool</code> deals with the messages one at a time and sends reply to each entry point that communicated with it.
This process is almost as fast as the process of the <code>NumberPool</code> selecting a number.
(At least, both should be fast.)</p></div></div></li><liclass="indented0 "name="net.psforever.objects.guid.UniqueNumberSetup"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="UniqueNumberSetupextendsActor"></a><aid="UniqueNumberSetup:UniqueNumberSetup"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/UniqueNumberSetup.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="UniqueNumberSetup.html"title="A class for spawning Actors to manage the number pools and create a number system operations class to access those pools within the context of registering and unregistering."><spanclass="name">UniqueNumberSetup</span></a><spanclass="result"> extends <spanname="akka.actor.Actor"class="extype">Actor</span></span></span><pclass="shortcomment cmt">A class for spawning <code>Actor</code>s to manage the number pools and
create a number system operations class to access those pools within the context of registering and unregistering.</p><divclass="fullcomment"><divclass="comment cmt"><p>A class for spawning <code>Actor</code>s to manage the number pools and
create a number system operations class to access those pools within the context of registering and unregistering.
This <code>Actor</code> persists to maintain the number pool <code>Actor</code>s.
Note the <code>final</code> do-nothing <code>receive</code> method.
This <code>Actor</code> should do <u>nothing</u> through message passing.</p></div><dlclass="attributes block"><dt>See also</dt><dd><spanclass="cmt"><p><code>UniqueNumberOps</code></p></span></dd></dl></div></li><liclass="indented0 "name="net.psforever.objects.guid.UnregisteringException"group="Ungrouped"fullComment="no"data-isabs="false"visbl="pub"><aid="UnregisteringExceptionextendsException"></a><aid="UnregisteringException:UnregisteringException"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/UnregisteringException.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">class</span></span><spanclass="symbol"><ahref="UnregisteringException.html"title=""><spanclass="name">UnregisteringException</span></a><spanclass="result"> extends <spanname="scala.Exception"class="extype">Exception</span></span></span></li></ol></div><divclass="values members"><h3>Value Members</h3><ol><liclass="indented0 "name="net.psforever.objects.guid.GUIDTask"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="GUIDTask"></a><aid="GUIDTask:GUIDTask"></a><spanclass="permalink"><ahref="../../../../net/psforever/objects/guid/GUIDTask$.html"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">object</span></span><spanclass="symbol"><ahref="GUIDTask$.html"title="The basic compiled tasks for assigning (registering) and revoking (unregistering) globally unique identifiers. Almost all of these functions will be invoked from WorldSessionActor."><spanclass="name">GUIDTask</span></a></span><pclass="shortcomment cmt">The basic compiled tasks for assigning (registering) and revoking (unregistering) globally unique identifiers.<br>
Almost all of these functions will be invoked from <code>WorldSessionActor</code>.</p><divclass="fullcomment"><divclass="comment cmt"><p>The basic compiled tasks for assigning (registering) and revoking (unregistering) globally unique identifiers.<br>
<br>
Almost all of these functions will be invoked from <code>WorldSessionActor</code>.
Some of the "unregistering" functions will invoke on delayed <code>Service</code> operations,
indicating behavior that is not user/observer dependent.
The object's (current) <code>Zone</code> must also be knowable since the GUID systems are tied to individual zones.
For simplicity, all functions have the same format where the hook into the GUID system is an <code>implicit</code> parameter.
It will get passed from the more complicated functions down into the less complicated functions,
until it has found the basic number assignment functionality.<br>