Current section

Files

Jump to
chat doc CHAT.Application.html
Raw

doc/CHAT.Application.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.20.2">
<meta name="project" content="chat v3.7.5">
<title>CHAT.Application — chat v3.7.5</title>
<link rel="stylesheet" href="dist/html-d9f58a6320b5bfa6dd77.css" />
<link rel="canonical" href="https://hexdocs.pm/chat/CHAT.Application.html" />
<script src="dist/sidebar_items-f77c19a3ab.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/html-d9f58a6320b5bfa6dd77.js"></script>
</head>
<body data-type="modules">
<script>try { if(localStorage.getItem('night-mode')) document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button">
<span class="icon-search" aria-hidden="true"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button">
<span class="icon-cross" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Search" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="api-reference.html" class="sidebar-projectName">
chat </a>
<h2 class="sidebar-projectVersion">
v3.7.5
</h2>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
<small class="app-vsn">chat v3.7.5</small>
CHAT.Application </h1>
<section id="moduledoc">
<p><a href="#content"><code class="inline">CHAT.Application</code></a> is an
<code class="inline">Erlang/OTP</code> application powered by N2O messaging protocol.
It is implemented as a ring of protocol nodes.</p>
</section>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Summary
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#initialize/0">initialize()</a>
</div>
<div class="summary-synopsis"><p>Manual startup and conifiguring during startup the following Erlang/OTP
applications: <code class="inline">:cowboy</code>, <code class="inline">:syn</code>, <code class="inline">:kvs</code> and <code class="inline">:n2o</code>.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#start/2">start(_, _)</a>
</div>
<div class="summary-synopsis"><p>Called when an application is started.</p></div>
</div>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Functions </h1>
<div class="functions-list">
<section class="detail" id="initialize/0">
<div class="detail-header">
<a href="#initialize/0" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">initialize()</span>
</div>
<section class="docstring">
<p>Manual startup and conifiguring during startup the following Erlang/OTP
applications: <code class="inline">:cowboy</code>, <code class="inline">:syn</code>, <code class="inline">:kvs</code> and <code class="inline">:n2o</code>.</p>
<p>Example:</p>
<pre><code class="nohighlight makeup elixir"><span class="gp unselectable">iex(1)&gt; </span><span class="nc">Supervisor</span><span class="o">.</span><span class="n">which_children</span><span class="p" data-group-id="0434693821-1">(</span><span class="ss">:n2o</span><span class="p" data-group-id="0434693821-1">)</span><span class="w">
</span><span class="p" data-group-id="0434693821-2">[</span><span class="w">
</span><span class="p" data-group-id="0434693821-3">{</span><span class="p" data-group-id="0434693821-4">{</span><span class="ss">:ws</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;/ws/chat/1&#39;</span><span class="p" data-group-id="0434693821-4">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-5">#</span><span class="nc" data-group-id="0434693821-5">PID</span><span class="p" data-group-id="0434693821-5">&lt;</span><span class="mi">0</span><span class="o">.</span><span class="mi">258</span><span class="o">.</span><span class="mi">0</span><span class="p" data-group-id="0434693821-5">&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:worker</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-6">[</span><span class="ss">:n2o_wsnode</span><span class="p" data-group-id="0434693821-6">]</span><span class="p" data-group-id="0434693821-3">}</span><span class="p">,</span><span class="w">
</span><span class="p" data-group-id="0434693821-7">{</span><span class="p" data-group-id="0434693821-8">{</span><span class="ss">:ws</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;/ws/chat/2&#39;</span><span class="p" data-group-id="0434693821-8">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-9">#</span><span class="nc" data-group-id="0434693821-9">PID</span><span class="p" data-group-id="0434693821-9">&lt;</span><span class="mi">0</span><span class="o">.</span><span class="mi">257</span><span class="o">.</span><span class="mi">0</span><span class="p" data-group-id="0434693821-9">&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:worker</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-10">[</span><span class="ss">:n2o_wsnode</span><span class="p" data-group-id="0434693821-10">]</span><span class="p" data-group-id="0434693821-7">}</span><span class="p">,</span><span class="w">
</span><span class="p" data-group-id="0434693821-11">{</span><span class="p" data-group-id="0434693821-12">{</span><span class="ss">:ws</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;/ws/chat/3&#39;</span><span class="p" data-group-id="0434693821-12">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-13">#</span><span class="nc" data-group-id="0434693821-13">PID</span><span class="p" data-group-id="0434693821-13">&lt;</span><span class="mi">0</span><span class="o">.</span><span class="mi">256</span><span class="o">.</span><span class="mi">0</span><span class="p" data-group-id="0434693821-13">&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:worker</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-14">[</span><span class="ss">:n2o_wsnode</span><span class="p" data-group-id="0434693821-14">]</span><span class="p" data-group-id="0434693821-11">}</span><span class="p">,</span><span class="w">
</span><span class="p" data-group-id="0434693821-15">{</span><span class="p" data-group-id="0434693821-16">{</span><span class="ss">:ws</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;/ws/chat/4&#39;</span><span class="p" data-group-id="0434693821-16">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-17">#</span><span class="nc" data-group-id="0434693821-17">PID</span><span class="p" data-group-id="0434693821-17">&lt;</span><span class="mi">0</span><span class="o">.</span><span class="mi">255</span><span class="o">.</span><span class="mi">0</span><span class="p" data-group-id="0434693821-17">&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:worker</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-18">[</span><span class="ss">:n2o_wsnode</span><span class="p" data-group-id="0434693821-18">]</span><span class="p" data-group-id="0434693821-15">}</span><span class="p">,</span><span class="w">
</span><span class="p" data-group-id="0434693821-19">{</span><span class="p" data-group-id="0434693821-20">{</span><span class="ss">:caching</span><span class="p">,</span><span class="w"> </span><span class="sc">&#39;timer&#39;</span><span class="p" data-group-id="0434693821-20">}</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-21">#</span><span class="nc" data-group-id="0434693821-21">PID</span><span class="p" data-group-id="0434693821-21">&lt;</span><span class="mi">0</span><span class="o">.</span><span class="mi">201</span><span class="o">.</span><span class="mi">0</span><span class="p" data-group-id="0434693821-21">&gt;</span><span class="p">,</span><span class="w"> </span><span class="ss">:worker</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="0434693821-22">[</span><span class="ss">:n2o</span><span class="p" data-group-id="0434693821-22">]</span><span class="p" data-group-id="0434693821-19">}</span><span class="w">
</span><span class="p" data-group-id="0434693821-2">]</span></code></pre>
<p>In example you see two rings: <code class="inline">mqtt</code> and <code class="inline">ws</code> for MQTT and WebSocket workers respectively.</p>
<p>File <code class="inline">config/config.exs</code> should contain <code class="inline">proto</code> N2O parameter, the module
which contains N2O protocol that will be runned inside ring worker:</p>
<pre><code class="nohighlight makeup elixir"><span class="n">config</span><span class="w"> </span><span class="ss">:n2o</span><span class="p">,</span><span class="w">
</span><span class="ss">proto</span><span class="p">:</span><span class="w"> </span><span class="nc">CHAT.Server</span><span class="p">,</span><span class="w">
</span><span class="ss">ws_server</span><span class="p">:</span><span class="w"> </span><span class="no">false</span></code></pre>
<p>In CHAT application this <code class="inline">:n2o_wsnode</code> worker is <a href="CHAT.Server.html"><code class="inline">CHAT.Server</code></a> module.
Also we need to disable WebSocket ring creationg at N2O startup and create it manually during CHAT startup
as PI protocol <code class="inline">:init</code> function contains SYN registration which is dependency only for CHAT,
the higher level that N2O, which is zero-dependency library.</p>
</section>
</section>
<section class="detail" id="start/2">
<div class="detail-header">
<a href="#start/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">start(_, _)</span>
</div>
<section class="docstring">
<p>Called when an application is started.</p>
<p>This function is called when an application is started using
<a href="https://hexdocs.pm/elixir/Application.html#start/2"><code class="inline">Application.start/2</code></a> (and functions on top of that, such as
<a href="https://hexdocs.pm/elixir/Application.html#ensure_started/2"><code class="inline">Application.ensure_started/2</code></a>). This function should start the top-level
process of the application (which should be the top supervisor of the
application&#39;s supervision tree if the application follows the OTP design
principles around supervision).</p>
<p><code class="inline">start_type</code> defines how the application is started:</p>
<ul>
<li><code class="inline">:normal</code> - used if the startup is a normal startup or if the application
is distributed and is started on the current node because of a failover
from another node and the application specification key <code class="inline">:start_phases</code>
is <code class="inline">:undefined</code>.
</li>
<li><code class="inline">{:takeover, node}</code> - used if the application is distributed and is
started on the current node because of a failover on the node <code class="inline">node</code>.
</li>
<li><code class="inline">{:failover, node}</code> - used if the application is distributed and is
started on the current node because of a failover on node <code class="inline">node</code>, and the
application specification key <code class="inline">:start_phases</code> is not <code class="inline">:undefined</code>.
</li>
</ul>
<p><code class="inline">start_args</code> are the arguments passed to the application in the <code class="inline">:mod</code>
specification key (e.g., <code class="inline">mod: {MyApp, [:my_args]}</code>).</p>
<p>This function should either return <code class="inline">{:ok, pid}</code> or <code class="inline">{:ok, pid, state}</code> if
startup is successful. <code class="inline">pid</code> should be the PID of the top supervisor. <code class="inline">state</code>
can be an arbitrary term, and if omitted will default to <code class="inline">[]</code>; if the
application is later stopped, <code class="inline">state</code> is passed to the <code class="inline">stop/1</code> callback (see
the documentation for the <code class="inline">c:stop/1</code> callback for more information).</p>
<p><code class="inline">use Application</code> provides no default implementation for the <a href="#start/2"><code class="inline">start/2</code></a>
callback.</p>
<p>Callback implementation for <a href="https://hexdocs.pm/elixir/Application.html#c:start/2"><code class="inline">Application.start/2</code></a>.</p>
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.20.2),
</span>
<span class="line">
designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<button class="line footer-button night-mode-toggle">
Toggle night mode
</button>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>