123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
- <title>Socket Communication — SCCD 0.9 documentation</title>
-
- <link rel="stylesheet" href="_static/classic.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <link rel="stylesheet" href="_static/mystyle.css" type="text/css" />
-
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '0.9',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="top" title="SCCD 0.9 documentation" href="index.html" />
- <link rel="next" title="Internal Documentation" href="internal_documentation.html" />
- <link rel="prev" title="Semantic Options" href="semantic_options.html" />
- </head>
- <body role="document">
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="internal_documentation.html" title="Internal Documentation"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="semantic_options.html" title="Semantic Options"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> »</li>
- </ul>
- </div>
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="socket-communication">
- <h1>Socket Communication<a class="headerlink" href="#socket-communication" title="Permalink to this headline">¶</a></h1>
- <p>Sockets, for network communication, are an oftenly needed capability for many complex system.
- By default, however, Statecharts, and SCCD in particular, do not handle socket communication at all.
- Shifting all socket communication into action code is not an option either, as it is potentially a blocking operation.
- Additionally, the code wraps different socket implementations and socket configuration.</p>
- <p>This module will, after starting the translation service, translate all events on the <em>socket_in</em> and <em>socket_out</em> port to socket operations.
- Blocking then happens on another thread, while the statechart can continue its usual execution.
- When the socket operation returns, the result will be raised in the statechart as an event.</p>
- <div class="section" id="initialization">
- <h2>Initialization<a class="headerlink" href="#initialization" title="Permalink to this headline">¶</a></h2>
- <p>To use the translation service, several steps should be followed:</p>
- <blockquote>
- <div><ol class="arabic simple">
- <li>Import sccd.sccd_runtime.socket2event as socket2event;</li>
- <li>Write your model with a <em>socket_in</em> and <em>socket_out</em> port;</li>
- <li>Before starting the controller, invoke <em>socket2event.boot_translation_service(controller)</em> with the controller as its first argument;</li>
- <li>Now raise and catch events as specified here, to communicate with sockets.</li>
- </ol>
- </div></blockquote>
- </div>
- <div class="section" id="input-events">
- <h2>Input Events<a class="headerlink" href="#input-events" title="Permalink to this headline">¶</a></h2>
- <table border="1" class="docutils">
- <colgroup>
- <col width="22%" />
- <col width="41%" />
- <col width="36%" />
- </colgroup>
- <thead valign="bottom">
- <tr class="row-odd"><th class="head">Event</th>
- <th class="head">Parameters</th>
- <th class="head">Meaning</th>
- </tr>
- </thead>
- <tbody valign="top">
- <tr class="row-even"><td>accept_socket</td>
- <td>socket</td>
- <td>socket.accept()</td>
- </tr>
- <tr class="row-odd"><td>recv_socket</td>
- <td>socket</td>
- <td>socket.recv(2**16)</td>
- </tr>
- <tr class="row-even"><td>connect_socket</td>
- <td>socket, address</td>
- <td>socket.connect(address)</td>
- </tr>
- <tr class="row-odd"><td>create_socket</td>
- <td> </td>
- <td>new Socket()</td>
- </tr>
- <tr class="row-even"><td>close_socket</td>
- <td>socket</td>
- <td>socket.close()</td>
- </tr>
- <tr class="row-odd"><td>send_socket</td>
- <td>socket, data</td>
- <td>socket.send(data)</td>
- </tr>
- <tr class="row-even"><td>bind_socket</td>
- <td>socket, address</td>
- <td>socket.bind(address)</td>
- </tr>
- <tr class="row-odd"><td>listen_socket</td>
- <td>socket</td>
- <td>socket.listen()</td>
- </tr>
- <tr class="row-even"><td>stop</td>
- <td>socket</td>
- <td>stops translator service</td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="section" id="output-events">
- <h2>Output Events<a class="headerlink" href="#output-events" title="Permalink to this headline">¶</a></h2>
- <table border="1" class="docutils">
- <colgroup>
- <col width="26%" />
- <col width="39%" />
- <col width="35%" />
- </colgroup>
- <thead valign="bottom">
- <tr class="row-odd"><th class="head">Event</th>
- <th class="head">Arguments</th>
- <th class="head">Response to</th>
- </tr>
- </thead>
- <tbody valign="top">
- <tr class="row-even"><td>received_socket</td>
- <td>socket, data</td>
- <td>recv_socket</td>
- </tr>
- <tr class="row-odd"><td>sent_socket</td>
- <td>socket, bytes</td>
- <td>send_socket</td>
- </tr>
- <tr class="row-even"><td>accepted_socket</td>
- <td>socket, connection</td>
- <td>accept_socket</td>
- </tr>
- <tr class="row-odd"><td>connected_socket</td>
- <td>socket</td>
- <td>connect_socket</td>
- </tr>
- <tr class="row-even"><td>closed_socket</td>
- <td>socket</td>
- <td>close_socket</td>
- </tr>
- <tr class="row-odd"><td>bound_socket</td>
- <td>socket</td>
- <td>bind_socket</td>
- </tr>
- <tr class="row-even"><td>listened_socket</td>
- <td>socket</td>
- <td>listen_socket</td>
- </tr>
- <tr class="row-odd"><td>error_socket</td>
- <td>socket, error</td>
- <td>Socket error occurs</td>
- </tr>
- <tr class="row-even"><td>unknown_error_socket</td>
- <td>socket, error</td>
- <td>Python error occurs</td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="section" id="http-client-server">
- <h2>HTTP client/server<a class="headerlink" href="#http-client-server" title="Permalink to this headline">¶</a></h2>
- <p>Using this library, an HTTP echo client and server are implemented.
- The server echoes all data received from the client.
- The client connects to the server and sends some data.
- These are included in the examples directory</p>
- <p>Compile the server using:</p>
- <div class="highlight-default"><div class="highlight"><pre><span class="n">python</span> <span class="n">python_sccd_compiler</span><span class="o">/</span><span class="n">sccdc</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">p</span> <span class="n">threads</span> <span class="n">server</span><span class="o">.</span><span class="n">xml</span>
- </pre></div>
- </div>
- <p>and the client using:</p>
- <div class="highlight-default"><div class="highlight"><pre><span class="n">python</span> <span class="n">python_sccd_compiler</span><span class="o">/</span><span class="n">sccdc</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">p</span> <span class="n">threads</span> <span class="n">client</span><span class="o">.</span><span class="n">xml</span>
- </pre></div>
- </div>
- <p>Afterwards, you can run the server as:</p>
- <div class="highlight-default"><div class="highlight"><pre><span class="n">python</span> <span class="n">run_server</span><span class="o">.</span><span class="n">py</span>
- </pre></div>
- </div>
- <p>which will start up a simple HTTP echo server on port 8080
- (configurable in constructor).
- Then you can start up several clients using:</p>
- <div class="highlight-default"><div class="highlight"><pre><span class="n">python</span> <span class="n">run_client</span><span class="o">.</span><span class="n">py</span>
- </pre></div>
- </div>
- <p>The client will send out a counter to the server and print out the
- reply. The server is able to connect to multiple clients simultaneously,
- so can handle multiple open connections without getting confused.</p>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
- <li><a class="reference internal" href="#">Socket Communication</a><ul>
- <li><a class="reference internal" href="#initialization">Initialization</a></li>
- <li><a class="reference internal" href="#input-events">Input Events</a></li>
- <li><a class="reference internal" href="#output-events">Output Events</a></li>
- <li><a class="reference internal" href="#http-client-server">HTTP client/server</a></li>
- </ul>
- </li>
- </ul>
- <h4>Previous topic</h4>
- <p class="topless"><a href="semantic_options.html"
- title="previous chapter">Semantic Options</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="internal_documentation.html"
- title="next chapter">Internal Documentation</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/sockets.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
- <div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
- </div>
- <script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="internal_documentation.html" title="Internal Documentation"
- >next</a> |</li>
- <li class="right" >
- <a href="semantic_options.html" title="Semantic Options"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> »</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- © Copyright 2016, Simon Van Mierlo.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.6.
- </div>
- </body>
- </html>
|