evennia/docs/versions/1.0-dev/api/evennia.server.portal.html
2020-06-13 00:15:39 +02:00

3872 lines
No EOL
287 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 xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>evennia.server.portal package &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../_static/alabaster.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="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-evennia.server.portal">
<span id="evennia-server-portal-package"></span><h1>evennia.server.portal package<a class="headerlink" href="#module-evennia.server.portal" title="Permalink to this headline"></a></h1>
<div class="section" id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="module-evennia.server.portal.amp">
<span id="evennia-server-portal-amp-module"></span><h2>evennia.server.portal.amp module<a class="headerlink" href="#module-evennia.server.portal.amp" title="Permalink to this headline"></a></h2>
<p>The AMP (Asynchronous Message Protocol)-communication commands and constants used by Evennia.</p>
<p>This module acts as a central place for AMP-servers and -clients to get commands to use.</p>
<dl class="class">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">AMPMultiConnectionProtocol</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.AMP</span></code></p>
<p>AMP protocol that safely handle multiple connections to the same
server without dropping old ones - new clients will receive
all server returns (broadcast). Will also correctly handle
erroneous HTTP requests on the port and return a HTTP error response.</p>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize protocol with some things that need to be in place
already before connecting both on portal and server.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol._commandDispatch">
<code class="sig-name descname">_commandDispatch</code><em class="property"> = {b'FunctionCall': (&lt;class 'evennia.server.portal.amp.FunctionCall'&gt;, &lt;function catch_traceback&gt;), b'StartTLS': (&lt;class 'twisted.protocols.amp.StartTLS'&gt;, &lt;function BinaryBoxProtocol._defaultStartTLSResponder&gt;)}</em><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol._commandDispatch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.broadcast">
<code class="sig-name descname">broadcast</code><span class="sig-paren">(</span><em class="sig-param">command</em>, <em class="sig-param">sessid</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.broadcast"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.broadcast" title="Permalink to this definition"></a></dt>
<dd><p>Send data across the wire to all connections.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>command</strong> (<em>AMP Command</em>) A protocol send command.</p></li>
<li><p><strong>sessid</strong> (<em>int</em>) A unique Session id.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A deferred with an errback.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>deferred (deferred or None)</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Data will be sent across the wire pickled as a tuple
(sessid, kwargs).</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.connectionLost">
<code class="sig-name descname">connectionLost</code><span class="sig-paren">(</span><em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.connectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.connectionLost" title="Permalink to this definition"></a></dt>
<dd><p>We swallow connection errors here. The reason is that during a
normal reload/shutdown there will almost always be cases where
either the portal or server shuts down before a message has
returned its (empty) return, triggering a connectionLost error
that is irrelevant. If a true connection error happens, the
portal will continuously try to reconnect, showing the problem
that way.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.connectionMade">
<code class="sig-name descname">connectionMade</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.connectionMade"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.connectionMade" title="Permalink to this definition"></a></dt>
<dd><p>This is called when an AMP connection is (re-)established. AMP calls it on both sides.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.dataReceived">
<code class="sig-name descname">dataReceived</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.dataReceived"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.dataReceived" title="Permalink to this definition"></a></dt>
<dd><p>Handle non-AMP messages, such as HTTP communication.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">packed_data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Process incoming packed data.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>packed_data</strong> (<em>bytes</em>) Pickled data.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Unpickled package</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>unpaced_data (any)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.errback">
<code class="sig-name descname">errback</code><span class="sig-paren">(</span><em class="sig-param">e</em>, <em class="sig-param">info</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.errback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.errback" title="Permalink to this definition"></a></dt>
<dd><p>Error callback.
Handles errors to avoid dropping connections on server tracebacks.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>e</strong> (<em>Failure</em>) Deferred error instance.</p></li>
<li><p><strong>info</strong> (<em>str</em>) Error string.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.makeConnection">
<code class="sig-name descname">makeConnection</code><span class="sig-paren">(</span><em class="sig-param">transport</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.makeConnection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.makeConnection" title="Permalink to this definition"></a></dt>
<dd><p>Swallow connection log message here. Copied from original
in the amp protocol.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.receive_functioncall">
<code class="sig-name descname">receive_functioncall</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.receive_functioncall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.receive_functioncall" title="Permalink to this definition"></a></dt>
<dd><p>Helper decorator</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.AMPMultiConnectionProtocol.send_FunctionCall">
<code class="sig-name descname">send_FunctionCall</code><span class="sig-paren">(</span><em class="sig-param">modulepath</em>, <em class="sig-param">functionname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AMPMultiConnectionProtocol.send_FunctionCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol.send_FunctionCall" title="Permalink to this definition"></a></dt>
<dd><p>Access method called by either process. This will call an arbitrary
function on the other process (On Portal if calling from Server and
vice versa).</p>
<dl>
<dt>Inputs:</dt><dd><p>modulepath (str) - python path to module holding function to call
functionname (str) - name of function in given module
<a href="#id1"><span class="problematic" id="id2">*</span></a>args, <a href="#id3"><span class="problematic" id="id4">**</span></a>kwargs will be used as arguments/keyword args for the</p>
<blockquote>
<div><p>remote function call</p>
</div></blockquote>
</dd>
</dl>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A deferred that fires with the return value of the remote
function call</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.AdminPortal2Server">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">AdminPortal2Server</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AdminPortal2Server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Administration Portal -&gt; Server</p>
<p>Sent when the portal needs to perform admin operations on the
server, such as when a new session connects or resyncs</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'packed_data', &lt;evennia.server.portal.amp.Compressed object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'AdminPortal2Server'</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.key">
<code class="sig-name descname">key</code><em class="property"> = 'AdminPortal2Server'</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.response">
<code class="sig-name descname">response</code><em class="property"> = []</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminPortal2Server.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminPortal2Server.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.AdminServer2Portal">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">AdminServer2Portal</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#AdminServer2Portal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Administration Server -&gt; Portal</p>
<p>Sent when the server needs to perform admin operations on the
portal.</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'packed_data', &lt;evennia.server.portal.amp.Compressed object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'AdminServer2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.key">
<code class="sig-name descname">key</code><em class="property"> = 'AdminServer2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.response">
<code class="sig-name descname">response</code><em class="property"> = []</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.AdminServer2Portal.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.AdminServer2Portal.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.Compressed">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">Compressed</code><span class="sig-paren">(</span><em class="sig-param">optional=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#Compressed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.Compressed" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.String</span></code></p>
<p>This is a custom AMP command Argument that both handles too-long
sends as well as uses zlib for compression across the wire. The
batch-grouping of too-long sends is borrowed from the “mediumbox”
recipy at twisted-hackss ~glyph/+junk/amphacks/mediumbox.</p>
<dl class="method">
<dt id="evennia.server.portal.amp.Compressed.fromBox">
<code class="sig-name descname">fromBox</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">strings</em>, <em class="sig-param">objects</em>, <em class="sig-param">proto</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#Compressed.fromBox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.Compressed.fromBox" title="Permalink to this definition"></a></dt>
<dd><p>Converts from box string representation to python. We read back too-long batched data and
put it back together here.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.Compressed.fromString">
<code class="sig-name descname">fromString</code><span class="sig-paren">(</span><em class="sig-param">inString</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#Compressed.fromString"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.Compressed.fromString" title="Permalink to this definition"></a></dt>
<dd><p>Convert (decompress) from the string-representation on the wire to Python.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.Compressed.toBox">
<code class="sig-name descname">toBox</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">strings</em>, <em class="sig-param">objects</em>, <em class="sig-param">proto</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#Compressed.toBox"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.Compressed.toBox" title="Permalink to this definition"></a></dt>
<dd><p>Convert from python object to string box representation.
we break up too-long data snippets into multiple batches here.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp.Compressed.toString">
<code class="sig-name descname">toString</code><span class="sig-paren">(</span><em class="sig-param">inObject</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#Compressed.toString"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.Compressed.toString" title="Permalink to this definition"></a></dt>
<dd><p>Convert to send as a bytestring on the wire, with compression.</p>
<p>Note: In Py3 this is really a byte stream.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.FunctionCall">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">FunctionCall</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#FunctionCall"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Bidirectional Server &lt;-&gt; Portal</p>
<p>Sent when either process needs to call an arbitrary function in
the other. This does not use the batch-send functionality.</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'module', &lt;twisted.protocols.amp.String object&gt;), (b'function', &lt;twisted.protocols.amp.String object&gt;), (b'args', &lt;twisted.protocols.amp.String object&gt;), (b'kwargs', &lt;twisted.protocols.amp.String object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'FunctionCall'</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.key">
<code class="sig-name descname">key</code><em class="property"> = 'FunctionCall'</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.response">
<code class="sig-name descname">response</code><em class="property"> = [(b'result', &lt;twisted.protocols.amp.String object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.FunctionCall.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.FunctionCall.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">MsgLauncher2Portal</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#MsgLauncher2Portal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Message Launcher -&gt; Portal</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'operation', &lt;twisted.protocols.amp.String object&gt;), (b'arguments', &lt;twisted.protocols.amp.String object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'MsgLauncher2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.key">
<code class="sig-name descname">key</code><em class="property"> = 'MsgLauncher2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.response">
<code class="sig-name descname">response</code><em class="property"> = []</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgLauncher2Portal.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgLauncher2Portal.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.MsgPortal2Server">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">MsgPortal2Server</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#MsgPortal2Server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Message Portal -&gt; Server</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'packed_data', &lt;evennia.server.portal.amp.Compressed object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'MsgPortal2Server'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.key">
<code class="sig-name descname">key</code><em class="property"> = b'MsgPortal2Server'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.response">
<code class="sig-name descname">response</code><em class="property"> = []</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgPortal2Server.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgPortal2Server.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.MsgServer2Portal">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">MsgServer2Portal</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#MsgServer2Portal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Message Server -&gt; Portal</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'packed_data', &lt;evennia.server.portal.amp.Compressed object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'MsgServer2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.key">
<code class="sig-name descname">key</code><em class="property"> = 'MsgServer2Portal'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.response">
<code class="sig-name descname">response</code><em class="property"> = []</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgServer2Portal.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgServer2Portal.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp.MsgStatus">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">MsgStatus</code><span class="sig-paren">(</span><em class="sig-param">**kw</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#MsgStatus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.protocols.amp.Command</span></code></p>
<p>Check Status between AMP services</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.allErrors">
<code class="sig-name descname">allErrors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.allErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.arguments">
<code class="sig-name descname">arguments</code><em class="property"> = [(b'status', &lt;twisted.protocols.amp.String object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.arguments" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.commandName">
<code class="sig-name descname">commandName</code><em class="property"> = b'MsgStatus'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.commandName" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.errors">
<code class="sig-name descname">errors</code><em class="property"> = {&lt;class 'Exception'&gt;: b'EXCEPTION'}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.errors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.key">
<code class="sig-name descname">key</code><em class="property"> = 'MsgStatus'</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.response">
<code class="sig-name descname">response</code><em class="property"> = [(b'status', &lt;twisted.protocols.amp.String object&gt;)]</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp.MsgStatus.reverseErrors">
<code class="sig-name descname">reverseErrors</code><em class="property"> = {b'EXCEPTION': &lt;class 'Exception'&gt;}</em><a class="headerlink" href="#evennia.server.portal.amp.MsgStatus.reverseErrors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.amp._get_logger">
<code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">_get_logger</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#_get_logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp._get_logger" title="Permalink to this definition"></a></dt>
<dd><p>Delay import of logger until absolutely necessary</p>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.amp.dumps">
<code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">dumps</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#dumps"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.dumps" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="evennia.server.portal.amp.loads">
<code class="sig-prename descclassname">evennia.server.portal.amp.</code><code class="sig-name descname">loads</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp.html#loads"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp.loads" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.amp_server">
<span id="evennia-server-portal-amp-server-module"></span><h2>evennia.server.portal.amp_server module<a class="headerlink" href="#module-evennia.server.portal.amp_server" title="Permalink to this headline"></a></h2>
<p>The Evennia Portal service acts as an AMP-server, handling AMP
communication to the AMP clients connecting to it (by default
these are the Evennia Server and the evennia launcher).</p>
<dl class="class">
<dt id="evennia.server.portal.amp_server.AMPServerFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp_server.</code><code class="sig-name descname">AMPServerFactory</code><span class="sig-paren">(</span><em class="sig-param">portal</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ServerFactory</span></code></p>
<p>This factory creates AMP Server connection. This acts as the Portal-side communication to the
Server process.</p>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerFactory.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">portal</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerFactory.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerFactory.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the factory. This is called as the Portal service starts.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>portal</strong> (<a class="reference internal" href="#evennia.server.portal.portal.Portal" title="evennia.server.portal.portal.Portal"><em>Portal</em></a>) The Evennia Portal service instance.</p></li>
<li><p><strong>protocol</strong> (<em>Protocol</em>) The protocol the factory creates
instances of.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerFactory.buildProtocol">
<code class="sig-name descname">buildProtocol</code><span class="sig-paren">(</span><em class="sig-param">addr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerFactory.buildProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerFactory.buildProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Start a new connection, and store it on the service object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>addr</strong> (<em>str</em>) Connection address. Not used.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The created protocol.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>protocol (Protocol)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerFactory.logPrefix">
<code class="sig-name descname">logPrefix</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerFactory.logPrefix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerFactory.logPrefix" title="Permalink to this definition"></a></dt>
<dd><p>How this is named in logs</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.amp_server.AMPServerFactory.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerFactory.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.amp_server.</code><code class="sig-name descname">AMPServerProtocol</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.server.portal.amp.AMPMultiConnectionProtocol" title="evennia.server.portal.amp.AMPMultiConnectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.portal.amp.AMPMultiConnectionProtocol</span></code></a></p>
<p>Protocol subclass for the AMP-server run by the Portal.</p>
<dl class="attribute">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol._commandDispatch">
<code class="sig-name descname">_commandDispatch</code><em class="property"> = {b'AdminServer2Portal': (&lt;class 'evennia.server.portal.amp.AdminServer2Portal'&gt;, &lt;function catch_traceback&gt;), b'FunctionCall': (&lt;class 'evennia.server.portal.amp.FunctionCall'&gt;, &lt;function catch_traceback&gt;), b'MsgLauncher2Portal': (&lt;class 'evennia.server.portal.amp.MsgLauncher2Portal'&gt;, &lt;function catch_traceback&gt;), b'MsgServer2Portal': (&lt;class 'evennia.server.portal.amp.MsgServer2Portal'&gt;, &lt;function catch_traceback&gt;), b'MsgStatus': (&lt;class 'evennia.server.portal.amp.MsgStatus'&gt;, &lt;function catch_traceback&gt;), b'StartTLS': (&lt;class 'twisted.protocols.amp.StartTLS'&gt;, &lt;function BinaryBoxProtocol._defaultStartTLSResponder&gt;)}</em><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol._commandDispatch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.connectionLost">
<code class="sig-name descname">connectionLost</code><span class="sig-paren">(</span><em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.connectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.connectionLost" title="Permalink to this definition"></a></dt>
<dd><p>Set up a simple callback mechanism to let the amp-server wait for a connection to close.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.data_to_server">
<code class="sig-name descname">data_to_server</code><span class="sig-paren">(</span><em class="sig-param">command</em>, <em class="sig-param">sessid</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.data_to_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.data_to_server" title="Permalink to this definition"></a></dt>
<dd><p>Send data across the wire to the Server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>command</strong> (<em>AMP Command</em>) A protocol send command.</p></li>
<li><p><strong>sessid</strong> (<em>int</em>) A unique Session id.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Data to send. This will be pickled.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A deferred with an errback.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>deferred (deferred or None)</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Data will be sent across the wire pickled as a tuple
(sessid, kwargs).</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.get_status">
<code class="sig-name descname">get_status</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.get_status"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.get_status" title="Permalink to this definition"></a></dt>
<dd><p>Return status for the Evennia infrastructure.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>The portal/server status and pids</dt><dd><p>(portal_live, server_live, portal_PID, server_PID).</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>status (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_adminserver2portal">
<code class="sig-name descname">portal_receive_adminserver2portal</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_adminserver2portal" title="Permalink to this definition"></a></dt>
<dd><p>Helper decorator</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_launcher2portal">
<code class="sig-name descname">portal_receive_launcher2portal</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_launcher2portal" title="Permalink to this definition"></a></dt>
<dd><p>Helper decorator</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_server2portal">
<code class="sig-name descname">portal_receive_server2portal</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_server2portal" title="Permalink to this definition"></a></dt>
<dd><p>Helper decorator</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_status">
<code class="sig-name descname">portal_receive_status</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.portal_receive_status" title="Permalink to this definition"></a></dt>
<dd><p>Helper decorator</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.send_AdminPortal2Server">
<code class="sig-name descname">send_AdminPortal2Server</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">operation=''</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.send_AdminPortal2Server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.send_AdminPortal2Server" title="Permalink to this definition"></a></dt>
<dd><p>Send Admin instructions from the Portal to the Server.
Executed on the 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.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Session.</p></li>
<li><p><strong>operation</strong> (<em>char</em><em>, </em><em>optional</em>) Identifier for the server operation, as defined by the
global variables in <cite>evennia/server/amp.py</cite>.</p></li>
<li><p><strong>data</strong> (<em>str</em><em> or </em><em>dict</em><em>, </em><em>optional</em>) Data used in the administrative operation.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.send_MsgPortal2Server">
<code class="sig-name descname">send_MsgPortal2Server</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.send_MsgPortal2Server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.send_MsgPortal2Server" title="Permalink to this definition"></a></dt>
<dd><p>Access method called by the Portal and executed on the 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> (<em>session</em>) Session</p></li>
<li><p><strong>kwargs</strong> (<em>any</em><em>, </em><em>optional</em>) Optional data.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Asynchronous return.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>deferred (Deferred)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.send_Status2Launcher">
<code class="sig-name descname">send_Status2Launcher</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.send_Status2Launcher"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.send_Status2Launcher" title="Permalink to this definition"></a></dt>
<dd><p>Send a status stanza to the launcher.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.start_server">
<code class="sig-name descname">start_server</code><span class="sig-paren">(</span><em class="sig-param">server_twistd_cmd</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.start_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.start_server" title="Permalink to this definition"></a></dt>
<dd><p>(Re-)Launch the Evennia server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>server_twisted_cmd</strong> (<em>list</em>) The server start instruction
to pass to POpen to start the server.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.stop_server">
<code class="sig-name descname">stop_server</code><span class="sig-paren">(</span><em class="sig-param">mode='shutdown'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.stop_server"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.stop_server" title="Permalink to this definition"></a></dt>
<dd><p>Shut down server in one or more modes.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>mode</strong> (<em>str</em>) One of shutdown, reload or reset.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.wait_for_disconnect">
<code class="sig-name descname">wait_for_disconnect</code><span class="sig-paren">(</span><em class="sig-param">callback</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.wait_for_disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.wait_for_disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Add a callback for when this connection is lost.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> (<em>callable</em>) Will be called with <a href="#id5"><span class="problematic" id="id6">*</span></a>args, <a href="#id7"><span class="problematic" id="id8">**</span></a>kwargs
once this protocol is disconnected.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.amp_server.AMPServerProtocol.wait_for_server_connect">
<code class="sig-name descname">wait_for_server_connect</code><span class="sig-paren">(</span><em class="sig-param">callback</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#AMPServerProtocol.wait_for_server_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.AMPServerProtocol.wait_for_server_connect" title="Permalink to this definition"></a></dt>
<dd><p>Add a callback for when the Server is sure to have connected.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> (<em>callable</em>) Will be called with <a href="#id9"><span class="problematic" id="id10">*</span></a>args, <a href="#id11"><span class="problematic" id="id12">**</span></a>kwargs
once the Server handshake with Portal is complete.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.amp_server._is_windows">
<code class="sig-prename descclassname">evennia.server.portal.amp_server.</code><code class="sig-name descname">_is_windows</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#_is_windows"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server._is_windows" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="evennia.server.portal.amp_server.getenv">
<code class="sig-prename descclassname">evennia.server.portal.amp_server.</code><code class="sig-name descname">getenv</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/amp_server.html#getenv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.amp_server.getenv" title="Permalink to this definition"></a></dt>
<dd><p>Get current environment and add PYTHONPATH.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Environment global dict.</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>env (dict)</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.grapevine">
<span id="evennia-server-portal-grapevine-module"></span><h2>evennia.server.portal.grapevine module<a class="headerlink" href="#module-evennia.server.portal.grapevine" title="Permalink to this headline"></a></h2>
<p>Grapevine network connection</p>
<p>This is an implementation of the Grapevine Websocket protocol v 1.0.0 as
outlined here: <a class="reference external" href="https://grapevine.haus/docs">https://grapevine.haus/docs</a></p>
<p>This will allow the linked game to transfer status as well as connects
the grapevine client to in-game channels.</p>
<dl class="class">
<dt id="evennia.server.portal.grapevine.GrapevineClient">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.grapevine.</code><code class="sig-name descname">GrapevineClient</code><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketClientProtocol</span></code>, <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>Implements the grapevine client</p>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient._send_json">
<code class="sig-name descname">_send_json</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient._send_json"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient._send_json" title="Permalink to this definition"></a></dt>
<dd><p>Send (json-) data to client.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) Text to send.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.at_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">data</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Send data grapevine -&gt; Evennia</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>data (dict): Converted json data.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Generic hook for the engine to call in order to
disconnect this protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Motivation for the disconnection.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.onClose">
<code class="sig-name descname">onClose</code><span class="sig-paren">(</span><em class="sig-param">wasClean</em>, <em class="sig-param">code=None</em>, <em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.onClose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.onClose" title="Permalink to this definition"></a></dt>
<dd><p>This is executed when the connection is lost for whatever
reason. it can also be called directly, from the disconnect
method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>wasClean</strong> (<em>bool</em>) <code class="docutils literal notranslate"><span class="pre">True</span></code> if the WebSocket was closed cleanly.</p></li>
<li><p><strong>code</strong> (<em>int</em><em> or </em><em>None</em>) Close status as sent by the WebSocket peer.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Close reason as sent by the WebSocket peer.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.onMessage">
<code class="sig-name descname">onMessage</code><span class="sig-paren">(</span><em class="sig-param">payload</em>, <em class="sig-param">isBinary</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.onMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.onMessage" title="Permalink to this definition"></a></dt>
<dd><p>Callback fired when a complete WebSocket message was received.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>payload</strong> (<em>bytes</em>) The WebSocket message received.</p></li>
<li><p><strong>isBinary</strong> (<em>bool</em>) Flag indicating whether payload is binary or
UTF-8 encoded text.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.onOpen">
<code class="sig-name descname">onOpen</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.onOpen"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.onOpen" title="Permalink to this definition"></a></dt>
<dd><p>Called when connection is established.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_authenticate">
<code class="sig-name descname">send_authenticate</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_authenticate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_authenticate" title="Permalink to this definition"></a></dt>
<dd><p>Send grapevine authentication. This should be send immediately upon connection.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_channel">
<code class="sig-name descname">send_channel</code><span class="sig-paren">(</span><em class="sig-param">text</em>, <em class="sig-param">channel</em>, <em class="sig-param">sender</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_channel" title="Permalink to this definition"></a></dt>
<dd><p>Send text type Evennia -&gt; grapevine</p>
<p>This is the channels/send message type</p>
<p>Use with session.msg(channel=(message, channel, sender))</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Ignore other outputfuncs</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_heartbeat">
<code class="sig-name descname">send_heartbeat</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_heartbeat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_heartbeat" title="Permalink to this definition"></a></dt>
<dd><p>Send heartbeat to remote grapevine server.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_subscribe">
<code class="sig-name descname">send_subscribe</code><span class="sig-paren">(</span><em class="sig-param">channelname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_subscribe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_subscribe" title="Permalink to this definition"></a></dt>
<dd><p>Subscribe to new grapevine channel</p>
<p>Use with session.msg(subscribe=”channelname”)</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.GrapevineClient.send_unsubscribe">
<code class="sig-name descname">send_unsubscribe</code><span class="sig-paren">(</span><em class="sig-param">channelname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#GrapevineClient.send_unsubscribe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.GrapevineClient.send_unsubscribe" title="Permalink to this definition"></a></dt>
<dd><p>Un-subscribe to a grapevine channel</p>
<p>Use with session.msg(unsubscribe=”channelname”)</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.grapevine.</code><code class="sig-name descname">RestartingWebsocketServerFactory</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketClientFactory</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ReconnectingClientFactory</span></code></p>
<p>A variant of the websocket-factory that auto-reconnects.</p>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.__init__" title="Permalink to this definition"></a></dt>
<dd><p>In addition to all arguments to the constructor of
<code class="xref py py-func docutils literal notranslate"><span class="pre">autobahn.websocket.interfaces.IWebSocketClientChannelFactory()</span></code>,
you can supply a <code class="docutils literal notranslate"><span class="pre">reactor</span></code> keyword argument to specify the
Twisted reactor to be used.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.buildProtocol">
<code class="sig-name descname">buildProtocol</code><span class="sig-paren">(</span><em class="sig-param">addr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.buildProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.buildProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Build new instance of protocol</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>addr</strong> (<em>str</em>) Not used, using factory/settings data</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionFailed">
<code class="sig-name descname">clientConnectionFailed</code><span class="sig-paren">(</span><em class="sig-param">connector</em>, <em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.clientConnectionFailed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionFailed" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client failed to connect.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionLost">
<code class="sig-name descname">clientConnectionLost</code><span class="sig-paren">(</span><em class="sig-param">connector</em>, <em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.clientConnectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionLost" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client loses connection.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.factor">
<code class="sig-name descname">factor</code><em class="property"> = 1.5</em><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.factor" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.initialDelay">
<code class="sig-name descname">initialDelay</code><em class="property"> = 1</em><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.initialDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.maxDelay">
<code class="sig-name descname">maxDelay</code><em class="property"> = 60</em><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.maxDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.reconnect">
<code class="sig-name descname">reconnect</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.reconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.reconnect" title="Permalink to this definition"></a></dt>
<dd><p>Force a reconnection of the bot protocol. This requires
de-registering the session and then reattaching a new one,
otherwise you end up with an ever growing number of bot
sessions.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.start" title="Permalink to this definition"></a></dt>
<dd><p>Connect protocol to remote server</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.grapevine.RestartingWebsocketServerFactory.startedConnecting">
<code class="sig-name descname">startedConnecting</code><span class="sig-paren">(</span><em class="sig-param">connector</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/grapevine.html#RestartingWebsocketServerFactory.startedConnecting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.startedConnecting" title="Permalink to this definition"></a></dt>
<dd><p>Tracks reconnections for debugging.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>connector</strong> (<em>Connector</em>) Represents the connection.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.irc">
<span id="evennia-server-portal-irc-module"></span><h2>evennia.server.portal.irc module<a class="headerlink" href="#module-evennia.server.portal.irc" title="Permalink to this headline"></a></h2>
<p>This connects to an IRC network/channel and launches an bot onto it.
The bot then pipes what is being said between the IRC channel and one or
more Evennia channels.</p>
<dl class="class">
<dt id="evennia.server.portal.irc.IRCBot">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.irc.</code><code class="sig-name descname">IRCBot</code><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.words.protocols.irc.IRCClient</span></code>, <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>An IRC bot that tracks activity in a channel as well
as sends text to it when prompted</p>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.action">
<code class="sig-name descname">action</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">channel</em>, <em class="sig-param">msg</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.action"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.action" title="Permalink to this definition"></a></dt>
<dd><p>Called when an action is detected in channel.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>user</strong> (<em>str</em>) User name sending the message.</p></li>
<li><p><strong>channel</strong> (<em>str</em>) Channel name seeing the message.</p></li>
<li><p><strong>msg</strong> (<em>str</em>) The message arriving from channel.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.at_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.channel">
<code class="sig-name descname">channel</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.channel" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">text=None</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Data IRC -&gt; Server.</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>text (str): Ingoing text.
kwargs (any): Other data from protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Called by sessionhandler to disconnect this protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em>) Motivation for the disconnect.</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.factory">
<code class="sig-name descname">factory</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.get_nicklist">
<code class="sig-name descname">get_nicklist</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.get_nicklist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.get_nicklist" title="Permalink to this definition"></a></dt>
<dd><p>Retrieve name list from the channel. The return
is handled by the catch methods below.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.irc_RPL_ENDOFNAMES">
<code class="sig-name descname">irc_RPL_ENDOFNAMES</code><span class="sig-paren">(</span><em class="sig-param">prefix</em>, <em class="sig-param">params</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.irc_RPL_ENDOFNAMES"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.irc_RPL_ENDOFNAMES" title="Permalink to this definition"></a></dt>
<dd><p>Called when the nicklist has finished being returned.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.irc_RPL_NAMREPLY">
<code class="sig-name descname">irc_RPL_NAMREPLY</code><span class="sig-paren">(</span><em class="sig-param">prefix</em>, <em class="sig-param">params</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.irc_RPL_NAMREPLY"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.irc_RPL_NAMREPLY" title="Permalink to this definition"></a></dt>
<dd><p>“Handles IRC NAME request returns (nicklist)</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.lineRate">
<code class="sig-name descname">lineRate</code><em class="property"> = 1</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.lineRate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.logger">
<code class="sig-name descname">logger</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.logger" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.nickname">
<code class="sig-name descname">nickname</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.nickname" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.pong">
<code class="sig-name descname">pong</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">time</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.pong"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.pong" title="Permalink to this definition"></a></dt>
<dd><p>Called with the return timing from a PING.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>user</strong> (<em>str</em>) Name of user</p></li>
<li><p><strong>time</strong> (<em>float</em>) Ping time in secs.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.privmsg">
<code class="sig-name descname">privmsg</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">channel</em>, <em class="sig-param">msg</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.privmsg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.privmsg" title="Permalink to this definition"></a></dt>
<dd><p>Called when the connected channel receives a message.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>user</strong> (<em>str</em>) User name sending the message.</p></li>
<li><p><strong>channel</strong> (<em>str</em>) Channel name seeing the message.</p></li>
<li><p><strong>msg</strong> (<em>str</em>) The message arriving from channel.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_channel">
<code class="sig-name descname">send_channel</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_channel" title="Permalink to this definition"></a></dt>
<dd><p>Send channel text to IRC channel (visible to all). Note that
we dont handle the “text” send (its rerouted to send_default
which does nothing) - this is because the IRC bot is a normal
session and would otherwise report anything that happens to it
to the IRC channel (such as it seeing server reload messages).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Outgoing text</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Ignore other types of sends.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_ping">
<code class="sig-name descname">send_ping</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_ping"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_ping" title="Permalink to this definition"></a></dt>
<dd><p>Send a ping. The return (handled by <cite>self.pong</cite>) will be sent
back as a message of type ping.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_privmsg">
<code class="sig-name descname">send_privmsg</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_privmsg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_privmsg" title="Permalink to this definition"></a></dt>
<dd><p>Send message only to specific user.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Outgoing text.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>user (str): the nick to send</dt><dd><p>privately to.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_reconnect">
<code class="sig-name descname">send_reconnect</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_reconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_reconnect" title="Permalink to this definition"></a></dt>
<dd><p>The server instructs us to rebuild the connection by force,
probably because the client silently lost connection.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.send_request_nicklist">
<code class="sig-name descname">send_request_nicklist</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.send_request_nicklist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.send_request_nicklist" title="Permalink to this definition"></a></dt>
<dd><p>Send a request for the channel nicklist. The return (handled
by <cite>self.irc_RPL_ENDOFNAMES</cite>) will be sent back as a message
with type <a href="#id13"><span class="problematic" id="id14">`</span></a>nicklist.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBot.signedOn">
<code class="sig-name descname">signedOn</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBot.signedOn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.signedOn" title="Permalink to this definition"></a></dt>
<dd><p>This is called when we successfully connect to the network. We
make sure to now register with the game as a full session.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBot.sourceURL">
<code class="sig-name descname">sourceURL</code><em class="property"> = 'http://code.evennia.com'</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBot.sourceURL" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.irc.IRCBotFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.irc.</code><code class="sig-name descname">IRCBotFactory</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">uid=None</em>, <em class="sig-param">botname=None</em>, <em class="sig-param">channel=None</em>, <em class="sig-param">network=None</em>, <em class="sig-param">port=None</em>, <em class="sig-param">ssl=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ReconnectingClientFactory</span></code></p>
<p>Creates instances of IRCBot, connecting with a staggered
increase in delay</p>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">uid=None</em>, <em class="sig-param">botname=None</em>, <em class="sig-param">channel=None</em>, <em class="sig-param">network=None</em>, <em class="sig-param">port=None</em>, <em class="sig-param">ssl=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Storing some important protocol properties.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>sessionhandler</strong> (<a class="reference internal" href="evennia.server.html#evennia.server.sessionhandler.SessionHandler" title="evennia.server.sessionhandler.SessionHandler"><em>SessionHandler</em></a>) Reference to the main Sessionhandler.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>uid (int): Bot user id.
botname (str): Bot name (seen in IRC channel).
channel (str): IRC channel to connect to.
network (str): Network address to connect to.
port (str): Port of the network.
ssl (bool): Indicates SSL connection.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.buildProtocol">
<code class="sig-name descname">buildProtocol</code><span class="sig-paren">(</span><em class="sig-param">addr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.buildProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.buildProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Build the protocol and assign it some properties.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>addr</strong> (<em>str</em>) Not used; using factory data.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.clientConnectionFailed">
<code class="sig-name descname">clientConnectionFailed</code><span class="sig-paren">(</span><em class="sig-param">connector</em>, <em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.clientConnectionFailed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.clientConnectionFailed" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client failed to connect.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.clientConnectionLost">
<code class="sig-name descname">clientConnectionLost</code><span class="sig-paren">(</span><em class="sig-param">connector</em>, <em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.clientConnectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.clientConnectionLost" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client loses connection.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBotFactory.factor">
<code class="sig-name descname">factor</code><em class="property"> = 1.5</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.factor" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBotFactory.initialDelay">
<code class="sig-name descname">initialDelay</code><em class="property"> = 1</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.initialDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.irc.IRCBotFactory.maxDelay">
<code class="sig-name descname">maxDelay</code><em class="property"> = 60</em><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.maxDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.reconnect">
<code class="sig-name descname">reconnect</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.reconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.reconnect" title="Permalink to this definition"></a></dt>
<dd><p>Force a reconnection of the bot protocol. This requires
de-registering the session and then reattaching a new one,
otherwise you end up with an ever growing number of bot
sessions.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.start" title="Permalink to this definition"></a></dt>
<dd><p>Connect session to sessionhandler.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.irc.IRCBotFactory.startedConnecting">
<code class="sig-name descname">startedConnecting</code><span class="sig-paren">(</span><em class="sig-param">connector</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#IRCBotFactory.startedConnecting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.IRCBotFactory.startedConnecting" title="Permalink to this definition"></a></dt>
<dd><p>Tracks reconnections for debugging.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>connector</strong> (<em>Connector</em>) Represents the connection.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.irc.parse_ansi_to_irc">
<code class="sig-prename descclassname">evennia.server.portal.irc.</code><code class="sig-name descname">parse_ansi_to_irc</code><span class="sig-paren">(</span><em class="sig-param">string</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#parse_ansi_to_irc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.parse_ansi_to_irc" title="Permalink to this definition"></a></dt>
<dd><p>Parse <a href="#id15"><span class="problematic" id="id16">|</span></a>-type syntax and replace with IRC color markers</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> (<em>str</em>) String to parse for ANSI colors.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>String with replaced ANSI colors.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>parsed_string (str)</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.irc.parse_irc_to_ansi">
<code class="sig-prename descclassname">evennia.server.portal.irc.</code><code class="sig-name descname">parse_irc_to_ansi</code><span class="sig-paren">(</span><em class="sig-param">string</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/irc.html#parse_irc_to_ansi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.irc.parse_irc_to_ansi" title="Permalink to this definition"></a></dt>
<dd><p>Parse IRC mIRC color syntax and replace with Evennia ANSI color markers</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> (<em>str</em>) String to parse for IRC colors.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>String with replaced IRC colors.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>parsed_string (str)</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.mccp">
<span id="evennia-server-portal-mccp-module"></span><h2>evennia.server.portal.mccp module<a class="headerlink" href="#module-evennia.server.portal.mccp" title="Permalink to this headline"></a></h2>
<p>MCCP - Mud Client Compression Protocol</p>
<p>This implements the MCCP v2 telnet protocol as per
<a class="reference external" href="http://tintin.sourceforge.net/mccp/">http://tintin.sourceforge.net/mccp/</a>. MCCP allows for the server to
compress data when sending to supporting clients, reducing bandwidth
by 70-90%.. The compression is done using Pythons builtin zlib
library. If the client doesnt support MCCP, server sends uncompressed
as normal. Note: On modern hardware you are not likely to notice the
effect of MCCP unless you have extremely heavy traffic or sits on a
terribly slow connection.</p>
<p>This protocol is implemented by the telnet protocol importing
mccp_compress and calling it from its write methods.</p>
<dl class="class">
<dt id="evennia.server.portal.mccp.Mccp">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.mccp.</code><code class="sig-name descname">Mccp</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mccp.html#Mccp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mccp.Mccp" 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>
<p>Implements the MCCP protocol. Add this to a
variable on the telnet protocol to set it up.</p>
<dl class="method">
<dt id="evennia.server.portal.mccp.Mccp.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mccp.html#Mccp.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mccp.Mccp.__init__" title="Permalink to this definition"></a></dt>
<dd><p>initialize MCCP by storing protocol on
ourselves and calling the client to see if
it supports MCCP. Sets callbacks to
start zlib compression in that case.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol instance.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mccp.Mccp.do_mccp">
<code class="sig-name descname">do_mccp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mccp.html#Mccp.do_mccp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mccp.Mccp.do_mccp" title="Permalink to this definition"></a></dt>
<dd><p>The client supports MCCP. Set things up by
creating a zlib compression stream.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Option dict (not used).</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mccp.Mccp.no_mccp">
<code class="sig-name descname">no_mccp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mccp.html#Mccp.no_mccp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mccp.Mccp.no_mccp" title="Permalink to this definition"></a></dt>
<dd><p>Called if client doesnt support mccp or chooses to turn it off.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Option dict (not used).</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.mccp.mccp_compress">
<code class="sig-prename descclassname">evennia.server.portal.mccp.</code><code class="sig-name descname">mccp_compress</code><span class="sig-paren">(</span><em class="sig-param">protocol</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mccp.html#mccp_compress"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mccp.mccp_compress" title="Permalink to this definition"></a></dt>
<dd><p>Handles zlib compression, if applicable.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) Incoming data to compress.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Zlib-compressed data.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>stream (binary)</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.mssp">
<span id="evennia-server-portal-mssp-module"></span><h2>evennia.server.portal.mssp module<a class="headerlink" href="#module-evennia.server.portal.mssp" title="Permalink to this headline"></a></h2>
<p>MSSP - Mud Server Status Protocol</p>
<p>This implements the MSSP telnet protocol as per
<a class="reference external" href="http://tintin.sourceforge.net/mssp/">http://tintin.sourceforge.net/mssp/</a>. MSSP allows web portals and
listings to have their crawlers find the mud and automatically
extract relevant information about it, such as genre, how many
active players and so on.</p>
<dl class="class">
<dt id="evennia.server.portal.mssp.Mssp">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.mssp.</code><code class="sig-name descname">Mssp</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp" 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>
<p>Implements the MSSP protocol. Add this to a variable on the telnet
protocol to set it up.</p>
<dl class="method">
<dt id="evennia.server.portal.mssp.Mssp.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp.__init__" title="Permalink to this definition"></a></dt>
<dd><p>initialize MSSP by storing protocol on ourselves and calling
the client to see if it supports MSSP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol instance.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mssp.Mssp.do_mssp">
<code class="sig-name descname">do_mssp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp.do_mssp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp.do_mssp" title="Permalink to this definition"></a></dt>
<dd><p>Negotiate all the information.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mssp.Mssp.get_player_count">
<code class="sig-name descname">get_player_count</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp.get_player_count"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp.get_player_count" title="Permalink to this definition"></a></dt>
<dd><p>Get number of logged-in players.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The number of players in the MUD.</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>count (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mssp.Mssp.get_uptime">
<code class="sig-name descname">get_uptime</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp.get_uptime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp.get_uptime" title="Permalink to this definition"></a></dt>
<dd><p>Get how long the portal has been online (reloads are not counted).</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Number of seconds of uptime.</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>uptime (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mssp.Mssp.no_mssp">
<code class="sig-name descname">no_mssp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mssp.html#Mssp.no_mssp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mssp.Mssp.no_mssp" title="Permalink to this definition"></a></dt>
<dd><p>Called when mssp is not requested. This is the normal
operation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.mxp">
<span id="evennia-server-portal-mxp-module"></span><h2>evennia.server.portal.mxp module<a class="headerlink" href="#module-evennia.server.portal.mxp" title="Permalink to this headline"></a></h2>
<p>MXP - Mud eXtension Protocol.</p>
<p>Partial implementation of the MXP protocol.
The MXP protocol allows more advanced formatting options for telnet clients
that supports it (mudlet, zmud, mushclient are a few)</p>
<p>This only implements the SEND tag.</p>
<p>More information can be found on the following links:
<a class="reference external" href="http://www.zuggsoft.com/zmud/mxp.htm">http://www.zuggsoft.com/zmud/mxp.htm</a>
<a class="reference external" href="http://www.mushclient.com/mushclient/mxp.htm">http://www.mushclient.com/mushclient/mxp.htm</a>
<a class="reference external" href="http://www.gammon.com.au/mushclient/addingservermxp.htm">http://www.gammon.com.au/mushclient/addingservermxp.htm</a></p>
<dl class="class">
<dt id="evennia.server.portal.mxp.Mxp">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.mxp.</code><code class="sig-name descname">Mxp</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mxp.html#Mxp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mxp.Mxp" 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>
<p>Implements the MXP protocol.</p>
<dl class="method">
<dt id="evennia.server.portal.mxp.Mxp.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mxp.html#Mxp.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mxp.Mxp.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initializes the protocol by checking if the client supports it.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol instance.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mxp.Mxp.do_mxp">
<code class="sig-name descname">do_mxp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mxp.html#Mxp.do_mxp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mxp.Mxp.do_mxp" title="Permalink to this definition"></a></dt>
<dd><p>Called when the Client reports to support MXP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.mxp.Mxp.no_mxp">
<code class="sig-name descname">no_mxp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mxp.html#Mxp.no_mxp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mxp.Mxp.no_mxp" title="Permalink to this definition"></a></dt>
<dd><p>Called when the Client reports to not support MXP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.mxp.mxp_parse">
<code class="sig-prename descclassname">evennia.server.portal.mxp.</code><code class="sig-name descname">mxp_parse</code><span class="sig-paren">(</span><em class="sig-param">text</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/mxp.html#mxp_parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.mxp.mxp_parse" title="Permalink to this definition"></a></dt>
<dd><p>Replaces links to the correct format for MXP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) The text to parse.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The parsed text.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>parsed (str)</p>
</dd>
</dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.naws">
<span id="evennia-server-portal-naws-module"></span><h2>evennia.server.portal.naws module<a class="headerlink" href="#module-evennia.server.portal.naws" title="Permalink to this headline"></a></h2>
<p>NAWS - Negotiate About Window Size</p>
<p>This implements the NAWS telnet option as per
<a class="reference external" href="https://www.ietf.org/rfc/rfc1073.txt">https://www.ietf.org/rfc/rfc1073.txt</a></p>
<p>NAWS allows telnet clients to report their current window size to the
client and update it when the size changes</p>
<dl class="class">
<dt id="evennia.server.portal.naws.Naws">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.naws.</code><code class="sig-name descname">Naws</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/naws.html#Naws"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.naws.Naws" 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>
<p>Implements the NAWS protocol. Add this to a variable on the telnet
protocol to set it up.</p>
<dl class="method">
<dt id="evennia.server.portal.naws.Naws.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/naws.html#Naws.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.naws.Naws.__init__" title="Permalink to this definition"></a></dt>
<dd><p>initialize NAWS by storing protocol on ourselves and calling
the client to see if it supports NAWS.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol instance.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.naws.Naws.do_naws">
<code class="sig-name descname">do_naws</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/naws.html#Naws.do_naws"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.naws.Naws.do_naws" title="Permalink to this definition"></a></dt>
<dd><p>Client wants to negotiate all the NAWS information.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.naws.Naws.negotiate_sizes">
<code class="sig-name descname">negotiate_sizes</code><span class="sig-paren">(</span><em class="sig-param">options</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/naws.html#Naws.negotiate_sizes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.naws.Naws.negotiate_sizes" title="Permalink to this definition"></a></dt>
<dd><p>Step through the NAWS handshake.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>list</em>) The incoming NAWS options.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.naws.Naws.no_naws">
<code class="sig-name descname">no_naws</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/naws.html#Naws.no_naws"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.naws.Naws.no_naws" title="Permalink to this definition"></a></dt>
<dd><p>Called when client is not reporting NAWS. This is the normal
operation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.portal">
<span id="evennia-server-portal-portal-module"></span><h2>evennia.server.portal.portal module<a class="headerlink" href="#module-evennia.server.portal.portal" title="Permalink to this headline"></a></h2>
<p>This module implements the main Evennia server process, the core of
the game engine.</p>
<p>This module should be started with the twistd executable since it
sets up all the networking features. (this is done automatically
by game/evennia.py).</p>
<dl class="class">
<dt id="evennia.server.portal.portal.Portal">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.portal.</code><code class="sig-name descname">Portal</code><span class="sig-paren">(</span><em class="sig-param">application</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Portal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Portal" 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>
<p>The main Portal server handler. This object sets up the database
and tracks and interlinks all the twisted network services that
make up Portal.</p>
<dl class="method">
<dt id="evennia.server.portal.portal.Portal.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">application</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Portal.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Portal.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Setup the server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>application</strong> (<em>Application</em>) An instantiated Twisted application</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portal.Portal._get_backup_server_twistd_cmd">
<code class="sig-name descname">_get_backup_server_twistd_cmd</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Portal._get_backup_server_twistd_cmd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Portal._get_backup_server_twistd_cmd" title="Permalink to this definition"></a></dt>
<dd><p>For interactive Portal mode there is no way to get the server cmdline from the launcher, so
we need to guess it here (its very likely to not change)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>An instruction for starting the server, to pass to Popen.</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>server_twistd_cmd (list)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portal.Portal.get_info_dict">
<code class="sig-name descname">get_info_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Portal.get_info_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Portal.get_info_dict" title="Permalink to this definition"></a></dt>
<dd><p>Return the Portal info, for display.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portal.Portal.shutdown">
<code class="sig-name descname">shutdown</code><span class="sig-paren">(</span><em class="sig-param">_reactor_stopping=False</em>, <em class="sig-param">_stop_server=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Portal.shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Portal.shutdown" title="Permalink to this definition"></a></dt>
<dd><p>Shuts down the server from inside it.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>_reactor_stopping</strong> (<em>bool</em><em>, </em><em>optional</em>) This is set if server
is already in the process of shutting down; in this case
we dont need to stop it again.</p></li>
<li><p><strong>_stop_server</strong> (<em>bool</em><em>, </em><em>optional</em>) Only used in portal-interactive mode;
makes sure to stop the Server cleanly.</p></li>
</ul>
</dd>
</dl>
<p>Note that restarting (regardless of the setting) will not work
if the Portal is currently running in daemon mode. In that
case it always needs to be restarted manually.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.portal.Websocket">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.portal.</code><code class="sig-name descname">Websocket</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portal.html#Websocket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portal.Websocket" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketServerFactory</span></code></p>
<p>Only here for better naming in logs</p>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.portalsessionhandler">
<span id="evennia-server-portal-portalsessionhandler-module"></span><h2>evennia.server.portal.portalsessionhandler module<a class="headerlink" href="#module-evennia.server.portal.portalsessionhandler" title="Permalink to this headline"></a></h2>
<p>Sessionhandler for portal sessions</p>
<dl class="class">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.portalsessionhandler.</code><code class="sig-name descname">PortalSessionHandler</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.server.html#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 sessions connected to the portal at any time.
It is synced with the servers equivalent SessionHandler over the AMP
connection.</p>
<p>Sessions register with the handler using the connect() method. This
will assign a new unique sessionid to the session and send that sessid
to the server using the AMP connection.</p>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Init the handler</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.announce_all">
<code class="sig-name descname">announce_all</code><span class="sig-paren">(</span><em class="sig-param">message</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.announce_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.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 relay.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This will create an on-the fly text-type
send command.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.at_server_connection">
<code class="sig-name descname">at_server_connection</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.at_server_connection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.at_server_connection" title="Permalink to this definition"></a></dt>
<dd><p>Called when the Portal establishes connection with the Server.
At this point, the AMP connection is already established.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.connect">
<code class="sig-name descname">connect</code><span class="sig-paren">(</span><em class="sig-param">session</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.connect" title="Permalink to this definition"></a></dt>
<dd><p>Called by protocol at first connect. This adds a not-yet
authenticated session using an ever-increasing counter for
sessid.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>session</strong> (<em>PortalSession</em>) The Session connecting.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>We implement a throttling mechanism here to limit the speed at
which new connections are accepted - this is both a stop
against DoS attacks as well as helps using the Dummyrunner
tester with a large number of connector dummies.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.count_loggedin">
<code class="sig-name descname">count_loggedin</code><span class="sig-paren">(</span><em class="sig-param">include_unloggedin=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.count_loggedin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.count_loggedin" title="Permalink to this definition"></a></dt>
<dd><p>Count loggedin connections, alternatively count all connections.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>include_unloggedin</strong> (<em>bool</em>) Also count sessions that have</p></li>
<li><p><strong>yet authenticated.</strong> (<em>not</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Number of sessions.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>count (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Called by portal sessions for relaying data coming
in from the protocol to the server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>session</strong> (<em>PortalSession</em>) Session receiving data.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Other data from protocol.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Data is serialized before passed on.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Called by server for having the portal relay messages and data
to the correct session protocol.</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.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Session sending data.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Each key is a command instruction to the
protocol on the form key = [[args],{kwargs}]. This will
call a method send_&lt;key&gt; on the protocol. If no such
method exixts, it sends the data to a method send_default.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">session</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Called from portal when the connection is closed from the
portal side.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<em>PortalSession</em>) Session to disconnect.</p></li>
<li><p><strong>delete</strong> (<em>bool</em><em>, </em><em>optional</em>) Delete the session from
the handler. Only time to not do this is when
this is called from a loop, such as from
self.disconnect_all().</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.disconnect_all">
<code class="sig-name descname">disconnect_all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.disconnect_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.disconnect_all" title="Permalink to this definition"></a></dt>
<dd><p>Disconnect all sessions, informing the Server.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.generate_sessid">
<code class="sig-name descname">generate_sessid</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.generate_sessid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.generate_sessid" title="Permalink to this definition"></a></dt>
<dd><p>Simply generates a sessid thats guaranteed to be unique for this Portal run.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>sessid</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_connect">
<code class="sig-name descname">server_connect</code><span class="sig-paren">(</span><em class="sig-param">protocol_path=''</em>, <em class="sig-param">config={}</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.server_connect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_connect" title="Permalink to this definition"></a></dt>
<dd><p>Called by server to force the initialization of a new protocol
instance. Server wants this instance to get a unique sessid
and to be connected back as normal. This is used to initiate
irc/rss etc connections.</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>st</em>) Full python path to the class factory
for the protocol used, eg
evennia.server.portal.irc.IRCClientFactory</p></li>
<li><p><strong>config</strong> (<em>dict</em>) Dictionary of configuration options, fed as
<a href="#id17"><span class="problematic" id="id18">**</span></a>kwarg to protocol class __init__ method.</p></li>
</ul>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>RuntimeError</strong> If The correct factory class is not found.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The called protocol class must have a method start()
that calls the portalsession.connect() as a normal protocol.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect">
<code class="sig-name descname">server_disconnect</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">reason=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.server_disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Called by server to force a disconnect by sessid.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>session</strong> (<em>portalsession</em>) Session to disconnect.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em>, </em><em>optional</em>) Motivation for disconnect.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect_all">
<code class="sig-name descname">server_disconnect_all</code><span class="sig-paren">(</span><em class="sig-param">reason=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.server_disconnect_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect_all" title="Permalink to this definition"></a></dt>
<dd><p>Called by server when forcing a clean disconnect for everyone.</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>) Motivation for disconnect.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_logged_in">
<code class="sig-name descname">server_logged_in</code><span class="sig-paren">(</span><em class="sig-param">session</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.server_logged_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_logged_in" title="Permalink to this definition"></a></dt>
<dd><p>The server tells us that the session has been authenticated.
Update it. Called by the Server.</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.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Session logging in.</p></li>
<li><p><strong>data</strong> (<em>dict</em>) The session sync data.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_session_sync">
<code class="sig-name descname">server_session_sync</code><span class="sig-paren">(</span><em class="sig-param">serversessions</em>, <em class="sig-param">clean=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.server_session_sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_session_sync" title="Permalink to this definition"></a></dt>
<dd><p>Server wants to save data to the portal, maybe because its
about to shut down. We dont overwrite any sessions here, just
update them in-place.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>serversessions</strong> (<em>dict</em>) <p>This is a dictionary</p>
<p><cite>{sessid:{property:value},…}</cite> describing
the properties to sync on all sessions.</p>
</p></li>
<li><p><strong>clean</strong> (<em>bool</em>) If True, remove any Portal sessions that are
not included in serversessions.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.sessions_from_csessid">
<code class="sig-name descname">sessions_from_csessid</code><span class="sig-paren">(</span><em class="sig-param">csessid</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.sessions_from_csessid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.sessions_from_csessid" title="Permalink to this definition"></a></dt>
<dd><p>Given a session id, retrieve the session (this is primarily
intended to be called by web clients)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>csessid</strong> (<em>int</em>) Session id.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The matching session, if found.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>session (list)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.portalsessionhandler.PortalSessionHandler.sync">
<code class="sig-name descname">sync</code><span class="sig-paren">(</span><em class="sig-param">session</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/portalsessionhandler.html#PortalSessionHandler.sync"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler.sync" title="Permalink to this definition"></a></dt>
<dd><p>Called by the protocol of an already connected session. This
can be used to sync the session info in a delayed manner, such
as when negotiation and handshakes are delayed.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>session</strong> (<em>PortalSession</em>) Session to sync.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.portalsessionhandler._PORTAL_SESSION_HANDLER_CLASS">
<code class="sig-prename descclassname">evennia.server.portal.portalsessionhandler.</code><code class="sig-name descname">_PORTAL_SESSION_HANDLER_CLASS</code><a class="headerlink" href="#evennia.server.portal.portalsessionhandler._PORTAL_SESSION_HANDLER_CLASS" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler" title="evennia.server.portal.portalsessionhandler.PortalSessionHandler"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.portal.portalsessionhandler.PortalSessionHandler</span></code></a></p>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.rss">
<span id="evennia-server-portal-rss-module"></span><h2>evennia.server.portal.rss module<a class="headerlink" href="#module-evennia.server.portal.rss" title="Permalink to this headline"></a></h2>
<p>RSS parser for Evennia</p>
<p>This connects an RSS feed to an in-game Evennia channel, sending messages
to the channel whenever the feed updates.</p>
<dl class="class">
<dt id="evennia.server.portal.rss.RSSBotFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.rss.</code><code class="sig-name descname">RSSBotFactory</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">uid=None</em>, <em class="sig-param">url=None</em>, <em class="sig-param">rate=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSBotFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSBotFactory" 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>
<p>Initializes new bots.</p>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSBotFactory.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">sessionhandler</em>, <em class="sig-param">uid=None</em>, <em class="sig-param">url=None</em>, <em class="sig-param">rate=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSBotFactory.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSBotFactory.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the bot.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>sessionhandler</strong> (<a class="reference internal" href="#evennia.server.portal.portalsessionhandler.PortalSessionHandler" title="evennia.server.portal.portalsessionhandler.PortalSessionHandler"><em>PortalSessionHandler</em></a>) The main sessionhandler object.</p></li>
<li><p><strong>uid</strong> (<em>int</em>) User id for the bot.</p></li>
<li><p><strong>url</strong> (<em>str</em>) The RSS URL.</p></li>
<li><p><strong>rate</strong> (<em>int</em>) How often for the RSS to request the latest RSS entries.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSBotFactory.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSBotFactory.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSBotFactory.start" title="Permalink to this definition"></a></dt>
<dd><p>Called by portalsessionhandler. Starts the bot.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.rss.RSSReader">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.rss.</code><code class="sig-name descname">RSSReader</code><span class="sig-paren">(</span><em class="sig-param">factory</em>, <em class="sig-param">url</em>, <em class="sig-param">rate</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>A simple RSS reader using the feedparser module.</p>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">factory</em>, <em class="sig-param">url</em>, <em class="sig-param">rate</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the reader.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>factory</strong> (<em>RSSFactory</em>) The protocol factory.</p></li>
<li><p><strong>url</strong> (<em>str</em>) The RSS url.</p></li>
<li><p><strong>rate</strong> (<em>int</em>) The seconds between RSS lookups.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader._callback">
<code class="sig-name descname">_callback</code><span class="sig-paren">(</span><em class="sig-param">new_entries</em>, <em class="sig-param">init</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader._callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader._callback" title="Permalink to this definition"></a></dt>
<dd><p>Called when RSS returns.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>new_entries</strong> (<em>list</em>) List of new RSS entries since last.</p></li>
<li><p><strong>init</strong> (<em>bool</em>) If this is a startup operation (at which
point all entries are considered new).</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader._errback">
<code class="sig-name descname">_errback</code><span class="sig-paren">(</span><em class="sig-param">fail</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader._errback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader._errback" title="Permalink to this definition"></a></dt>
<dd><p>Report error</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">text=None</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Data RSS -&gt; Evennia.</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>text (str): Incoming text
kwargs (any): Options from protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnect from feed.</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>) Motivation for the disconnect.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader.get_new">
<code class="sig-name descname">get_new</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader.get_new"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader.get_new" title="Permalink to this definition"></a></dt>
<dd><p>Returns list of new items.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.rss.RSSReader.update">
<code class="sig-name descname">update</code><span class="sig-paren">(</span><em class="sig-param">init=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/rss.html#RSSReader.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.rss.RSSReader.update" title="Permalink to this definition"></a></dt>
<dd><p>Request the latest version of feed.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>init</strong> (<em>bool</em><em>, </em><em>optional</em>) If this is an initialization call
or not (during init, all entries are conidered new).</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This call is done in a separate thread to avoid blocking
on slow connections.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.ssh">
<span id="evennia-server-portal-ssh-module"></span><h2>evennia.server.portal.ssh module<a class="headerlink" href="#module-evennia.server.portal.ssh" title="Permalink to this headline"></a></h2>
<p>This module implements the ssh (Secure SHell) protocol for encrypted
connections.</p>
<p>This depends on a generic session module that implements the actual
login procedure of the game, tracks sessions etc.</p>
<p>Using standard ssh client,</p>
<dl class="class">
<dt id="evennia.server.portal.ssh.AccountDBPasswordChecker">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">AccountDBPasswordChecker</code><span class="sig-paren">(</span><em class="sig-param">factory</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#AccountDBPasswordChecker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.AccountDBPasswordChecker" 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>
<p>Checks the django db for the correct credentials for
username/password otherwise it returns the account or None which is
useful for the Realm.</p>
<dl class="method">
<dt id="evennia.server.portal.ssh.AccountDBPasswordChecker.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">factory</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#AccountDBPasswordChecker.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.AccountDBPasswordChecker.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the factory.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>factory</strong> (<em>SSHFactory</em>) Checker factory.</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.AccountDBPasswordChecker.credentialInterfaces">
<code class="sig-name descname">credentialInterfaces</code><em class="property"> = (&lt;InterfaceClass twisted.cred.credentials.IUsernamePassword&gt;,)</em><a class="headerlink" href="#evennia.server.portal.ssh.AccountDBPasswordChecker.credentialInterfaces" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.AccountDBPasswordChecker.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.AccountDBPasswordChecker.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.AccountDBPasswordChecker.requestAvatarId">
<code class="sig-name descname">requestAvatarId</code><span class="sig-paren">(</span><em class="sig-param">c</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#AccountDBPasswordChecker.requestAvatarId"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.AccountDBPasswordChecker.requestAvatarId" title="Permalink to this definition"></a></dt>
<dd><p>Generic credentials.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.ssh.ExtraInfoAuthServer">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">ExtraInfoAuthServer</code><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#ExtraInfoAuthServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.ExtraInfoAuthServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.conch.ssh.userauth.SSHUserAuthServer</span></code></p>
<dl class="method">
<dt id="evennia.server.portal.ssh.ExtraInfoAuthServer.auth_password">
<code class="sig-name descname">auth_password</code><span class="sig-paren">(</span><em class="sig-param">packet</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#ExtraInfoAuthServer.auth_password"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.ExtraInfoAuthServer.auth_password" title="Permalink to this definition"></a></dt>
<dd><p>Password authentication.</p>
<p>Used mostly for setting up the transport so we can query
username and password later.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>packet</strong> (<em>Packet</em>) Auth packet.</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.ExtraInfoAuthServer.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.ExtraInfoAuthServer.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.ssh.PassAvatarIdTerminalRealm">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">PassAvatarIdTerminalRealm</code><span class="sig-paren">(</span><em class="sig-param">transportFactory=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#PassAvatarIdTerminalRealm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.PassAvatarIdTerminalRealm" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.conch.manhole_ssh.TerminalRealm</span></code></p>
<p>Returns an avatar that passes the avatarId through to the
protocol. This is probably not the best way to do it.</p>
<dl class="method">
<dt id="evennia.server.portal.ssh.PassAvatarIdTerminalRealm._getAvatar">
<code class="sig-name descname">_getAvatar</code><span class="sig-paren">(</span><em class="sig-param">avatarId</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#PassAvatarIdTerminalRealm._getAvatar"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.PassAvatarIdTerminalRealm._getAvatar" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.PassAvatarIdTerminalRealm.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.PassAvatarIdTerminalRealm.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.ssh.SSHServerFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">SSHServerFactory</code><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SSHServerFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SSHServerFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ServerFactory</span></code></p>
<p>This is only to name this better in logs</p>
<dl class="method">
<dt id="evennia.server.portal.ssh.SSHServerFactory.logPrefix">
<code class="sig-name descname">logPrefix</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SSHServerFactory.logPrefix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SSHServerFactory.logPrefix" title="Permalink to this definition"></a></dt>
<dd><p>Describe this factory for log messages.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.SSHServerFactory.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.SSHServerFactory.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.ssh.SshProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">SshProtocol</code><span class="sig-paren">(</span><em class="sig-param">starttuple</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.conch.manhole.Manhole</span></code>, <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>Each account connecting over ssh gets this protocol assigned to
them. All communication between game and account goes through
here.</p>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">starttuple</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.__init__" title="Permalink to this definition"></a></dt>
<dd><p>For setting up the account. If account is not None then well
login automatically.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>starttuple</strong> (<em>tuple</em>) A (account, factory) tuple.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.at_login" title="Permalink to this definition"></a></dt>
<dd><p>Called when this session gets authenticated by the server.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.connectionLost">
<code class="sig-name descname">connectionLost</code><span class="sig-paren">(</span><em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.connectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.connectionLost" title="Permalink to this definition"></a></dt>
<dd><p>This is executed when the connection is lost for whatever
reason. It can also be called directly, from the disconnect
method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em>) Motivation for loosing connection.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.connectionMade">
<code class="sig-name descname">connectionMade</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.connectionMade"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.connectionMade" title="Permalink to this definition"></a></dt>
<dd><p>This is called when the connection is first established.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Options to the protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason='Connection closed. Goodbye for now.'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnect from server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em>) Motivation for disconnect.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.getClientAddress">
<code class="sig-name descname">getClientAddress</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.getClientAddress"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.getClientAddress" title="Permalink to this definition"></a></dt>
<dd><p>Get client address.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>The clients address and port in</dt><dd><p>a tuple. For example <cite>(127.0.0.1, 41917)</cite>.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>address_and_port (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.handle_EOF">
<code class="sig-name descname">handle_EOF</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.handle_EOF"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.handle_EOF" title="Permalink to this definition"></a></dt>
<dd><p>Handles EOF generally used to exit.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.handle_FF">
<code class="sig-name descname">handle_FF</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.handle_FF"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.handle_FF" title="Permalink to this definition"></a></dt>
<dd><p>Handle a form feed byte - generally used to request a screen
refresh/redraw.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.handle_INT">
<code class="sig-name descname">handle_INT</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.handle_INT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.handle_INT" title="Permalink to this definition"></a></dt>
<dd><p>Handle ^C as an interrupt keystroke by resetting the current
input variables to their initial state.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.handle_QUIT">
<code class="sig-name descname">handle_QUIT</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.handle_QUIT"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.handle_QUIT" title="Permalink to this definition"></a></dt>
<dd><p>Quit, end, and lose the connection.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.lineReceived">
<code class="sig-name descname">lineReceived</code><span class="sig-paren">(</span><em class="sig-param">string</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.lineReceived"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.lineReceived" title="Permalink to this definition"></a></dt>
<dd><p>Communication User -&gt; Evennia. Any line return indicates a
command for the purpose of the MUD. So we take the user input
and pass it on to the game engine.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> (<em>str</em>) Input text.</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.SshProtocol.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.sendLine">
<code class="sig-name descname">sendLine</code><span class="sig-paren">(</span><em class="sig-param">string</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.sendLine"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.sendLine" title="Permalink to this definition"></a></dt>
<dd><p>Communication Evennia -&gt; User. Any string sent should
already have been properly formatted and processed before
reaching this point.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> (<em>str</em>) Output text.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.send_default" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.send_prompt">
<code class="sig-name descname">send_prompt</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.send_prompt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.send_prompt" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.send_text">
<code class="sig-name descname">send_text</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.send_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.send_text" title="Permalink to this definition"></a></dt>
<dd><p>Send text data. This is an in-band telnet operation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) The first argument is always the text string to send. No other arguments
are considered.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): Send-option flags</dt><dd><ul class="simple">
<li><p>mxp: Enforce MXP link support.</p></li>
<li><p>ansi: Enforce no ANSI colors.</p></li>
<li><p>xterm256: Enforce xterm256 colors, regardless of TTYPE setting.</p></li>
<li><p>nocolor: Strip all colors.</p></li>
<li><dl class="simple">
<dt>raw: Pass string through without any ansi processing</dt><dd><p>(i.e. include Evennia ansi markers but do not
convert them into ansi tokens)</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>echo: Turn on/off line echo on the client. Turn</dt><dd><p>off line echo for client, for example for password.
Note that it must be actively turned back on again!</p>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ssh.SshProtocol.terminalSize">
<code class="sig-name descname">terminalSize</code><span class="sig-paren">(</span><em class="sig-param">width</em>, <em class="sig-param">height</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#SshProtocol.terminalSize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.SshProtocol.terminalSize" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the terminal and connect to the new session.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>width</strong> (<em>int</em>) Width of terminal.</p></li>
<li><p><strong>height</strong> (<em>int</em>) Height of terminal.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.ssh.TerminalSessionTransport_getPeer">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">TerminalSessionTransport_getPeer</code><span class="sig-paren">(</span><em class="sig-param">proto</em>, <em class="sig-param">chainedProtocol</em>, <em class="sig-param">avatar</em>, <em class="sig-param">width</em>, <em class="sig-param">height</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#TerminalSessionTransport_getPeer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.TerminalSessionTransport_getPeer" 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>
<p>Taken from twisteds TerminalSessionTransport which doesnt
provide getPeer to the transport. This one does.</p>
<dl class="method">
<dt id="evennia.server.portal.ssh.TerminalSessionTransport_getPeer.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">proto</em>, <em class="sig-param">chainedProtocol</em>, <em class="sig-param">avatar</em>, <em class="sig-param">width</em>, <em class="sig-param">height</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#TerminalSessionTransport_getPeer.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.TerminalSessionTransport_getPeer.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.ssh.TerminalSessionTransport_getPeer.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.ssh.TerminalSessionTransport_getPeer.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.ssh.getKeyPair">
<code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">getKeyPair</code><span class="sig-paren">(</span><em class="sig-param">pubkeyfile</em>, <em class="sig-param">privkeyfile</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#getKeyPair"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.getKeyPair" title="Permalink to this definition"></a></dt>
<dd><p>This function looks for RSA keypair files in the current directory. If they
do not exist, the keypair is created.</p>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.ssh.makeFactory">
<code class="sig-prename descclassname">evennia.server.portal.ssh.</code><code class="sig-name descname">makeFactory</code><span class="sig-paren">(</span><em class="sig-param">configdict</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssh.html#makeFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssh.makeFactory" title="Permalink to this definition"></a></dt>
<dd><p>Creates the ssh server factory.</p>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.ssl">
<span id="evennia-server-portal-ssl-module"></span><h2>evennia.server.portal.ssl module<a class="headerlink" href="#module-evennia.server.portal.ssl" title="Permalink to this headline"></a></h2>
<p>This is a simple context factory for auto-creating
SSL keys and certificates.</p>
<dl class="class">
<dt id="evennia.server.portal.ssl.SSLProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ssl.</code><code class="sig-name descname">SSLProtocol</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssl.html#SSLProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssl.SSLProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.server.portal.telnet.TelnetProtocol" title="evennia.server.portal.telnet.TelnetProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.portal.telnet.TelnetProtocol</span></code></a></p>
<p>Communication is the same as telnet, except data transfer
is done with encryption.</p>
<dl class="method">
<dt id="evennia.server.portal.ssl.SSLProtocol.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssl.html#SSLProtocol.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssl.SSLProtocol.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.ssl.getSSLContext">
<code class="sig-prename descclassname">evennia.server.portal.ssl.</code><code class="sig-name descname">getSSLContext</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssl.html#getSSLContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssl.getSSLContext" title="Permalink to this definition"></a></dt>
<dd><p>This is called by the portal when creating the SSL context
server-side.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>A key and certificate that is either</dt><dd><p>existing previously or or created on the fly.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>ssl_context (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.ssl.verify_SSL_key_and_cert">
<code class="sig-prename descclassname">evennia.server.portal.ssl.</code><code class="sig-name descname">verify_SSL_key_and_cert</code><span class="sig-paren">(</span><em class="sig-param">keyfile</em>, <em class="sig-param">certfile</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ssl.html#verify_SSL_key_and_cert"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ssl.verify_SSL_key_and_cert" title="Permalink to this definition"></a></dt>
<dd><p>This function looks for RSA key and certificate in the current
directory. If files ssl.key and ssl.cert does not exist, they
are created.</p>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.suppress_ga">
<span id="evennia-server-portal-suppress-ga-module"></span><h2>evennia.server.portal.suppress_ga module<a class="headerlink" href="#module-evennia.server.portal.suppress_ga" title="Permalink to this headline"></a></h2>
<p>SUPPRESS-GO-AHEAD</p>
<p>This supports suppressing or activating Evennia
the GO-AHEAD telnet operation after every server reply.
If the client sends no explicit DONT SUPRESS GO-AHEAD,
Evennia will default to supressing it since many clients
will fail to use it and has no knowledge of this standard.</p>
<p>It is set as the NOGOAHEAD protocol_flag option.</p>
<p><a class="reference external" href="http://www.faqs.org/rfcs/rfc858.html">http://www.faqs.org/rfcs/rfc858.html</a></p>
<dl class="class">
<dt id="evennia.server.portal.suppress_ga.SuppressGA">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.suppress_ga.</code><code class="sig-name descname">SuppressGA</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/suppress_ga.html#SuppressGA"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.suppress_ga.SuppressGA" 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>
<p>Implements the SUPRESS-GO-AHEAD protocol. Add this to a variable on the telnet
protocol to set it up.</p>
<dl class="method">
<dt id="evennia.server.portal.suppress_ga.SuppressGA.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/suppress_ga.html#SuppressGA.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.suppress_ga.SuppressGA.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize suppression of GO-AHEADs.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol instance.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.suppress_ga.SuppressGA.will_suppress_ga">
<code class="sig-name descname">will_suppress_ga</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/suppress_ga.html#SuppressGA.will_suppress_ga"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.suppress_ga.SuppressGA.will_suppress_ga" title="Permalink to this definition"></a></dt>
<dd><p>Client will suppress GA</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.suppress_ga.SuppressGA.wont_suppress_ga">
<code class="sig-name descname">wont_suppress_ga</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/suppress_ga.html#SuppressGA.wont_suppress_ga"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.suppress_ga.SuppressGA.wont_suppress_ga" title="Permalink to this definition"></a></dt>
<dd><p>Called when client requests to not suppress GA.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.telnet">
<span id="evennia-server-portal-telnet-module"></span><h2>evennia.server.portal.telnet module<a class="headerlink" href="#module-evennia.server.portal.telnet" title="Permalink to this headline"></a></h2>
<p>This module implements the telnet protocol.</p>
<p>This depends on a generic session module that implements
the actual login procedure of the game, tracks
sessions etc.</p>
<dl class="class">
<dt id="evennia.server.portal.telnet.TelnetProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.telnet.</code><code class="sig-name descname">TelnetProtocol</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.conch.telnet.Telnet</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.conch.telnet.StatefulTelnetProtocol</span></code>, <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>Each player connecting over telnet (ie using most traditional mud
clients) gets a telnet protocol instance assigned to them. All
communication between game and player goes through here.</p>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol._send_nop_keepalive">
<code class="sig-name descname">_send_nop_keepalive</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol._send_nop_keepalive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol._send_nop_keepalive" title="Permalink to this definition"></a></dt>
<dd><p>Send NOP keepalive unless flag is set</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol._wont_linemode">
<code class="sig-name descname">_wont_linemode</code><span class="sig-paren">(</span><em class="sig-param">*args</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol._wont_linemode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol._wont_linemode" title="Permalink to this definition"></a></dt>
<dd><p>Client refuses do(linemode). This is common for MUD-specific
clients, but we must ask for the sake of raw telnet. We ignore
this error.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol._write">
<code class="sig-name descname">_write</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol._write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol._write" title="Permalink to this definition"></a></dt>
<dd><p>hook overloading the one used in plain telnet</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.applicationDataReceived">
<code class="sig-name descname">applicationDataReceived</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.applicationDataReceived"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.applicationDataReceived" title="Permalink to this definition"></a></dt>
<dd><p>Telnet method called when non-telnet-command data is coming in
over the telnet connection. We pass it on to the game engine
directly.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em>) Incoming data.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.at_login" title="Permalink to this definition"></a></dt>
<dd><p>Called when this session gets authenticated by the server.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.connectionLost">
<code class="sig-name descname">connectionLost</code><span class="sig-paren">(</span><em class="sig-param">reason</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.connectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.connectionLost" title="Permalink to this definition"></a></dt>
<dd><p>this is executed when the connection is lost for whatever
reason. it can also be called directly, from the disconnect
method</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em>) Motivation for losing connection.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.connectionMade">
<code class="sig-name descname">connectionMade</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.connectionMade"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.connectionMade" title="Permalink to this definition"></a></dt>
<dd><p>This is called when the connection is first established.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.dataReceived">
<code class="sig-name descname">dataReceived</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.dataReceived"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.dataReceived" title="Permalink to this definition"></a></dt>
<dd><p>Unused by default, but a good place to put debug printouts
of incoming data.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Data User -&gt; Evennia</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Options from the protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Options to the protocol</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.disableLocal">
<code class="sig-name descname">disableLocal</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.disableLocal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.disableLocal" title="Permalink to this definition"></a></dt>
<dd><p>Disable a given option locally.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>char</em>) The telnet option to disable locally.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.disableRemote">
<code class="sig-name descname">disableRemote</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.disableRemote"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.disableRemote" title="Permalink to this definition"></a></dt>
<dd><p>Signal a programming error by raising an exception.</p>
<p>L{enableRemote} must return true for the given value of C{option} in
order for this method to be called. If a subclass of L{Telnet}
overrides enableRemote to allow certain options to be enabled, it must
also override disableRemote tto disable those options.</p>
<p>&#64;raise NotImplementedError: Always raised.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>generic hook for the engine to call in order to
disconnect this protocol.</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>) Reason for disconnecting.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.enableLocal">
<code class="sig-name descname">enableLocal</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.enableLocal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.enableLocal" title="Permalink to this definition"></a></dt>
<dd><p>Call to allow the activation of options for this protocol</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>char</em>) The telnet option to enable locally.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>If this option should be enabled.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>enable (bool)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.enableRemote">
<code class="sig-name descname">enableRemote</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.enableRemote"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.enableRemote" title="Permalink to this definition"></a></dt>
<dd><p>This sets up the remote-activated options we allow for this protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>char</em>) The telnet option to enable.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>If this option should be enabled.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>enable (bool)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.handshake_done">
<code class="sig-name descname">handshake_done</code><span class="sig-paren">(</span><em class="sig-param">timeout=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.handshake_done"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.handshake_done" title="Permalink to this definition"></a></dt>
<dd><p>This is called by all telnet extensions once they are finished.
When all have reported, a sync with the server is performed.
The system will force-call this sync after a small time to handle
clients that dont reply to handshakes at all.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.sendLine">
<code class="sig-name descname">sendLine</code><span class="sig-paren">(</span><em class="sig-param">line</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.sendLine"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.sendLine" title="Permalink to this definition"></a></dt>
<dd><p>Hook overloading the one used by linereceiver.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>line</strong> (<em>str</em>) Line to send.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Send other oob data</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.send_prompt">
<code class="sig-name descname">send_prompt</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.send_prompt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.send_prompt" title="Permalink to this definition"></a></dt>
<dd><p>Send a prompt - a text without a line end. See send_text for argument options.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.send_text">
<code class="sig-name descname">send_text</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.send_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.send_text" title="Permalink to this definition"></a></dt>
<dd><p>Send text data. This is an in-band telnet operation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) The first argument is always the text string to send. No other arguments
are considered.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): Send-option flags</dt><dd><ul class="simple">
<li><p>mxp: Enforce MXP link support.</p></li>
<li><p>ansi: Enforce no ANSI colors.</p></li>
<li><p>xterm256: Enforce xterm256 colors, regardless of TTYPE.</p></li>
<li><p>noxterm256: Enforce no xterm256 color support, regardless of TTYPE.</p></li>
<li><p>nocolor: Strip all Color, regardless of ansi/xterm256 setting.</p></li>
<li><dl class="simple">
<dt>raw: Pass string through without any ansi processing</dt><dd><p>(i.e. include Evennia ansi markers but do not
convert them into ansi tokens)</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>echo: Turn on/off line echo on the client. Turn</dt><dd><p>off line echo for client, for example for password.
Note that it must be actively turned back on again!</p>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetProtocol.toggle_nop_keepalive">
<code class="sig-name descname">toggle_nop_keepalive</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetProtocol.toggle_nop_keepalive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetProtocol.toggle_nop_keepalive" title="Permalink to this definition"></a></dt>
<dd><p>Allow to toggle the NOP keepalive for those sad clients that
cant even handle a NOP instruction. This is turned off by the
protocol_flag NOPKEEPALIVE (settable e.g. by the default
<cite>&#64;option</cite> command).</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.telnet.TelnetServerFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.telnet.</code><code class="sig-name descname">TelnetServerFactory</code><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetServerFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetServerFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ServerFactory</span></code></p>
<p>This is only to name this better in logs</p>
<dl class="method">
<dt id="evennia.server.portal.telnet.TelnetServerFactory.logPrefix">
<code class="sig-name descname">logPrefix</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet.html#TelnetServerFactory.logPrefix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet.TelnetServerFactory.logPrefix" title="Permalink to this definition"></a></dt>
<dd><p>Describe this factory for log messages.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.telnet.TelnetServerFactory.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.telnet.TelnetServerFactory.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.telnet_oob">
<span id="evennia-server-portal-telnet-oob-module"></span><h2>evennia.server.portal.telnet_oob module<a class="headerlink" href="#module-evennia.server.portal.telnet_oob" title="Permalink to this headline"></a></h2>
<p>Telnet OOB (Out of band communication)</p>
<p>OOB protocols allow for asynchronous communication between Evennia and
compliant telnet clients. The “text” type of send command will always
be sent “in-band”, appearing in the clients main text output. OOB
commands, by contrast, can have many forms and it is up to the client
how and if they are handled. Examples of OOB instructions could be to
instruct the client to play sounds or to update a graphical health
bar.</p>
<p>&gt; Note that in Evennias Web client, all send commands are “OOB
commands”, (including the “text” one), there is no equivalence to
MSDP/GMCP for the webclient since it doesnt need it.</p>
<p>This implements the following telnet OOB communication protocols:
- MSDP (Mud Server Data Protocol), as per</p>
<blockquote>
<div><p><a class="reference external" href="http://tintin.sourceforge.net/msdp/">http://tintin.sourceforge.net/msdp/</a></p>
</div></blockquote>
<ul class="simple">
<li><dl class="simple">
<dt>GMCP (Generic Mud Communication Protocol) as per</dt><dd><p><a class="reference external" href="http://www.ironrealms.com/rapture/manual/files/FeatGMCP-txt.html#Generic_MUD_Communication_Protocol%28GMCP%29">http://www.ironrealms.com/rapture/manual/files/FeatGMCP-txt.html#Generic_MUD_Communication_Protocol%28GMCP%29</a></p>
</dd>
</dl>
</li>
</ul>
<p>Following the lead of KaVirs protocol snippet, we first check if
client supports MSDP and if not, we fallback to GMCP with a MSDP
header where applicable.</p>
<dl class="class">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.telnet_oob.</code><code class="sig-name descname">TelnetOOB</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB" 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>
<p>Implements the MSDP and GMCP protocols.</p>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initiates by storing the protocol on itself and trying to
determine if the client supports MSDP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Return a MSDP- or GMCP-valid subnegotiation across the protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) OOB-command name.</p></li>
<li><p><strong>kwargs</strong> (<em>args</em><em>,</em>) Arguments to OOB command.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.decode_gmcp">
<code class="sig-name descname">decode_gmcp</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.decode_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.decode_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Decodes incoming GMCP data on the form varname &lt;structure&gt;.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em><em> or </em><em>list</em>) GMCP data.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Clients send data on the form “Module.Submodule.Cmdname &lt;structure&gt;”.
We assume the structure is valid JSON.</p>
<p>The following is parsed into Evennias formal structure:</p>
<p>Core.Name -&gt; [name, [], {}]
Core.Name string -&gt; [name, [string], {}]
Core.Name [arg, arg,…] -&gt; [name, [args], {}]
Core.Name {key:arg, key:arg, …} -&gt; [name, [], {kwargs}]
Core.Name [[args], {kwargs}] -&gt; [name, [args], {kwargs}]</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.decode_msdp">
<code class="sig-name descname">decode_msdp</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.decode_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.decode_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Decodes incoming MSDP data.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em><em> or </em><em>list</em>) MSDP data.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Clients should always send MSDP data on
one of the following forms:</p>
<p>cmdname -&gt; [cmdname, [], {}]
cmdname val -&gt; [cmdname, [val], {}]
cmdname array -&gt; [cmdname, [array], {}]
cmdname table -&gt; [cmdname, [], {table}]
cmdname array cmdname table -&gt; [cmdname, [array], {table}]</p>
<p>Observe that all MSDP_VARS are used to identify cmdnames,
so if there are multiple arrays with the same cmdname
given, they will be merged into one argument array, same
for tables. Different MSDP_VARS (outside tables) will be
identified as separate cmdnames.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.do_gmcp">
<code class="sig-name descname">do_gmcp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.do_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.do_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Called when client confirms that it can do MSDP or GMCP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.do_msdp">
<code class="sig-name descname">do_msdp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.do_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.do_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Client reports that it supports msdp.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.encode_gmcp">
<code class="sig-name descname">encode_gmcp</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.encode_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.encode_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Encode into GMCP messages.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) GMCP OOB command name.</p></li>
<li><p><strong>kwargs</strong> (<em>args</em><em>,</em>) Arguments to OOB command.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>GMCP messages will be outgoing on the following
form (the non-JSON cmdname at the start is what
IRE games use, supposedly, and what clients appear
to have adopted). A cmdname without Package will end
up in the Core package, while Core package names will
be stripped on the Evennia side.</p>
<p>[cmd.name, [], {}] -&gt; Cmd.Name
[cmd.name, [arg], {}] -&gt; Cmd.Name arg
[cmd.name, [args],{}] -&gt; Cmd.Name [args]
[cmd.name, [], {kwargs}] -&gt; Cmd.Name {kwargs}
[cmdname, [args, {kwargs}] -&gt; Core.Cmdname [[args],{kwargs}]</p>
<p class="rubric">Notes</p>
<p>There are also a few default mappings between evennia outputcmds and
GMCP:</p>
<blockquote>
<div><p>client_options -&gt; Core.Supports.Get
get_inputfuncs -&gt; Core.Commands.Get
get_value -&gt; Char.Value.Get
repeat -&gt; Char.Repeat.Update
monitor -&gt; Char.Monitor.Update</p>
</div></blockquote>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.encode_msdp">
<code class="sig-name descname">encode_msdp</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.encode_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.encode_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Encode into a valid MSDP command.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) Name of send instruction.</p></li>
<li><p><strong>kwargs</strong> (<em>args</em><em>,</em>) Arguments to OOB command.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The output of this encoding will be
MSDP structures on these forms:</p>
<p>[cmdname, [], {}] -&gt; VAR cmdname VAL “”
[cmdname, [arg], {}] -&gt; VAR cmdname VAL arg
[cmdname, [args],{}] -&gt; VAR cmdname VAL ARRAYOPEN VAL arg VAL arg … ARRAYCLOSE
[cmdname, [], {kwargs}] -&gt; VAR cmdname VAL TABLEOPEN VAR key VAL val … TABLECLOSE
[cmdname, [args], {kwargs}] -&gt; VAR cmdname VAL ARRAYOPEN VAL arg VAL arg … ARRAYCLOSE</p>
<blockquote>
<div><p>VAR cmdname VAL TABLEOPEN VAR key VAL val … TABLECLOSE</p>
</div></blockquote>
<p>Further nesting is not supported, so if an array argument
consists of an array (for example), that array will be
json-converted to a string.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.no_gmcp">
<code class="sig-name descname">no_gmcp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.no_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.no_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>If this is reached, it means neither MSDP nor GMCP is
supported.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.no_msdp">
<code class="sig-name descname">no_msdp</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.no_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.no_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Client reports No msdp supported or wanted.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.telnet_ssl">
<span id="evennia-server-portal-telnet-ssl-module"></span><h2>evennia.server.portal.telnet_ssl module<a class="headerlink" href="#module-evennia.server.portal.telnet_ssl" title="Permalink to this headline"></a></h2>
<p>This allows for running the telnet communication over an encrypted SSL tunnel. To use it, requires a
client supporting Telnet SSL.</p>
<p>The protocol will try to automatically create the private key and certificate on the server side
when starting and will warn if this was not possible. These will appear as files ssl.key and
ssl.cert in mygame/server/.</p>
<dl class="class">
<dt id="evennia.server.portal.telnet_ssl.SSLProtocol">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.telnet_ssl.</code><code class="sig-name descname">SSLProtocol</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_ssl.html#SSLProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_ssl.SSLProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.server.portal.telnet.TelnetProtocol" title="evennia.server.portal.telnet.TelnetProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.portal.telnet.TelnetProtocol</span></code></a></p>
<p>Communication is the same as telnet, except data transfer
is done with encryption set up by the portal at start time.</p>
<dl class="method">
<dt id="evennia.server.portal.telnet_ssl.SSLProtocol.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_ssl.html#SSLProtocol.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_ssl.SSLProtocol.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.telnet_ssl.getSSLContext">
<code class="sig-prename descclassname">evennia.server.portal.telnet_ssl.</code><code class="sig-name descname">getSSLContext</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_ssl.html#getSSLContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_ssl.getSSLContext" title="Permalink to this definition"></a></dt>
<dd><p>This is called by the portal when creating the SSL context
server-side.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>A key and certificate that is either</dt><dd><p>existing previously or created on the fly.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>ssl_context (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.telnet_ssl.verify_or_create_SSL_key_and_cert">
<code class="sig-prename descclassname">evennia.server.portal.telnet_ssl.</code><code class="sig-name descname">verify_or_create_SSL_key_and_cert</code><span class="sig-paren">(</span><em class="sig-param">keyfile</em>, <em class="sig-param">certfile</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_ssl.html#verify_or_create_SSL_key_and_cert"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_ssl.verify_or_create_SSL_key_and_cert" title="Permalink to this definition"></a></dt>
<dd><p>Verify or create new key/certificate files.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>keyfile</strong> (<em>str</em>) Path to ssl.key file.</p></li>
<li><p><strong>certfile</strong> (<em>str</em>) Parth to ssl.cert file.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>If files dont already exist, they are created.</p>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.tests">
<span id="evennia-server-portal-tests-module"></span><h2>evennia.server.portal.tests module<a class="headerlink" href="#module-evennia.server.portal.tests" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="evennia.server.portal.tests.TestAMPServer">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.tests.</code><code class="sig-name descname">TestAMPServer</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestAMPServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestAMPServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.trial._asynctest.TestCase</span></code></p>
<p>Test AMP communication</p>
<dl class="method">
<dt id="evennia.server.portal.tests.TestAMPServer.setUp">
<code class="sig-name descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestAMPServer.setUp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestAMPServer.setUp" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for setting up the test fixture before exercising it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestAMPServer.test_amp_in">
<code class="sig-name descname">test_amp_in</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestAMPServer.test_amp_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestAMPServer.test_amp_in" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestAMPServer.test_amp_out">
<code class="sig-name descname">test_amp_out</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestAMPServer.test_amp_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestAMPServer.test_amp_out" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestAMPServer.test_large_msg">
<code class="sig-name descname">test_large_msg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestAMPServer.test_large_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestAMPServer.test_large_msg" title="Permalink to this definition"></a></dt>
<dd><p>Send message larger than AMP_MAXLEN - should be split into several</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.tests.TestIRC">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.tests.</code><code class="sig-name descname">TestIRC</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.test.testcases.TestCase</span></code></p>
<dl class="method">
<dt id="evennia.server.portal.tests.TestIRC.test_bold">
<code class="sig-name descname">test_bold</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC.test_bold"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC.test_bold" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestIRC.test_colors">
<code class="sig-name descname">test_colors</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC.test_colors"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC.test_colors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestIRC.test_identity">
<code class="sig-name descname">test_identity</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC.test_identity"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC.test_identity" title="Permalink to this definition"></a></dt>
<dd><p>Test that the composition of the function and
its inverse gives the correct string.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestIRC.test_italic">
<code class="sig-name descname">test_italic</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC.test_italic"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC.test_italic" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestIRC.test_plain_ansi">
<code class="sig-name descname">test_plain_ansi</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestIRC.test_plain_ansi"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestIRC.test_plain_ansi" title="Permalink to this definition"></a></dt>
<dd><p>Test that printable characters do not get mangled.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.tests.TestTelnet">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.tests.</code><code class="sig-name descname">TestTelnet</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestTelnet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestTelnet" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.trial._asynctest.TestCase</span></code></p>
<dl class="method">
<dt id="evennia.server.portal.tests.TestTelnet.setUp">
<code class="sig-name descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestTelnet.setUp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestTelnet.setUp" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for setting up the test fixture before exercising it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestTelnet.test_mudlet_ttype">
<code class="sig-name descname">test_mudlet_ttype</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestTelnet.test_mudlet_ttype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestTelnet.test_mudlet_ttype" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.tests.TestWebSocket">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.tests.</code><code class="sig-name descname">TestWebSocket</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestWebSocket"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestWebSocket" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.html#evennia.utils.test_resources.EvenniaTest" title="evennia.utils.test_resources.EvenniaTest"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.utils.test_resources.EvenniaTest</span></code></a></p>
<dl class="method">
<dt id="evennia.server.portal.tests.TestWebSocket.setUp">
<code class="sig-name descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestWebSocket.setUp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestWebSocket.setUp" title="Permalink to this definition"></a></dt>
<dd><p>Sets up testing environment</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestWebSocket.tearDown">
<code class="sig-name descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestWebSocket.tearDown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestWebSocket.tearDown" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for deconstructing the test fixture after testing it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestWebSocket.test_data_in">
<code class="sig-name descname">test_data_in</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestWebSocket.test_data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestWebSocket.test_data_in" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.tests.TestWebSocket.test_data_out">
<code class="sig-name descname">test_data_out</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/tests.html#TestWebSocket.test_data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.tests.TestWebSocket.test_data_out" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.ttype">
<span id="evennia-server-portal-ttype-module"></span><h2>evennia.server.portal.ttype module<a class="headerlink" href="#module-evennia.server.portal.ttype" title="Permalink to this headline"></a></h2>
<p>TTYPE (MTTS) - Mud Terminal Type Standard</p>
<p>This module implements the TTYPE telnet protocol as per
<a class="reference external" href="http://tintin.sourceforge.net/mtts/">http://tintin.sourceforge.net/mtts/</a>. It allows the server to ask the
client about its capabilities. If the client also supports TTYPE, it
will return with information such as its name, if it supports colour
etc. If the client does not support TTYPE, this will be ignored.</p>
<p>All data will be stored on the protocols protocol_flags dictionary,
under the TTYPE key.</p>
<dl class="class">
<dt id="evennia.server.portal.ttype.Ttype">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.ttype.</code><code class="sig-name descname">Ttype</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ttype.html#Ttype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ttype.Ttype" 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>
<p>Handles ttype negotiations. Called and initiated by the
telnet protocol.</p>
<dl class="method">
<dt id="evennia.server.portal.ttype.Ttype.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">protocol</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ttype.html#Ttype.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ttype.Ttype.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize ttype by storing protocol on ourselves and calling
the client to see if it supporst ttype.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The protocol instance.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The <cite>self.ttype_step</cite> indicates how far in the data
retrieval weve gotten.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ttype.Ttype.will_ttype">
<code class="sig-name descname">will_ttype</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ttype.html#Ttype.will_ttype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ttype.Ttype.will_ttype" title="Permalink to this definition"></a></dt>
<dd><p>Handles negotiation of the ttype protocol once the client has
confirmed that it will respond with the ttype protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The negotiation proceeds in several steps, each returning a
certain piece of information about the client. All data is
stored on protocol.protocol_flags under the TTYPE key.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.ttype.Ttype.wont_ttype">
<code class="sig-name descname">wont_ttype</code><span class="sig-paren">(</span><em class="sig-param">option</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/ttype.html#Ttype.wont_ttype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.ttype.Ttype.wont_ttype" title="Permalink to this definition"></a></dt>
<dd><p>Callback if ttype is not supported by client.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.webclient">
<span id="evennia-server-portal-webclient-module"></span><h2>evennia.server.portal.webclient module<a class="headerlink" href="#module-evennia.server.portal.webclient" title="Permalink to this headline"></a></h2>
<p>Webclient based on websockets.</p>
<p>This implements a webclient with WebSockets (<a class="reference external" href="http://en.wikipedia.org/wiki/WebSocket">http://en.wikipedia.org/wiki/WebSocket</a>)
by use of the autobahn-python packages implementation (<a class="reference external" href="https://github.com/crossbario/autobahn-python">https://github.com/crossbario/autobahn-python</a>).
It is used together with evennia/web/media/javascript/evennia_websocket_webclient.js.</p>
<p>All data coming into the webclient is in the form of valid JSON on the form</p>
<p><cite>[“inputfunc_name”, [args], {kwarg}]</cite></p>
<p>which represents an “inputfunc” to be called on the Evennia side with <a href="#id19"><span class="problematic" id="id20">*</span></a>args, <a href="#id21"><span class="problematic" id="id22">**</span></a>kwargs.
The most common inputfunc is “text”, which takes just the text input
from the command line and interprets it as an Evennia Command: <cite>[“text”, [“look”], {}]</cite></p>
<dl class="class">
<dt id="evennia.server.portal.webclient.WebSocketClient">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.webclient.</code><code class="sig-name descname">WebSocketClient</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketServerProtocol</span></code>, <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>Implements the server-side of the Websocket connection.</p>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.at_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Data User &gt; Evennia.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>text</strong> (<em>str</em>) Incoming text.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Options from protocol.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>At initilization, the client will send the special
csessid command to identify its browser session hash
with the Evennia side.</p>
<p>The websocket client will also pass websocket_close command
to report that the client has been closed and that the
session should be disconnected.</p>
<p>Both those commands are parsed and extracted already at
this point.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Generic hook for the engine to call in order to
disconnect this protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Motivation for the disconnection.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.get_client_session">
<code class="sig-name descname">get_client_session</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.get_client_session"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.get_client_session" title="Permalink to this definition"></a></dt>
<dd><p>Get the Client browser session (used for auto-login based on browser session)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>This is a django-specific internal representation</dt><dd><p>of the browser session.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>csession (ClientSession)</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.webclient.WebSocketClient.nonce">
<code class="sig-name descname">nonce</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.nonce" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.onClose">
<code class="sig-name descname">onClose</code><span class="sig-paren">(</span><em class="sig-param">wasClean</em>, <em class="sig-param">code=None</em>, <em class="sig-param">reason=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onClose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onClose" title="Permalink to this definition"></a></dt>
<dd><p>This is executed when the connection is lost for whatever
reason. it can also be called directly, from the disconnect
method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>wasClean</strong> (<em>bool</em>) <code class="docutils literal notranslate"><span class="pre">True</span></code> if the WebSocket was closed cleanly.</p></li>
<li><p><strong>code</strong> (<em>int</em><em> or </em><em>None</em>) Close status as sent by the WebSocket peer.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Close reason as sent by the WebSocket peer.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.onMessage">
<code class="sig-name descname">onMessage</code><span class="sig-paren">(</span><em class="sig-param">payload</em>, <em class="sig-param">isBinary</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onMessage" title="Permalink to this definition"></a></dt>
<dd><p>Callback fired when a complete WebSocket message was received.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>payload</strong> (<em>bytes</em>) The WebSocket message received.</p></li>
<li><p><strong>isBinary</strong> (<em>bool</em>) Flag indicating whether payload is binary or
UTF-8 encoded text.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.onOpen">
<code class="sig-name descname">onOpen</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onOpen"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onOpen" title="Permalink to this definition"></a></dt>
<dd><p>This is called when the WebSocket connection is fully established.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.sendLine">
<code class="sig-name descname">sendLine</code><span class="sig-paren">(</span><em class="sig-param">line</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.sendLine"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.sendLine" title="Permalink to this definition"></a></dt>
<dd><p>Send data to client.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>line</strong> (<em>str</em>) Text to send.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) The first argument will always be the oob cmd name.</p></li>
<li><p><strong>*args</strong> (<em>any</em>) Remaining args will be arguments for <cite>cmd</cite>.</p></li>
</ul>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): These are ignored for oob commands. Use command</dt><dd><p>arguments (which can hold dicts) to send instructions to the
client instead.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.send_prompt">
<code class="sig-name descname">send_prompt</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_prompt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_prompt" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient.WebSocketClient.send_text">
<code class="sig-name descname">send_text</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_text" title="Permalink to this definition"></a></dt>
<dd><p>Send text data. This will pre-process the text for
color-replacement, conversion to html etc.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Text to send.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): Options-dict with the following keys understood:</dt><dd><ul class="simple">
<li><p>raw (bool): No parsing at all (leave ansi-to-html markers unparsed).</p></li>
<li><p>nocolor (bool): Clean out all color.</p></li>
<li><p>screenreader (bool): Use Screenreader mode.</p></li>
<li><p>send_prompt (bool): Send a prompt with parsed html</p></li>
</ul>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.server.portal.webclient_ajax">
<span id="evennia-server-portal-webclient-ajax-module"></span><h2>evennia.server.portal.webclient_ajax module<a class="headerlink" href="#module-evennia.server.portal.webclient_ajax" title="Permalink to this headline"></a></h2>
<p>AJAX/COMET fallback webclient</p>
<p>The AJAX/COMET web client consists of two components running on
twisted and django. They are both a part of the Evennia website url
tree (so the testing website might be located on
<a class="reference external" href="http://localhost:4001/">http://localhost:4001/</a>, whereas the webclient can be found on
<a class="reference external" href="http://localhost:4001/webclient">http://localhost:4001/webclient</a>.)</p>
<dl class="simple">
<dt>/webclient - this url is handled through djangos template</dt><dd><p>system and serves the html page for the client
itself along with its javascript chat program.</p>
</dd>
<dt>/webclientdata - this url is called by the ajax chat using</dt><dd><p>POST requests (long-polling when necessary)
The WebClient resource in this module will
handle these requests and act as a gateway
to sessions connected over the webclient.</p>
</dd>
</dl>
<dl class="class">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.webclient_ajax.</code><code class="sig-name descname">AjaxWebClient</code><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.resource.Resource</span></code></p>
<p>An ajax/comet long-polling transport</p>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient._keepalive">
<code class="sig-name descname">_keepalive</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient._keepalive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient._keepalive" title="Permalink to this definition"></a></dt>
<dd><p>Callback for checking the connection is still alive.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient._responseFailed">
<code class="sig-name descname">_responseFailed</code><span class="sig-paren">(</span><em class="sig-param">failure</em>, <em class="sig-param">csessid</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient._responseFailed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient._responseFailed" title="Permalink to this definition"></a></dt>
<dd><p>callback if a request is lost/timed out</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.allowedMethods">
<code class="sig-name descname">allowedMethods</code><em class="property"> = ('POST',)</em><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.allowedMethods" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.at_login" title="Permalink to this definition"></a></dt>
<dd><p>Called when this session gets authenticated by the server.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.client_disconnect">
<code class="sig-name descname">client_disconnect</code><span class="sig-paren">(</span><em class="sig-param">csessid</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.client_disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.client_disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnect session with given csessid.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>csessid</strong> (<em>int</em>) Session id.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.get_client_sessid">
<code class="sig-name descname">get_client_sessid</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.get_client_sessid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.get_client_sessid" title="Permalink to this definition"></a></dt>
<dd><p>Helper to get the client session id out of the request.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request object.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The client-session id.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>csessid (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.isLeaf">
<code class="sig-name descname">isLeaf</code><em class="property"> = True</em><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.isLeaf" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.lineSend">
<code class="sig-name descname">lineSend</code><span class="sig-paren">(</span><em class="sig-param">csessid</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.lineSend"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.lineSend" title="Permalink to this definition"></a></dt>
<dd><p>This adds the data to the buffer and/or sends it to the client
as soon as possible.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>csessid</strong> (<em>int</em>) Session id.</p></li>
<li><p><strong>data</strong> (<em>list</em>) A send structure [cmdname, [args], {kwargs}].</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.mode_close">
<code class="sig-name descname">mode_close</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.mode_close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.mode_close" title="Permalink to this definition"></a></dt>
<dd><p>This is called by render_POST when the client is signalling
that it is about to be closed.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.mode_init">
<code class="sig-name descname">mode_init</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.mode_init"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.mode_init" title="Permalink to this definition"></a></dt>
<dd><p>This is called by render_POST when the client requests an init
mode operation (at startup)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.mode_input">
<code class="sig-name descname">mode_input</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.mode_input"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.mode_input" title="Permalink to this definition"></a></dt>
<dd><p>This is called by render_POST when the client
is sending data to the server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.mode_keepalive">
<code class="sig-name descname">mode_keepalive</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.mode_keepalive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.mode_keepalive" title="Permalink to this definition"></a></dt>
<dd><p>This is called by render_POST when the
client is replying to the keepalive.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.mode_receive">
<code class="sig-name descname">mode_receive</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.mode_receive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.mode_receive" title="Permalink to this definition"></a></dt>
<dd><p>This is called by render_POST when the client is telling us
that it is ready to receive data as soon as it is available.
This is the basis of a long-polling (comet) mechanism: the
server will wait to reply until data is available.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClient.render_POST">
<code class="sig-name descname">render_POST</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClient.render_POST"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClient.render_POST" title="Permalink to this definition"></a></dt>
<dd><p>This function is what Twisted calls with POST requests coming
in from the ajax client. The requests should be tagged with
different modes depending on what needs to be done, such as
initializing or sending/receving data through the request. It
uses a long-polling mechanism to avoid sending data unless
there is actual data available.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.webclient_ajax.</code><code class="sig-name descname">AjaxWebClientSession</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.server.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>This represents a session running in an AjaxWebclient.</p>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.at_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Data User -&gt; Evennia</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Incoming data.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>kwargs (any): Options to the protocol</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param">reason='Server disconnected.'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnect from server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em>) Motivation for the disconnect.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.get_client_session">
<code class="sig-name descname">get_client_session</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.get_client_session"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.get_client_session" title="Permalink to this definition"></a></dt>
<dd><p>Get the Client browser session (used for auto-login based on browser session)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>This is a django-specific internal representation</dt><dd><p>of the browser session.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>csession (ClientSession)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param">cmdname</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) The first argument will always be the oob cmd name.</p></li>
<li><p><strong>*args</strong> (<em>any</em>) Remaining args will be arguments for <cite>cmd</cite>.</p></li>
</ul>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): These are ignored for oob commands. Use command</dt><dd><p>arguments (which can hold dicts) to send instructions to the
client instead.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_prompt">
<code class="sig-name descname">send_prompt</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.send_prompt"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_prompt" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_text">
<code class="sig-name descname">send_text</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#AjaxWebClientSession.send_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_text" title="Permalink to this definition"></a></dt>
<dd><p>Send text data. This will pre-process the text for
color-replacement, conversion to html etc.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Text to send.</p>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>options (dict): Options-dict with the following keys understood:</dt><dd><ul class="simple">
<li><p>raw (bool): No parsing at all (leave ansi-to-html markers unparsed).</p></li>
<li><p>nocolor (bool): Remove all color.</p></li>
<li><p>screenreader (bool): Use Screenreader mode.</p></li>
<li><p>send_prompt (bool): Send a prompt with parsed html</p></li>
</ul>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.server.portal.webclient_ajax.LazyEncoder">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.webclient_ajax.</code><code class="sig-name descname">LazyEncoder</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">skipkeys=False</em>, <em class="sig-param">ensure_ascii=True</em>, <em class="sig-param">check_circular=True</em>, <em class="sig-param">allow_nan=True</em>, <em class="sig-param">sort_keys=False</em>, <em class="sig-param">indent=None</em>, <em class="sig-param">separators=None</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#LazyEncoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.LazyEncoder" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">json.encoder.JSONEncoder</span></code></p>
<dl class="method">
<dt id="evennia.server.portal.webclient_ajax.LazyEncoder.default">
<code class="sig-name descname">default</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#LazyEncoder.default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.LazyEncoder.default" title="Permalink to this definition"></a></dt>
<dd><p>Implement this method in a subclass such that it returns
a serializable object for <code class="docutils literal notranslate"><span class="pre">o</span></code>, or calls the base implementation
(to raise a <code class="docutils literal notranslate"><span class="pre">TypeError</span></code>).</p>
<p>For example, to support arbitrary iterators, you could
implement default like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">iterable</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span>
<span class="c1"># Let the base class default method raise the TypeError</span>
<span class="k">return</span> <span class="n">JSONEncoder</span><span class="o">.</span><span class="n">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.server.portal.webclient_ajax.jsonify">
<code class="sig-prename descclassname">evennia.server.portal.webclient_ajax.</code><code class="sig-name descname">jsonify</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient_ajax.html#jsonify"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.webclient_ajax.jsonify" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<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>
<p><h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.server.portal package</a><ul>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.amp">evennia.server.portal.amp module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.amp_server">evennia.server.portal.amp_server module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.grapevine">evennia.server.portal.grapevine module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.irc">evennia.server.portal.irc module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.mccp">evennia.server.portal.mccp module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.mssp">evennia.server.portal.mssp module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.mxp">evennia.server.portal.mxp module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.naws">evennia.server.portal.naws module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.portal">evennia.server.portal.portal module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.portalsessionhandler">evennia.server.portal.portalsessionhandler module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.rss">evennia.server.portal.rss module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.ssh">evennia.server.portal.ssh module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.ssl">evennia.server.portal.ssl module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.suppress_ga">evennia.server.portal.suppress_ga module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.telnet">evennia.server.portal.telnet module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.telnet_oob">evennia.server.portal.telnet_oob module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.telnet_ssl">evennia.server.portal.telnet_ssl module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.tests">evennia.server.portal.tests module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.ttype">evennia.server.portal.ttype module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.webclient">evennia.server.portal.webclient module</a></li>
<li><a class="reference internal" href="#module-evennia.server.portal.webclient_ajax">evennia.server.portal.webclient_ajax module</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.server.portal.rst.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div>
<h3>Versions</h3>
<ul>
<li><a href="evennia.server.portal.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../versions/0.9.1/api/evennia.server.portal.html">0.9.1 (master branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2020, The Evennia developer community.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.4.4</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/api/evennia.server.portal.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>