PSF-LoginServer/net/psforever/services/account/PersistenceMonitor.html

39 lines
60 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html ><html><head><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/><title>PSF-LoginServer - master - net.psforever.services.account.PersistenceMonitor</title><meta content="PSF - LoginServer - master - net.psforever.services.account.PersistenceMonitor" name="description"/><meta content="PSF LoginServer master net.psforever.services.account.PersistenceMonitor" name="keywords"/><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><link href="../../../../lib/index.css" media="screen" type="text/css" rel="stylesheet"/><link href="../../../../lib/template.css" media="screen" type="text/css" rel="stylesheet"/><link href="../../../../lib/print.css" media="print" type="text/css" rel="stylesheet"/><link href="../../../../lib/diagrams.css" media="screen" type="text/css" rel="stylesheet" id="diagrams-css"/><script type="text/javascript" src="../../../../lib/jquery.min.js"></script><script type="text/javascript" src="../../../../lib/index.js"></script><script type="text/javascript" src="../../../../index.js"></script><script type="text/javascript" src="../../../../lib/scheduler.js"></script><script type="text/javascript" src="../../../../lib/template.js"></script><script type="text/javascript">/* this variable can be used by the JS to determine the path to the root document */
var toRoot = '../../../../';</script></head><body><div id="search"><span id="doc-title">PSF-LoginServer - <span id="doc-version">master</span></span> <span class="close-results"><span class="left">&lt;</span> Back</span><div id="textfilter"><span class="input"><input autocapitalize="none" placeholder="Search" id="index-input" type="text" accesskey="/"/><i class="clear material-icons"></i><i id="search-icon" class="material-icons"></i></span></div></div><div id="search-results"><div id="search-progress"><div id="progress-fill"></div></div><div id="results-content"><div id="entity-results"></div><div id="member-results"></div></div></div><div id="content-scroll-container" style="-webkit-overflow-scrolling: touch;"><div id="content-container" style="-webkit-overflow-scrolling: touch;"><div id="subpackage-spacer"><div id="packages"><h1>Packages</h1><ul><li class="indented0 " name="_root_.root" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="_root_" class="anchorToMember"></a><a id="root:_root_" class="anchorToMember"></a> <span class="permalink"><a href="../../../../index.html" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">package</span></span> <span class="symbol"><a href="../../../../index.html" title=""><span class="name">root</span></a></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="../../../../index.html" name="_root_" id="_root_" class="extype">root</a></dd></dl></div></li><li class="indented1 " name="_root_.net" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="net" class="anchorToMember"></a><a id="net:net" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/index.html" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">package</span></span> <span class="symbol"><a href="../../../index.html" title=""><span class="name">net</span></a></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="../../../../index.html" name="_root_" id="_root_" class="extype">root</a></dd></dl></div></li><li class="indented2 " name="net.psforever" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="psforever" class="anchorToMember"></a><a id="psforever:psforever" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/index.html" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">package</span></span> <span class="symbol"><a href="../../index.html" title=""><span class="name">psforever</span></a></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="../../../index.html" name="net" id="net" class="extype">net</a></dd></dl></div></li><li class="indented3 " name="net.psforever.services" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="services" class="anchorToMember"></a><a id="services:services" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/index.html" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">package</span></span> <span class="symbol"><a href="../index.html" title=""><span class="name">services</span></a></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="../../index.html" name="net.psforever" id="net.psforever" class="extype">psforever</a></dd></dl></div></li><li class="indented4 " name="net.psforever.services.account" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="account" class="anchorToMember"></a><a id="account:account" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/index.html" title="Permalin
with special care to the conditions of short interruption in connectivity (relogging)
and end-of-life operations.
Upon login, the monitor will echo all of the current information about the user's (recent) login back to the <code>sender</code>.
With a zone and a coordinate position in that zone, a user's player avatar can be properly reconnected
or can be reconstructed.
Without actual recent activity,
the default information about the zone is an indication that the user must start this player avatar from scratch.
The monitor expects a reliable update messaging (heartbeat) to keep track of the important information
and to determine the conditions for end-of-life activity.</p></div><dl class="attributes block"><dt>Source</dt><dd><a href="https://github.com/psforever/PSF-LoginServer/blob/master//home/runner/work/PSF-LoginServer/PSF-LoginServer/src/main/scala/net/psforever/services/account/AccountPersistenceService.scala" target="_blank">AccountPersistenceService.scala</a></dd></dl><div class="toggleContainer"><div class="toggle block"><span>Linear Supertypes</span><div class="superTypes hiddenContent"><span name="akka.actor.Actor" class="extype">Actor</span>, <span name="scala.AnyRef" class="extype">AnyRef</span>, <span name="scala.Any" class="extype">Any</span></div></div></div></div><div id="mbrsel"><div class="toggle"></div><div id="memberfilter"><i class="material-icons arrow"></i><span class="input"><input placeholder="Filter all members" id="mbrsel-input" type="text" accesskey="/"/></span><i class="clear material-icons"></i></div><div id="filterby"><div id="order"><span class="filtertype">Ordering</span><ol><li class="alpha in"><span>Alphabetic</span></li><li class="inherit out"><span>By Inheritance</span></li></ol></div><div class="ancestors"><span class="filtertype">Inherited<br/></span><ol id="linearization"><li class="in" name="net.psforever.services.account.PersistenceMonitor"><span>PersistenceMonitor</span></li><li class="in" name="akka.actor.Actor"><span>Actor</span></li><li class="in" name="scala.AnyRef"><span>AnyRef</span></li><li class="in" name="scala.Any"><span>Any</span></li></ol></div><div class="ancestors"><span class="filtertype"></span><ol><li class="hideall out"><span>Hide All</span></li><li class="showall in"><span>Show All</span></li></ol></div><div id="visbl"><span class="filtertype">Visibility</span><ol><li class="public in"><span>Public</span></li><li class="protected out"><span>Protected</span></li></ol></div></div></div><div id="template"><div id="allMembers"><div id="constructors" class="members"><h3>Instance Constructors</h3><ol><li class="indented0 " name="net.psforever.services.account.PersistenceMonitor#&lt;init&gt;" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="&lt;init&gt;(name:String,squadService:akka.actor.ActorRef,galaxyService:akka.actor.ActorRef):net.psforever.services.account.PersistenceMonitor" class="anchorToMember"></a><a id="&lt;init&gt;:PersistenceMonitor" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#&lt;init&gt;(name:String,squadService:akka.actor.ActorRef,galaxyService:akka.actor.ActorRef):net.psforever.services.account.PersistenceMonitor" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">new</span></span> <span class="symbol"><span class="name">PersistenceMonitor</span><span class="params">(<span name="name">name: <span name="scala.Predef.String" class="extype">String</span></span>, <span name="squadService">squadService: <span name="akka.actor.ActorRef" class="extype">ActorRef</span></span>, <span name="galaxyService">galaxyService: <span name="akka.actor.ActorRef" class="extype">ActorRef</span></span>)</span></span><p class="shortcomment cmt"></p><div class="fullcomment"><div class="comment cmt"></div><dl class="paramcmts block"><dt class="param">name</dt><dd class="cmt"><p>the unique name of the player</p></dd><dt class="param">squadService</dt><dd class="cmt"><p>a hook into the <code>SquadService</code> event system</p></dd></dl></div></li></ol></div><div id="types" class="types members"><h3>Type Members</h3><ol><li class="indented0 " name="akka.actor.Actor.Receive" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="Receive=akka.actor.Actor.Receive" class="anchorToMember"></a><a id="Receive:Receive" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#Receive=akka.actor.Actor.Receive" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><sp
Of the four scenarios described - in transport, on foot, released, missing - three of them utilize these operations.
The avatar will virtually always be in an existential position, one that needs to be handled at logout</p></div><dl class="paramcmts block"><dt class="param">avatar</dt><dd class="cmt"><p>the avatar</p></dd></dl><dl class="attributes block"><dt>See also</dt><dd><span class="cmt"><p><code>Avatar</code></p></span><span class="cmt"><p><code>Deployables.Disown</code></p></span><span class="cmt"><p><code>Service.Leave</code></p></span><span class="cmt"><p><code>Zone.Population.Leave</code></p></span></dd></dl></div></li><li class="indented0 " name="net.psforever.services.account.PersistenceMonitor#PerformLogout" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="PerformLogout():Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#PerformLogout():Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">PerformLogout</span><span class="params">()</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><p class="shortcomment cmt">When the sustenance updates of the persistence monitor come to an end,
and the persistence monitor itself is about to clean itself up,
the player and avatar combination that has been associated with it will also undergo independent end of life activity.</p><div class="fullcomment"><div class="comment cmt"><p>When the sustenance updates of the persistence monitor come to an end,
and the persistence monitor itself is about to clean itself up,
the player and avatar combination that has been associated with it will also undergo independent end of life activity.
This is the true purpose of the persistence object - to perform a proper logout.<br>
<br>
The updates have been providing the zone
and the basic information about the user (player name) has been provided since the beginning
and it's a trivial matter to find where the avatar and player and assess their circumstances.
The four important vectors are:
the player avatar is in a vehicle,
the player avatar is standing,
only the avatar exists and the player released,
and neither the avatar nor the player exist.
It does not matter whether the player, if encountered, is alive or dead,
only if they have been rendered a corpse and did not respawn.
The fourth condition is not technically a failure condition,
and can arise during normal transitional gameplay,
but should be uncommon.
</p></div></div></li><li class="indented0 " name="net.psforever.services.account.PersistenceMonitor#PlayerAvatarLogout" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="PlayerAvatarLogout(avatar:net.psforever.objects.avatar.Avatar,player:net.psforever.objects.Player):Unit" class="anchorToMember"></a><a id="PlayerAvatarLogout(Avatar,Player):Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#PlayerAvatarLogout(avatar:net.psforever.objects.avatar.Avatar,player:net.psforever.objects.Player):Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">PlayerAvatarLogout</span><span class="params">(<span name="avatar">avatar: <a href="../../objects/avatar/Avatar.html" name="net.psforever.objects.avatar.Avatar" id="net.psforever.objects.avatar.Avatar" class="extype">Avatar</a></span>, <span name="player">player: <a href="../../objects/Player.html" name="net.psforever.objects.Player" id="net.psforever.objects.Player" class="extype">Player</a></span>)</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><p class="shortcomment cmt">A common set of actions to perform in the course of logging out a player avatar.</p><div class="fullcomment"><div class="comment cmt"><p>A common set of actions to perform in the course of logging out a player avatar.
Of the four scenarios described - in transport, on foot, released, missing - two of them utilize these operations.
One of the other two uses a modified version of some of these activities to facilitate its log out.
As this persistence monitor is about to become invalid,
any messages sent in response to what we are sending are received by the monitor's parent.</p></div><dl class="paramcmts block"><dt class="param">avatar</dt><dd class="cmt"><p>the avatar</p></dd><dt class="param">player</dt><dd class="cmt"><p>the player</p></dd></dl><dl class="attributes block"><dt>See also</dt><dd><span class="cmt"><p><code>Avatar</code></p></span><span class="cmt"><p><code>AvatarAction.ObjectDelete</code></p></span><span class="cmt"><p><code>AvatarServiceMessage</code></p></span><span class="cmt"><p><code>GUIDTask.UnregisterPlayer</code></p></span><span class="cmt"><p><code>Player</code></p></span><span class="cmt"><p><code>Zone.AvatarEvents</code></p></span><span class="cmt"><p><code>Zone.Population.Release</code></p></span></dd></dl></div></li><li class="indented0 " name="net.psforever.services.account.PersistenceMonitor#UpdateTimer" group="Ungrouped" fullComment="no" data-isabs="false" visbl="pub"><a id="UpdateTimer():Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#UpdateTimer():Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">UpdateTimer</span><span class="params">()</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><p class="shortcomment cmt">Restart the minimum activity timer.</p></li><li class="indented0 " name="akka.actor.Actor#aroundPostRestart" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="prt"><a id="aroundPostRestart(reason:Throwable):Unit" class="anchorToMember"></a><a id="aroundPostRestart(Throwable):Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#aroundPostRestart(reason:Throwable):Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">aroundPostRestart</span><span class="params">(<span name="reason">reason: <span name="scala.Throwable" class="extype">Throwable</span></span>)</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><div class="fullcomment"><dl class="attributes block"><dt>Attributes</dt><dd>protected[<a href="../../../../akka/index.html" name="akka" id="akka" class="extype">akka</a>] </dd><dt>Definition Classes</dt><dd>Actor</dd><dt>Annotations</dt><dd><span class="name">@InternalApi</span><span class="args">()</span> </dd></dl></div></li><li class="indented0 " name="akka.actor.Actor#aroundPostStop" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="prt"><a id="aroundPostStop():Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#aroundPostStop():Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">aroundPostStop</span><span class="params">()</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><div class="fullcomment"><dl class="attributes block"><dt>Attributes</dt><dd>protected[<a href="../../../../akka/index.html" name="akka" id="akka" class="extype">akka</a>] </dd><dt>Definition Classes</dt><dd>Actor</dd><dt>Annotations</dt><dd><span class="name">@InternalApi</span><span class="args">()</span> </dd></dl></div></li><li class="indented0 " name="akka.actor.Actor#aroundPreRestart" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="prt"><a id="aroundPreRestart(reason:Throwable,message:Option[Any]):Unit" class="anchorToMember"></a><a id="aroundPreRestart(Throwable,Option[Any]):Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#aroundPreRes
</p></div><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="" name="net.psforever.services.account.PersistenceMonitor" id="net.psforever.services.account.PersistenceMonitor" class="extype">PersistenceMonitor</a> → Actor</dd></dl></div></li><li class="indented0 " name="akka.actor.Actor#preRestart" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="preRestart(reason:Throwable,message:Option[Any]):Unit" class="anchorToMember"></a><a id="preRestart(Throwable,Option[Any]):Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#preRestart(reason:Throwable,message:Option[Any]):Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">preRestart</span><span class="params">(<span name="reason">reason: <span name="scala.Throwable" class="extype">Throwable</span></span>, <span name="message">message: <span name="scala.Option" class="extype">Option</span>[<span name="scala.Any" class="extype">Any</span>]</span>)</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd>Actor</dd><dt>Annotations</dt><dd><span class="name">@throws</span><span class="args">(<span><span class="symbol">classOf[java.lang.Exception]</span></span>)</span> </dd></dl></div></li><li class="indented0 " name="akka.actor.Actor#preStart" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="preStart():Unit" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#preStart():Unit" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">preStart</span><span class="params">()</span><span class="result">: <span name="scala.Unit" class="extype">Unit</span></span></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd>Actor</dd><dt>Annotations</dt><dd><span class="name">@throws</span><span class="args">(<span><span class="symbol">classOf[java.lang.Exception]</span></span>)</span> </dd></dl></div></li><li class="indented0 " name="net.psforever.services.account.PersistenceMonitor#receive" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="receive:PersistenceMonitor.this.Receive" class="anchorToMember"></a><a id="receive:Receive" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#receive:PersistenceMonitor.this.Receive" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier"></span> <span class="kind">def</span></span> <span class="symbol"><span class="name">receive</span><span class="result">: <a href="#Receive=akka.actor.Actor.Receive" name="net.psforever.services.account.PersistenceMonitor.Receive" id="net.psforever.services.account.PersistenceMonitor.Receive" class="extmbr">Receive</a></span></span><div class="fullcomment"><dl class="attributes block"><dt>Definition Classes</dt><dd><a href="" name="net.psforever.services.account.PersistenceMonitor" id="net.psforever.services.account.PersistenceMonitor" class="extype">PersistenceMonitor</a> → Actor</dd></dl></div></li><li class="indented0 " name="akka.actor.Actor#self" group="Ungrouped" fullComment="yes" data-isabs="false" visbl="pub"><a id="self:akka.actor.ActorRef" class="anchorToMember"></a><a id="self:ActorRef" class="anchorToMember"></a> <span class="permalink"><a href="../../../../net/psforever/services/account/PersistenceMonitor.html#self:akka.actor.ActorRef" title="Permalink"><i class="material-icons"></i></a></span> <span class="modifier_kind"><span class="modifier">implicit final </span> <span class="ki