damsel/doc/proto/state.html
2016-04-01 17:54:20 +03:00

398 lines
30 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css"/><!--
/*!
* Bootstrap v2.0.3
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
.clearfix:after{clear:both;}
.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
audio:not([controls]){display:none;}
html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
a:hover,a:active{outline:0;}
sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
sup{top:-0.5em;}
sub{bottom:-0.25em;}
img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
button,input{*overflow:visible;line-height:normal;}
button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
textarea{overflow:auto;vertical-align:top;}
body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;}
a{color:#0088cc;text-decoration:none;}
a:hover{color:#005580;text-decoration:underline;}
.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";}
.row:after{clear:both;}
[class*="span"]{float:left;margin-left:20px;}
.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
.span12{width:940px;}
.span11{width:860px;}
.span10{width:780px;}
.span9{width:700px;}
.span8{width:620px;}
.span7{width:540px;}
.span6{width:460px;}
.span5{width:380px;}
.span4{width:300px;}
.span3{width:220px;}
.span2{width:140px;}
.span1{width:60px;}
.offset12{margin-left:980px;}
.offset11{margin-left:900px;}
.offset10{margin-left:820px;}
.offset9{margin-left:740px;}
.offset8{margin-left:660px;}
.offset7{margin-left:580px;}
.offset6{margin-left:500px;}
.offset5{margin-left:420px;}
.offset4{margin-left:340px;}
.offset3{margin-left:260px;}
.offset2{margin-left:180px;}
.offset1{margin-left:100px;}
.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";}
.row-fluid:after{clear:both;}
.row-fluid [class*="span"]{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574%;*margin-left:2.0744680846382977%;}
.row-fluid [class*="span"]:first-child{margin-left:0;}
.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%;}
.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%;}
.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%;}
.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%;}
.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%;}
.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%;}
.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%;}
.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%;}
.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%;}
.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%;}
.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%;}
.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%;}
.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";}
.container:after{clear:both;}
.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";}
.container-fluid:after{clear:both;}
p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;}
.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;}
h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;}
h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;}
h3{font-size:18px;line-height:27px;}h3 small{font-size:14px;}
h4,h5,h6{line-height:18px;}
h4{font-size:14px;}h4 small{font-size:12px;}
h5{font-size:12px;}
h6{font-size:11px;color:#999999;text-transform:uppercase;}
.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;}
.page-header h1{line-height:1;}
ul,ol{padding:0;margin:0 0 9px 25px;}
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
ul{list-style:disc;}
ol{list-style:decimal;}
li{line-height:18px;}
ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
dl{margin-bottom:18px;}
dt,dd{line-height:18px;}
dt{font-weight:bold;line-height:17px;}
dd{margin-left:9px;}
.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dl-horizontal dd{margin-left:130px;}
hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
strong{font-weight:bold;}
em{font-style:italic;}
.muted{color:#999999;}
abbr[title]{cursor:help;border-bottom:1px dotted #ddd;}
abbr.initialism{font-size:90%;text-transform:uppercase;}
blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;}
blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
q:before,q:after,blockquote:before,blockquote:after{content:"";}
address{display:block;margin-bottom:18px;font-style:normal;line-height:18px;}
small{font-size:100%;}
cite{font-style:normal;}
code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;}
pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:18px;}
pre code{padding:0;color:inherit;background-color:transparent;border:0;}
.pre-scrollable{max-height:340px;overflow-y:scroll;}
.label,.badge{font-size:10.998px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;}
.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;}
a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;}
.label-important,.badge-important{background-color:#b94a48;}
.label-important[href],.badge-important[href]{background-color:#953b39;}
.label-warning,.badge-warning{background-color:#f89406;}
.label-warning[href],.badge-warning[href]{background-color:#c67605;}
.label-success,.badge-success{background-color:#468847;}
.label-success[href],.badge-success[href]{background-color:#356635;}
.label-info,.badge-info{background-color:#3a87ad;}
.label-info[href],.badge-info[href]{background-color:#2d6987;}
.label-inverse,.badge-inverse{background-color:#333333;}
.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;}
table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;}
.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
.table th{font-weight:bold;}
.table thead th{vertical-align:bottom;}
.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;}
.table tbody+tbody{border-top:2px solid #dddddd;}
.table-condensed th,.table-condensed td{padding:4px 5px;}
.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px;}
.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px;}
.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;}
.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;}
.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;}
table .span1{float:none;width:44px;margin-left:0;}
table .span2{float:none;width:124px;margin-left:0;}
table .span3{float:none;width:204px;margin-left:0;}
table .span4{float:none;width:284px;margin-left:0;}
table .span5{float:none;width:364px;margin-left:0;}
table .span6{float:none;width:444px;margin-left:0;}
table .span7{float:none;width:524px;margin-left:0;}
table .span8{float:none;width:604px;margin-left:0;}
table .span9{float:none;width:684px;margin-left:0;}
table .span10{float:none;width:764px;margin-left:0;}
table .span11{float:none;width:844px;margin-left:0;}
table .span12{float:none;width:924px;margin-left:0;}
table .span13{float:none;width:1004px;margin-left:0;}
table .span14{float:none;width:1084px;margin-left:0;}
table .span15{float:none;width:1164px;margin-left:0;}
table .span16{float:none;width:1244px;margin-left:0;}
table .span17{float:none;width:1324px;margin-left:0;}
table .span18{float:none;width:1404px;margin-left:0;}
table .span19{float:none;width:1484px;margin-left:0;}
table .span20{float:none;width:1564px;margin-left:0;}
table .span21{float:none;width:1644px;margin-left:0;}
table .span22{float:none;width:1724px;margin-left:0;}
table .span23{float:none;width:1804px;margin-left:0;}
table .span24{float:none;width:1884px;margin-left:0;}
/* Auto-generated CSS for generated Thrift docs */
h3, h4 { margin-bottom: 6px; }
div.definition { border: 1px solid #CCC; margin-bottom: 10px; padding: 10px; }
div.extends { margin: -0.5em 0 1em 5em }
td { vertical-align: top; }
table { empty-cells: show; }
code { line-height: 20px; }
.table-bordered th, .table-bordered td { border-bottom: 1px solid #DDDDDD; }
--></style>
<title>Thrift module: state</title></head><body>
<div class="container-fluid">
<h1>Thrift module: state</h1>
Определения структур и сервисов для поддержания взаимодействия со
state processor абстракции, реализующей шаг обработки (другими словами,
один переход состояния) ограниченного конечного автомата со сложным
состоянием, которое выражается при помощи истории как набора событий,
порождённых процессором.
<br/><table class="table-bordered table-striped table-condensed"><thead><th>Module</th><th>Services</th><th>Data types</th><th>Constants</th></thead>
<tr>
<td>state</td><td><a href="#Svc_Processor">Processor</a><br/>
<ul>
<li><a href="#Fn_Processor_processCall">processCall</a></li>
<li><a href="#Fn_Processor_processSignal">processSignal</a></li>
</ul>
<a href="#Svc_Automaton">Automaton</a><br/>
<ul>
<li><a href="#Fn_Automaton_call">call</a></li>
<li><a href="#Fn_Automaton_destroy">destroy</a></li>
<li><a href="#Fn_Automaton_repair">repair</a></li>
<li><a href="#Fn_Automaton_start">start</a></li>
</ul>
</td>
<td><a href="#Struct_Args">Args</a><br/>
<a href="#Typedef_Call">Call</a><br/>
<a href="#Struct_CallArgs">CallArgs</a><br/>
<a href="#Typedef_CallResponse">CallResponse</a><br/>
<a href="#Struct_CallResult">CallResult</a><br/>
<a href="#Struct_ComplexAction">ComplexAction</a><br/>
<a href="#Struct_Event">Event</a><br/>
<a href="#Typedef_History">History</a><br/>
<a href="#Struct_InitSignal">InitSignal</a><br/>
<a href="#Struct_Reference">Reference</a><br/>
<a href="#Struct_RepairSignal">RepairSignal</a><br/>
<a href="#Struct_SetTimerAction">SetTimerAction</a><br/>
<a href="#Struct_Signal">Signal</a><br/>
<a href="#Struct_SignalArgs">SignalArgs</a><br/>
<a href="#Struct_SignalResult">SignalResult</a><br/>
<a href="#Struct_StartResult">StartResult</a><br/>
<a href="#Struct_TagAction">TagAction</a><br/>
<a href="#Struct_TimeoutSignal">TimeoutSignal</a><br/>
</td>
<td></code></td>
</tr></table>
<hr/><h2 id="Typedefs">Type declarations</h2>
<div class="definition"><h3 id="Typedef_History">Typedef: History</h3>
<p><strong>Base type:</strong>&nbsp;<code>list&lt;<code><a href="#Struct_Event">Event</a></code>&gt;</code></p>
Сложное состояние, выраженное в виде упорядоченного набора событий
процессора.
<br/></div>
<div class="definition"><h3 id="Typedef_Call">Typedef: Call</h3>
<p><strong>Base type:</strong>&nbsp;<code>binary</code></p>
Внешний вызов.
При помощи вызовов организовано общение автомата с внешним миром и
получение на них ответов.
<br/></div>
<div class="definition"><h3 id="Typedef_CallResponse">Typedef: CallResponse</h3>
<p><strong>Base type:</strong>&nbsp;<code>binary</code></p>
Ответ на внешний вызов.
<br/></div>
<hr/><h2 id="Structs">Data structures</h2>
<div class="definition"><h3 id="Struct_Event">Union: Event</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>event</td><td><code>binary</code></td><td></td><td>optional</td><td></td></tr>
</table><br/>Произвольное событие, продукт перехода в новое состояние.
<br/></div><div class="definition"><h3 id="Struct_ComplexAction">Struct: ComplexAction</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>set_timer</td><td><code><a href="#Typedef_SetTimerAction">SetTimerAction</a></code></td><td></td><td>optional</td><td></td></tr>
<tr><td>2</td><td>tag</td><td><code><a href="#Typedef_TagAction">TagAction</a></code></td><td></td><td>optional</td><td></td></tr>
</table><br/>Желаемое действие, продукт перехода в новое состояние.
Возможные действия представляют собой ограниченный язык для управления
прогрессом автомата, основанием для прихода сигналов или внешних вызовов,
которые приводят к дальнейшим переходам состояния. Отсутствие заполненных
полей будет интерпретировано буквально, как отсутствие желаемых действий.
<br/></div><div class="definition"><h3 id="Struct_SetTimerAction">Struct: SetTimerAction</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>timer</td><td><code><a href="base.html#Struct_Timer">base.Timer</a></code></td><td>Критерий остановки таймера ожидания
</td><td>required</td><td></td></tr>
</table><br/>Действие установки таймера ожидания на определённый отрезок времени.
По истечению заданного отрезка времени в процессор поступит сигнал
`TimeoutSignal`.
<br/></div><div class="definition"><h3 id="Struct_TagAction">Struct: TagAction</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>tag</td><td><code><a href="base.html#Typedef_Tag">base.Tag</a></code></td><td>Значение для ассоциации
</td><td>required</td><td></td></tr>
</table><br/>Действие ассоциации с процессом автомата произвольного значения
После факта успешной ассоциации к автомату можно обратиться с внешним
вызовом, используя указанное значение, то есть в процессор может поступить
вызов `processCall` с указанным `tag` в качестве `Reference`.
Это действие в общем случае неидемпотентно, то есть ассоциация связана с
определённым моментом в истории, и в случае попытки использования одного и
того же значения ассоциации в разные моменты истории процесса автомата он
переходит в ошибочное состояние.
То же самое происходит в случае попытки ассоциации одного и того значения с
двумя или более различными процессами автомата, все они переходят в ошибочное
состояние, ситуация, требующая ручного вмешательства.
<br/></div><div class="definition"><h3 id="Struct_Reference">Union: Reference</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>id</td><td><code><a href="base.html#Typedef_ID">base.ID</a></code></td><td>Основной идентификатор процесса автомата
</td><td>optional</td><td></td></tr>
<tr><td>2</td><td>tag</td><td><code><a href="base.html#Typedef_Tag">base.Tag</a></code></td><td>Ассоциация
</td><td>optional</td><td></td></tr>
</table><br/>Ссылка, уникально определяющая процесс автомата.
<br/></div><div class="definition"><h3 id="Struct_CallArgs">Struct: CallArgs</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>call</td><td><code><a href="#Typedef_Call">Call</a></code></td><td>Данные вызова
</td><td>required</td><td></td></tr>
<tr><td>2</td><td>history</td><td><code><a href="#Typedef_History">History</a></code></td><td>История автомата
</td><td>required</td><td></td></tr>
</table><br/>Набор данных для обработки внешнего вызова.
<br/></div><div class="definition"><h3 id="Struct_CallResult">Struct: CallResult</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>ev</td><td><code><a href="#Struct_Event">Event</a></code></td><td>Событие, порождённое в результате обработки
</td><td>required</td><td></td></tr>
<tr><td>2</td><td>action</td><td><code><a href="#Struct_ComplexAction">ComplexAction</a></code></td><td>Действие, которое необходимо выполнить после обработки
</td><td>required</td><td></td></tr>
<tr><td>3</td><td>response</td><td><code><a href="#Typedef_CallResponse">CallResponse</a></code></td><td>Данные ответа
</td><td>required</td><td></td></tr>
</table><br/>Результат обработки внешнего вызова.
<br/></div><div class="definition"><h3 id="Struct_Signal">Union: Signal</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>init</td><td><code><a href="#Typedef_InitSignal">InitSignal</a></code></td><td></td><td>optional</td><td></td></tr>
<tr><td>2</td><td>timeout</td><td><code><a href="#Typedef_TimeoutSignal">TimeoutSignal</a></code></td><td></td><td>optional</td><td></td></tr>
<tr><td>3</td><td>repair</td><td><code><a href="#Typedef_RepairSignal">RepairSignal</a></code></td><td></td><td>optional</td><td></td></tr>
</table><br/>Сигнал, который может поступить в автомат.
Сигналы, как и частный их случай в виде вызовов, приводят к прогрессу
автомата и эволюции его состояния, то есть нарастанию истории.
<br/></div><div class="definition"><h3 id="Struct_InitSignal">Struct: InitSignal</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>id</td><td><code><a href="base.html#Typedef_ID">base.ID</a></code></td><td>Основной идентификатор процесса автомата
</td><td>required</td><td></td></tr>
<tr><td>2</td><td>arg</td><td><code>binary</code></td><td>Набор данных для инициализации
</td><td>required</td><td></td></tr>
</table><br/>Сигнал, информирующий о запуске автомата.
<br/></div><div class="definition"><h3 id="Struct_TimeoutSignal">Struct: TimeoutSignal</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
</table><br/>Сигнал, информирующий об окончании ожидания по таймеру.
<br/></div><div class="definition"><h3 id="Struct_RepairSignal">Struct: RepairSignal</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>arg</td><td><code>binary</code></td><td></td><td>optional</td><td></td></tr>
</table><br/>Сигнал, информирующий о необходимости восстановить работу автомата,
опционально скорректировать своё состояние.
<br/></div><div class="definition"><h3 id="Struct_SignalArgs">Struct: SignalArgs</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>signal</td><td><code><a href="#Struct_Signal">Signal</a></code></td><td>Поступивший сигнал
</td><td>required</td><td></td></tr>
<tr><td>2</td><td>history</td><td><code><a href="#Typedef_History">History</a></code></td><td>История автомата
</td><td>required</td><td></td></tr>
</table><br/>Набор данных для обработки сигнала.
<br/></div><div class="definition"><h3 id="Struct_SignalResult">Struct: SignalResult</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>ev</td><td><code><a href="#Struct_Event">Event</a></code></td><td>Событие, порождённое в результате обработки
</td><td>required</td><td></td></tr>
<tr><td>2</td><td>action</td><td><code><a href="#Struct_ComplexAction">ComplexAction</a></code></td><td>Действие, которое необходимо выполнить после обработки
</td><td>required</td><td></td></tr>
</table><br/>Результат обработки сигнала.
<br/></div><div class="definition"><h3 id="Struct_Args">Struct: Args</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>arg</td><td><code>binary</code></td><td>Неструктурированные данные.
</td><td>required</td><td></td></tr>
</table><br/>Универсальная расширяемая структура с набором аргументов.
<br/></div><div class="definition"><h3 id="Struct_StartResult">Struct: StartResult</h3>
<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
<tr><td>1</td><td>id</td><td><code><a href="base.html#Typedef_ID">base.ID</a></code></td><td></td><td>required</td><td></td></tr>
</table><br/>Результат запуска процесса автомата.
<br/></div><hr/><h2 id="Services">Services</h2>
<h3 id="Svc_Processor">Service: Processor</h3>
Процессор переходов состояния ограниченного конечного автомата.
В результате вызова каждого из методов сервиса должны появиться новое
состояние и новые действия, приводящие к дальнейшему прогрессу автомата.
<br/><div class="definition"><h4 id="Fn_Processor_processSignal">Function: Processor.processSignal</h4>
<pre><code><a href="#Struct_SignalResult">SignalResult</a></code> processSignal(<code><a href="#Struct_SignalArgs">SignalArgs</a></code> a)
</pre>Обработать поступивший сигнал.
<br/></div><div class="definition"><h4 id="Fn_Processor_processCall">Function: Processor.processCall</h4>
<pre><code><a href="#Struct_CallResult">CallResult</a></code> processCall(<code><a href="#Struct_CallArgs">CallArgs</a></code> a)
</pre>Обработать внешний вызов и сформировать ответ на него.
<br/></div><h3 id="Svc_Automaton">Service: Automaton</h3>
Сервис управления процессами автоматов, отвечающий за реализацию желаемых
действий и поддержку состояния процессоров.
<br/><div class="definition"><h4 id="Fn_Automaton_start">Function: Automaton.start</h4>
<pre><code><a href="#Struct_StartResult">StartResult</a></code> start(<code><a href="#Struct_Args">Args</a></code> a)
</pre>Запустить новый процесс автомата.
<br/></div><div class="definition"><h4 id="Fn_Automaton_destroy">Function: Automaton.destroy</h4>
<pre><code>void</code> destroy(<code><a href="#Struct_Reference">Reference</a></code> ref)
throws <code><a href="base.html#Struct_NotFound">base.NotFound</a></code>
</pre>Уничтожить определённый процесс автомата.
<br/></div><div class="definition"><h4 id="Fn_Automaton_repair">Function: Automaton.repair</h4>
<pre><code>void</code> repair(<code><a href="#Struct_Reference">Reference</a></code> ref,
<code><a href="#Struct_Args">Args</a></code> a)
throws <code><a href="base.html#Struct_NotFound">base.NotFound</a></code>
</pre>Попытаться перевести определённый процесс автомата из ошибочного
состояния в штатное и продолжить его исполнение.
<br/></div><div class="definition"><h4 id="Fn_Automaton_call">Function: Automaton.call</h4>
<pre><code><a href="#Typedef_CallResponse">CallResponse</a></code> call(<code><a href="#Struct_Reference">Reference</a></code> ref,
<code><a href="#Typedef_Call">Call</a></code> c)
throws <code><a href="base.html#Struct_NotFound">base.NotFound</a></code>
</pre>Совершить вызов и дождаться на него ответа.
<br/></div></div></body></html>