sockets.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Socket Communication &#8212; SCCD 0.9 documentation</title>
  7. <link rel="stylesheet" href="_static/classic.css" type="text/css" />
  8. <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
  9. <link rel="stylesheet" href="_static/mystyle.css" type="text/css" />
  10. <script type="text/javascript">
  11. var DOCUMENTATION_OPTIONS = {
  12. URL_ROOT: './',
  13. VERSION: '0.9',
  14. COLLAPSE_INDEX: false,
  15. FILE_SUFFIX: '.html',
  16. HAS_SOURCE: true
  17. };
  18. </script>
  19. <script type="text/javascript" src="_static/jquery.js"></script>
  20. <script type="text/javascript" src="_static/underscore.js"></script>
  21. <script type="text/javascript" src="_static/doctools.js"></script>
  22. <link rel="top" title="SCCD 0.9 documentation" href="index.html" />
  23. <link rel="next" title="Internal Documentation" href="internal_documentation.html" />
  24. <link rel="prev" title="Semantic Options" href="semantic_options.html" />
  25. </head>
  26. <body role="document">
  27. <div class="related" role="navigation" aria-label="related navigation">
  28. <h3>Navigation</h3>
  29. <ul>
  30. <li class="right" style="margin-right: 10px">
  31. <a href="genindex.html" title="General Index"
  32. accesskey="I">index</a></li>
  33. <li class="right" >
  34. <a href="py-modindex.html" title="Python Module Index"
  35. >modules</a> |</li>
  36. <li class="right" >
  37. <a href="internal_documentation.html" title="Internal Documentation"
  38. accesskey="N">next</a> |</li>
  39. <li class="right" >
  40. <a href="semantic_options.html" title="Semantic Options"
  41. accesskey="P">previous</a> |</li>
  42. <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> &#187;</li>
  43. </ul>
  44. </div>
  45. <div class="document">
  46. <div class="documentwrapper">
  47. <div class="bodywrapper">
  48. <div class="body" role="main">
  49. <div class="section" id="socket-communication">
  50. <h1>Socket Communication<a class="headerlink" href="#socket-communication" title="Permalink to this headline">¶</a></h1>
  51. <p>Sockets, for network communication, are an oftenly needed capability for many complex system.
  52. By default, however, Statecharts, and SCCD in particular, do not handle socket communication at all.
  53. Shifting all socket communication into action code is not an option either, as it is potentially a blocking operation.
  54. Additionally, the code wraps different socket implementations and socket configuration.</p>
  55. <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.
  56. Blocking then happens on another thread, while the statechart can continue its usual execution.
  57. When the socket operation returns, the result will be raised in the statechart as an event.</p>
  58. <div class="section" id="initialization">
  59. <h2>Initialization<a class="headerlink" href="#initialization" title="Permalink to this headline">¶</a></h2>
  60. <p>To use the translation service, several steps should be followed:</p>
  61. <blockquote>
  62. <div><ol class="arabic simple">
  63. <li>Import sccd.sccd_runtime.socket2event as socket2event;</li>
  64. <li>Write your model with a <em>socket_in</em> and <em>socket_out</em> port;</li>
  65. <li>Before starting the controller, invoke <em>socket2event.boot_translation_service(controller)</em> with the controller as its first argument;</li>
  66. <li>Now raise and catch events as specified here, to communicate with sockets.</li>
  67. </ol>
  68. </div></blockquote>
  69. </div>
  70. <div class="section" id="input-events">
  71. <h2>Input Events<a class="headerlink" href="#input-events" title="Permalink to this headline">¶</a></h2>
  72. <table border="1" class="docutils">
  73. <colgroup>
  74. <col width="22%" />
  75. <col width="41%" />
  76. <col width="36%" />
  77. </colgroup>
  78. <thead valign="bottom">
  79. <tr class="row-odd"><th class="head">Event</th>
  80. <th class="head">Parameters</th>
  81. <th class="head">Meaning</th>
  82. </tr>
  83. </thead>
  84. <tbody valign="top">
  85. <tr class="row-even"><td>accept_socket</td>
  86. <td>socket</td>
  87. <td>socket.accept()</td>
  88. </tr>
  89. <tr class="row-odd"><td>recv_socket</td>
  90. <td>socket</td>
  91. <td>socket.recv(2**16)</td>
  92. </tr>
  93. <tr class="row-even"><td>connect_socket</td>
  94. <td>socket, address</td>
  95. <td>socket.connect(address)</td>
  96. </tr>
  97. <tr class="row-odd"><td>create_socket</td>
  98. <td>&nbsp;</td>
  99. <td>new Socket()</td>
  100. </tr>
  101. <tr class="row-even"><td>close_socket</td>
  102. <td>socket</td>
  103. <td>socket.close()</td>
  104. </tr>
  105. <tr class="row-odd"><td>send_socket</td>
  106. <td>socket, data</td>
  107. <td>socket.send(data)</td>
  108. </tr>
  109. <tr class="row-even"><td>bind_socket</td>
  110. <td>socket, address</td>
  111. <td>socket.bind(address)</td>
  112. </tr>
  113. <tr class="row-odd"><td>listen_socket</td>
  114. <td>socket</td>
  115. <td>socket.listen()</td>
  116. </tr>
  117. <tr class="row-even"><td>stop</td>
  118. <td>socket</td>
  119. <td>stops translator service</td>
  120. </tr>
  121. </tbody>
  122. </table>
  123. </div>
  124. <div class="section" id="output-events">
  125. <h2>Output Events<a class="headerlink" href="#output-events" title="Permalink to this headline">¶</a></h2>
  126. <table border="1" class="docutils">
  127. <colgroup>
  128. <col width="26%" />
  129. <col width="39%" />
  130. <col width="35%" />
  131. </colgroup>
  132. <thead valign="bottom">
  133. <tr class="row-odd"><th class="head">Event</th>
  134. <th class="head">Arguments</th>
  135. <th class="head">Response to</th>
  136. </tr>
  137. </thead>
  138. <tbody valign="top">
  139. <tr class="row-even"><td>received_socket</td>
  140. <td>socket, data</td>
  141. <td>recv_socket</td>
  142. </tr>
  143. <tr class="row-odd"><td>sent_socket</td>
  144. <td>socket, bytes</td>
  145. <td>send_socket</td>
  146. </tr>
  147. <tr class="row-even"><td>accepted_socket</td>
  148. <td>socket, connection</td>
  149. <td>accept_socket</td>
  150. </tr>
  151. <tr class="row-odd"><td>connected_socket</td>
  152. <td>socket</td>
  153. <td>connect_socket</td>
  154. </tr>
  155. <tr class="row-even"><td>closed_socket</td>
  156. <td>socket</td>
  157. <td>close_socket</td>
  158. </tr>
  159. <tr class="row-odd"><td>bound_socket</td>
  160. <td>socket</td>
  161. <td>bind_socket</td>
  162. </tr>
  163. <tr class="row-even"><td>listened_socket</td>
  164. <td>socket</td>
  165. <td>listen_socket</td>
  166. </tr>
  167. <tr class="row-odd"><td>error_socket</td>
  168. <td>socket, error</td>
  169. <td>Socket error occurs</td>
  170. </tr>
  171. <tr class="row-even"><td>unknown_error_socket</td>
  172. <td>socket, error</td>
  173. <td>Python error occurs</td>
  174. </tr>
  175. </tbody>
  176. </table>
  177. </div>
  178. <div class="section" id="http-client-server">
  179. <h2>HTTP client/server<a class="headerlink" href="#http-client-server" title="Permalink to this headline">¶</a></h2>
  180. <p>Using this library, an HTTP echo client and server are implemented.
  181. The server echoes all data received from the client.
  182. The client connects to the server and sends some data.
  183. These are included in the examples directory</p>
  184. <p>Compile the server using:</p>
  185. <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>
  186. </pre></div>
  187. </div>
  188. <p>and the client using:</p>
  189. <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>
  190. </pre></div>
  191. </div>
  192. <p>Afterwards, you can run the server as:</p>
  193. <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>
  194. </pre></div>
  195. </div>
  196. <p>which will start up a simple HTTP echo server on port 8080
  197. (configurable in constructor).
  198. Then you can start up several clients using:</p>
  199. <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>
  200. </pre></div>
  201. </div>
  202. <p>The client will send out a counter to the server and print out the
  203. reply. The server is able to connect to multiple clients simultaneously,
  204. so can handle multiple open connections without getting confused.</p>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  211. <div class="sphinxsidebarwrapper">
  212. <h3><a href="index.html">Table Of Contents</a></h3>
  213. <ul>
  214. <li><a class="reference internal" href="#">Socket Communication</a><ul>
  215. <li><a class="reference internal" href="#initialization">Initialization</a></li>
  216. <li><a class="reference internal" href="#input-events">Input Events</a></li>
  217. <li><a class="reference internal" href="#output-events">Output Events</a></li>
  218. <li><a class="reference internal" href="#http-client-server">HTTP client/server</a></li>
  219. </ul>
  220. </li>
  221. </ul>
  222. <h4>Previous topic</h4>
  223. <p class="topless"><a href="semantic_options.html"
  224. title="previous chapter">Semantic Options</a></p>
  225. <h4>Next topic</h4>
  226. <p class="topless"><a href="internal_documentation.html"
  227. title="next chapter">Internal Documentation</a></p>
  228. <div role="note" aria-label="source link">
  229. <h3>This Page</h3>
  230. <ul class="this-page-menu">
  231. <li><a href="_sources/sockets.txt"
  232. rel="nofollow">Show Source</a></li>
  233. </ul>
  234. </div>
  235. <div id="searchbox" style="display: none" role="search">
  236. <h3>Quick search</h3>
  237. <form class="search" action="search.html" method="get">
  238. <div><input type="text" name="q" /></div>
  239. <div><input type="submit" value="Go" /></div>
  240. <input type="hidden" name="check_keywords" value="yes" />
  241. <input type="hidden" name="area" value="default" />
  242. </form>
  243. </div>
  244. <script type="text/javascript">$('#searchbox').show(0);</script>
  245. </div>
  246. </div>
  247. <div class="clearer"></div>
  248. </div>
  249. <div class="related" role="navigation" aria-label="related navigation">
  250. <h3>Navigation</h3>
  251. <ul>
  252. <li class="right" style="margin-right: 10px">
  253. <a href="genindex.html" title="General Index"
  254. >index</a></li>
  255. <li class="right" >
  256. <a href="py-modindex.html" title="Python Module Index"
  257. >modules</a> |</li>
  258. <li class="right" >
  259. <a href="internal_documentation.html" title="Internal Documentation"
  260. >next</a> |</li>
  261. <li class="right" >
  262. <a href="semantic_options.html" title="Semantic Options"
  263. >previous</a> |</li>
  264. <li class="nav-item nav-item-0"><a href="index.html">SCCD 0.9 documentation</a> &#187;</li>
  265. </ul>
  266. </div>
  267. <div class="footer" role="contentinfo">
  268. &#169; Copyright 2016, Simon Van Mierlo.
  269. Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.6.
  270. </div>
  271. </body>
  272. </html>