evennia/docs/3.x/api/evennia.server.sessionhandler.html
2023-12-21 00:12:31 +01:00

669 lines
No EOL
46 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>evennia.server.sessionhandler &#8212; Evennia 3.x documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server.signals" href="evennia.server.signals.html" />
<link rel="prev" title="evennia.server.session" href="evennia.server.session.html" />
</head><body>
<div class="admonition important">
<p class="first admonition-title">Note</p>
<p class="last">You are reading an old version of the Evennia documentation. <a href="https://www.evennia.com/docs/latest/index.html">The latest version is here</a></p>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.signals.html" title="evennia.server.signals"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.session.html" title="evennia.server.session"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 3.x</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" accesskey="U">evennia.server</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.sessionhandler</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.server.session.html"
title="previous chapter">evennia.server.session</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.signals.html"
title="next chapter">evennia.server.signals</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.server.sessionhandler.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
</div>
</div>
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.server.sessionhandler">
<span id="evennia-server-sessionhandler"></span><h1>evennia.server.sessionhandler<a class="headerlink" href="#module-evennia.server.sessionhandler" title="Permalink to this headline"></a></h1>
<p>This module defines handlers for storing sessions when handles
sessions of users connecting to the server.</p>
<p>There are two similar but separate stores of sessions:</p>
<ul class="simple">
<li><dl class="simple">
<dt>ServerSessionHandler - this stores generic game sessions</dt><dd><p>for the game. These sessions has no knowledge about
how they are connected to the world.</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>PortalSessionHandler - this stores sessions created by</dt><dd><p>twisted protocols. These are dumb connectors that
handle network communication but holds no game info.</p>
</dd>
</dl>
</li>
</ul>
<dl class="py class">
<dt id="evennia.server.sessionhandler.DummySession">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.sessionhandler.</code><code class="sig-name descname">DummySession</code><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#DummySession"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.DummySession" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute">
<dt id="evennia.server.sessionhandler.DummySession.sessid">
<code class="sig-name descname">sessid</code><em class="property"> = 0</em><a class="headerlink" href="#evennia.server.sessionhandler.DummySession.sessid" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt id="evennia.server.sessionhandler.delayed_import">
<code class="sig-prename descclassname">evennia.server.sessionhandler.</code><code class="sig-name descname">delayed_import</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#delayed_import"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.delayed_import" title="Permalink to this definition"></a></dt>
<dd><p>Helper method for delayed import of all needed entities.</p>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.sessionhandler.SessionHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.sessionhandler.</code><code class="sig-name descname">SessionHandler</code><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#SessionHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.SessionHandler" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></p>
<p>This handler holds a stack of sessions.</p>
<dl class="py method">
<dt id="evennia.server.sessionhandler.SessionHandler.get">
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#SessionHandler.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.SessionHandler.get" title="Permalink to this definition"></a></dt>
<dd><p>Clean out None-sessions automatically.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.SessionHandler.get_sessions">
<code class="sig-name descname">get_sessions</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">include_unloggedin</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#SessionHandler.get_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.SessionHandler.get_sessions" title="Permalink to this definition"></a></dt>
<dd><p>Returns the connected session objects.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>include_unloggedin</strong> (<em>bool</em><em>, </em><em>optional</em>) Also list Sessions
that have not yet authenticated.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>sessions (list)</em> A list of <strong>Session</strong> objects.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.SessionHandler.get_all_sync_data">
<code class="sig-name descname">get_all_sync_data</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#SessionHandler.get_all_sync_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.SessionHandler.get_all_sync_data" title="Permalink to this definition"></a></dt>
<dd><p>Create a dictionary of sessdata dicts representing all
sessions in store.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>syncdata (dict)</em> A dict of sync data.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.SessionHandler.clean_senddata">
<code class="sig-name descname">clean_senddata</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#SessionHandler.clean_senddata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.SessionHandler.clean_senddata" title="Permalink to this definition"></a></dt>
<dd><p>Clean up data for sending across the AMP wire. Also apply the
FuncParser using callables from <strong>settings.FUNCPARSER_OUTGOING_MESSAGES_MODULES</strong>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) The relevant session instance.</p></li>
<li><p><strong>kwargs</strong> (<em>dict</em>) the name of the instruction (like “text”). Suitable values for each keyword are:
- arg -&gt; [[arg], {}]
- [args] -&gt; [[args], {}]
- {kwargs} -&gt; [[], {kwargs}]
- [args, {kwargs}] -&gt; [[arg], {kwargs}]
- [[args], {kwargs}] -&gt; [[args], {kwargs}]</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>kwargs (dict)</em> A cleaned dictionary of cmdname:[[args],{kwargs}] pairs,
where the keys, args and kwargs have all been converted to
send-safe entities (strings or numbers), and funcparser parsing has been
applied.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.sessionhandler.ServerSessionHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.sessionhandler.</code><code class="sig-name descname">ServerSessionHandler</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.server.sessionhandler.SessionHandler" title="evennia.server.sessionhandler.SessionHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.sessionhandler.SessionHandler</span></code></a></p>
<p>This object holds the stack of sessions active in the game at any time.</p>
<p>A session register with the handler in two steps, first by registering itself with the connect()
method. This indicates an non-authenticated session. Whenever the session is authenticated the
session together with the related account is sent to the login() method.</p>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Init the handler.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_connect">
<code class="sig-name descname">portal_connect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">portalsessiondata</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_connect" title="Permalink to this definition"></a></dt>
<dd><p>Called by Portal when a new session has connected.
Creates a new, unlogged-in game session.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>portalsessiondata</strong> (<em>dict</em>) a dictionary of all property:value
keys defining the session and which is marked to be
synced.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_session_sync">
<code class="sig-name descname">portal_session_sync</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">portalsessiondata</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_session_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_session_sync" title="Permalink to this definition"></a></dt>
<dd><p>Called by Portal when it wants to update a single session (e.g.
because of all negotiation protocols have finally replied)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>portalsessiondata</strong> (<em>dict</em>) a dictionary of all property:value
keys defining the session and which is marked to be
synced.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_sessions_sync">
<code class="sig-name descname">portal_sessions_sync</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">portalsessionsdata</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_sessions_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_sessions_sync" title="Permalink to this definition"></a></dt>
<dd><p>Syncing all session ids of the portal with the ones of the
server. This is instantiated by the portal when reconnecting.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>portalsessionsdata</strong> (<em>dict</em>) A dictionary
<strong>{sessid: {property:value},…}</strong> defining each session and
the properties in it which should be synced.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_disconnect">
<code class="sig-name descname">portal_disconnect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Called from Portal when Portal session closed from the portal
side. There is no message to report in this case.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) The Session to disconnect</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_disconnect_all">
<code class="sig-name descname">portal_disconnect_all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_disconnect_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_disconnect_all" title="Permalink to this definition"></a></dt>
<dd><p>Called from Portal when Portal is closing down. All
Sessions should die. The Portal should not be informed.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.start_bot_session">
<code class="sig-name descname">start_bot_session</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">protocol_path</span></em>, <em class="sig-param"><span class="n">configdict</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.start_bot_session"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.start_bot_session" title="Permalink to this definition"></a></dt>
<dd><p>This method allows the server-side to force the Portal to
create a new bot session.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>protocol_path</strong> (<em>str</em>) The full python path to the bots
class.</p></li>
<li><p><strong>configdict</strong> (<em>dict</em>) This dict will be used to configure
the bot (this depends on the bot protocol).</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Examples</p>
<dl class="simple">
<dt>start_bot_session(“evennia.server.portal.irc.IRCClient”,</dt><dd><dl class="simple">
<dt>{“uid”:1, “botname”:”evbot”, “channel”:”#evennia”,</dt><dd><p>“network:”irc.freenode.net”, “port”: 6667})</p>
</dd>
</dl>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The new session will use the supplied account-bot uid to
initiate an already logged-in connection. The Portal will
treat this as a normal connection and henceforth so will
the Server.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_restart_server">
<code class="sig-name descname">portal_restart_server</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_restart_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_restart_server" title="Permalink to this definition"></a></dt>
<dd><p>Called by server when reloading. We tell the portal to start a new server instance.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_reset_server">
<code class="sig-name descname">portal_reset_server</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_reset_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_reset_server" title="Permalink to this definition"></a></dt>
<dd><p>Called by server when reloading. We tell the portal to start a new server instance.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.portal_shutdown">
<code class="sig-name descname">portal_shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.portal_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.portal_shutdown" title="Permalink to this definition"></a></dt>
<dd><p>Called by server when its time to shut down (the portal will shut us down and then shut
itself down)</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.login">
<code class="sig-name descname">login</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="n">account</span></em>, <em class="sig-param"><span class="n">force</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">testmode</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.login" title="Permalink to this definition"></a></dt>
<dd><p>Log in the previously unloggedin session and the account we by now should know is connected
to it. After this point we assume the session to be logged in one way or another.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) The Session to authenticate.</p></li>
<li><p><strong>account</strong> (<em>Account</em>) The Account identified as associated with this Session.</p></li>
<li><p><strong>force</strong> (<em>bool</em>) Login also if the session thinks its already logged in
(this can happen for auto-authenticating protocols)</p></li>
<li><p><strong>testmode</strong> (<em>bool</em><em>, </em><em>optional</em>) This is used by unittesting for
faking login without any AMP being actually active.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="n">reason</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">sync_portal</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Called from server side to remove session and inform portal
of this fact.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) The Session to disconnect.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em>, </em><em>optional</em>) A motivation for the disconnect.</p></li>
<li><p><strong>sync_portal</strong> (<em>bool</em><em>, </em><em>optional</em>) Sync the disconnect to
Portal side. This should be done unless this was
called by self.portal_disconnect().</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.all_sessions_portal_sync">
<code class="sig-name descname">all_sessions_portal_sync</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.all_sessions_portal_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.all_sessions_portal_sync" title="Permalink to this definition"></a></dt>
<dd><p>This is called by the server when it reboots. It syncs all session data
to the portal. Returns a deferred!</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.session_portal_sync">
<code class="sig-name descname">session_portal_sync</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.session_portal_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.session_portal_sync" title="Permalink to this definition"></a></dt>
<dd><p>This is called by the server when it wants to sync a single session
with the Portal for whatever reason. Returns a deferred!</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.session_portal_partial_sync">
<code class="sig-name descname">session_portal_partial_sync</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session_data</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.session_portal_partial_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.session_portal_partial_sync" title="Permalink to this definition"></a></dt>
<dd><p>Call to make a partial update of the session, such as only a particular property.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>session_data</strong> (<em>dict</em>) Store <strong>{sessid: {property:value}, …}</strong> defining one or
more sessions in detail.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.disconnect_all_sessions">
<code class="sig-name descname">disconnect_all_sessions</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">reason</span><span class="o">=</span><span class="default_value">'You have been disconnected.'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.disconnect_all_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.disconnect_all_sessions" title="Permalink to this definition"></a></dt>
<dd><p>Cleanly disconnect all of the connected sessions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em><em>, </em><em>optional</em>) The reason for the disconnection.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.disconnect_duplicate_sessions">
<code class="sig-name descname">disconnect_duplicate_sessions</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">curr_session</span></em>, <em class="sig-param"><span class="n">reason</span><span class="o">=</span><span class="default_value">'Logged in from elsewhere. Disconnecting.'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.disconnect_duplicate_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.disconnect_duplicate_sessions" title="Permalink to this definition"></a></dt>
<dd><p>Disconnects any existing sessions with the same user.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>curr_session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Disconnect all Sessions matching this one.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em>, </em><em>optional</em>) A motivation for disconnecting.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.validate_sessions">
<code class="sig-name descname">validate_sessions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.validate_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.validate_sessions" title="Permalink to this definition"></a></dt>
<dd><p>Check all currently connected sessions (logged in and not) and
see if any are dead or idle.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.account_count">
<code class="sig-name descname">account_count</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.account_count"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.account_count" title="Permalink to this definition"></a></dt>
<dd><p>Get the number of connected accounts (not sessions since a
account may have more than one session depending on settings).
Only logged-in accounts are counted here.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>naccount (int)</em> Number of connected accounts</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.all_connected_accounts">
<code class="sig-name descname">all_connected_accounts</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.all_connected_accounts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.all_connected_accounts" title="Permalink to this definition"></a></dt>
<dd><p>Get a unique list of connected and logged-in Accounts.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><p><em>accounts (list)</em> </p>
<dl class="simple">
<dt>All connected Accounts (which may be fewer than the</dt><dd><p>amount of Sessions due to multi-playing).</p>
</dd>
</dl>
</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.session_from_sessid">
<code class="sig-name descname">session_from_sessid</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sessid</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.session_from_sessid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.session_from_sessid" title="Permalink to this definition"></a></dt>
<dd><p>Get session based on sessid, or None if not found</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>sessid</strong> (<em>int</em><em> or </em><em>list</em>) Session id(s).</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><p><em>sessions (Session or list)</em> </p>
<dl class="simple">
<dt>Session(s) found. This</dt><dd><p>is a list if input was a list.</p>
</dd>
</dl>
</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.session_from_account">
<code class="sig-name descname">session_from_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">account</span></em>, <em class="sig-param"><span class="n">sessid</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.session_from_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.session_from_account" title="Permalink to this definition"></a></dt>
<dd><p>Given an account and a session id, return the actual session
object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>account</strong> (<em>Account</em>) The Account to get the Session from.</p></li>
<li><p><strong>sessid</strong> (<em>int</em><em> or </em><em>list</em>) Session id(s).</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>sessions (Session or list)</em> Session(s) found.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.sessions_from_account">
<code class="sig-name descname">sessions_from_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">account</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.sessions_from_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.sessions_from_account" title="Permalink to this definition"></a></dt>
<dd><p>Given an account, return all matching sessions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>account</strong> (<em>Account</em>) Account to get sessions from.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>sessions (list)</em> All Sessions associated with this account.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.sessions_from_puppet">
<code class="sig-name descname">sessions_from_puppet</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">puppet</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.sessions_from_puppet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.sessions_from_puppet" title="Permalink to this definition"></a></dt>
<dd><p>Given a puppeted object, return all controlling sessions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>puppet</strong> (<em>Object</em>) Object puppeted</p>
</dd>
</dl>
<dl class="simple">
<dt>Returns.</dt><dd><dl class="simple">
<dt>sessions (Session or list): Can be more than one of Object is controlled by more than</dt><dd><p>one Session (MULTISESSION_MODE &gt; 1).</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.sessions_from_character">
<code class="sig-name descname">sessions_from_character</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">puppet</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.sessions_from_character" title="Permalink to this definition"></a></dt>
<dd><p>Given a puppeted object, return all controlling sessions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>puppet</strong> (<em>Object</em>) Object puppeted</p>
</dd>
</dl>
<dl class="simple">
<dt>Returns.</dt><dd><dl class="simple">
<dt>sessions (Session or list): Can be more than one of Object is controlled by more than</dt><dd><p>one Session (MULTISESSION_MODE &gt; 1).</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.sessions_from_csessid">
<code class="sig-name descname">sessions_from_csessid</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">csessid</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.sessions_from_csessid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.sessions_from_csessid" title="Permalink to this definition"></a></dt>
<dd><p>Given a client identification hash (for session types that offer them)
return all sessions with a matching hash.</p>
<dl class="simple">
<dt>Args</dt><dd><p>csessid (str): The session hash.</p>
</dd>
</dl>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>sessions (list)</em> The sessions with matching .csessid, if any.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.announce_all">
<code class="sig-name descname">announce_all</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.announce_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.announce_all" title="Permalink to this definition"></a></dt>
<dd><p>Send message to all connected sessions</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>message</strong> (<em>str</em>) Message to send.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Sending data Server -&gt; Portal</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Session to relay to.</p></li>
<li><p><strong>text</strong> (<em>str</em><em>, </em><em>optional</em>) text data to return</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The outdata will be scrubbed for sending across
the wire here.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.get_inputfuncs">
<code class="sig-name descname">get_inputfuncs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.get_inputfuncs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.get_inputfuncs" title="Permalink to this definition"></a></dt>
<dd><p>Get all registered inputfuncs (access function)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>inputfuncs (dict)</em> A dict of {key:inputfunc,…}</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.data_in" title="Permalink to this definition"></a></dt>
<dd><p>We let the data take a “detour” to session.data_in
so the user can override and see it all in one place.
That method is responsible to in turn always call
this class <strong>sessionhandler.call_inputfunc</strong> with the
(possibly processed) data.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.sessionhandler.ServerSessionHandler.call_inputfuncs">
<code class="sig-name descname">call_inputfuncs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">session</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/sessionhandler.html#ServerSessionHandler.call_inputfuncs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.sessionhandler.ServerSessionHandler.call_inputfuncs" title="Permalink to this definition"></a></dt>
<dd><p>Split incoming data into its inputfunc counterparts. This should be
called by the <strong>serversession.data_in</strong> as
<strong>sessionhandler.call_inputfunc(self, **kwargs)</strong>.</p>
<p>We also intercept OOB communication here.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>sessions</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Session.</p>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><p><strong>any</strong> (<em>tuple</em>) Incoming data from protocol, each
on the form <strong>commandname=((args), {kwargs})</strong>.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
</div>
</div>
</div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.signals.html" title="evennia.server.signals"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.session.html" title="evennia.server.session"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 3.x</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" >evennia.server</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.sessionhandler</a></li>
</ul>
</div>
<div class="admonition important">
<p class="first admonition-title">Note</p>
<p class="last">You are reading an old version of the Evennia documentation. <a href="https://www.evennia.com/docs/latest/index.html">The latest version is here</a></p>.
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2023, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>