streaming.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>Streaming service :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/spidermonkey/tutorial/streaming.html">
  8. <meta name="generator" content="Antora 2.3.3">
  9. <link rel="stylesheet" href="../../../_/css/site.css">
  10. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  11. <meta property="og:description" content="Streaming service">
  12. <meta property="og:title" content="jMonkeyEngine Docs">
  13. <link rel="stylesheet" href="../../../_/css/site-extra.css">
  14. <link rel="icon" href="../../../_/img/favicon.ico" type="image/x-icon">
  15. </head>
  16. <body class="article">
  17. <header class="header">
  18. <nav class="navbar">
  19. <div class="navbar-brand">
  20. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  21. <img alt="" src="../../../_/img/jMonkeyDocLogo.png" height="32" type="image/x-icon">
  22. </a>
  23. <div class="navbar-item hide-for-print">
  24. <input type="text" placeholder="Search docs..." id="search-input"/>
  25. </div>
  26. <button class="navbar-burger" data-target="topbar-nav">
  27. <span></span>
  28. <span></span>
  29. <span></span>
  30. </button>
  31. </div>
  32. <div id="topbar-nav" class="navbar-menu">
  33. <div class="navbar-end">
  34. <div class="navbar-item theme-switch-wrapper">
  35. <label class="theme-switch" for="checkbox">
  36. <input type="checkbox" id="checkbox" />
  37. <div class="slider round"></div>
  38. </label>
  39. </div>
  40. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  41. </div>
  42. </div>
  43. </nav>
  44. </header>
  45. <div class="body">
  46. <div class="nav-container" data-component="docs" data-version="master">
  47. <aside class="nav">
  48. <div class="panels">
  49. <div class="nav-panel-menu is-active" data-panel="menu">
  50. <nav class="nav-menu">
  51. <h3 class="title"><a href="../../documentation.html">Docs</a></h3>
  52. <ul class="nav-list">
  53. <li class="nav-item" data-depth="0">
  54. <ul class="nav-list">
  55. <li class="nav-item" data-depth="1">
  56. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  57. </li>
  58. <li class="nav-item" data-depth="1">
  59. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  60. </li>
  61. <li class="nav-item" data-depth="1">
  62. <button class="nav-item-toggle"></button>
  63. <a class="nav-link" href="../../jme3.html">jMonkeyEngine 3</a>
  64. <ul class="nav-list">
  65. <li class="nav-item" data-depth="2">
  66. <button class="nav-item-toggle"></button>
  67. <span class="nav-text">Beginner Tutorials</span>
  68. <ul class="nav-list">
  69. <li class="nav-item" data-depth="3">
  70. <a class="nav-link" href="../../jme3/beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  71. </li>
  72. <li class="nav-item" data-depth="3">
  73. <a class="nav-link" href="../../jme3/beginner/hello_node.html">Hello Node</a>
  74. </li>
  75. <li class="nav-item" data-depth="3">
  76. <a class="nav-link" href="../../jme3/beginner/hello_asset.html">Hello Asset</a>
  77. </li>
  78. <li class="nav-item" data-depth="3">
  79. <a class="nav-link" href="../../jme3/beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  80. </li>
  81. <li class="nav-item" data-depth="3">
  82. <a class="nav-link" href="../../jme3/beginner/hello_input_system.html">Hello Input System</a>
  83. </li>
  84. <li class="nav-item" data-depth="3">
  85. <a class="nav-link" href="../../jme3/beginner/hello_material.html">Hello Material</a>
  86. </li>
  87. <li class="nav-item" data-depth="3">
  88. <a class="nav-link" href="../../jme3/beginner/hello_animation.html">Hello Animation</a>
  89. </li>
  90. <li class="nav-item" data-depth="3">
  91. <a class="nav-link" href="../../jme3/beginner/hello_picking.html">Hello Picking</a>
  92. </li>
  93. <li class="nav-item" data-depth="3">
  94. <a class="nav-link" href="../../jme3/beginner/hello_collision.html">Hello Collision</a>
  95. </li>
  96. <li class="nav-item" data-depth="3">
  97. <a class="nav-link" href="../../jme3/beginner/hello_terrain.html">Hello Terrain</a>
  98. </li>
  99. <li class="nav-item" data-depth="3">
  100. <a class="nav-link" href="../../jme3/beginner/hello_audio.html">Hello Audio</a>
  101. </li>
  102. <li class="nav-item" data-depth="3">
  103. <a class="nav-link" href="../../jme3/beginner/hello_effects.html">Hello Effects</a>
  104. </li>
  105. <li class="nav-item" data-depth="3">
  106. <a class="nav-link" href="../../jme3/beginner/hello_physics.html">Hello Physics</a>
  107. </li>
  108. </ul>
  109. </li>
  110. <li class="nav-item" data-depth="2">
  111. <button class="nav-item-toggle"></button>
  112. <span class="nav-text">Intermediate Tutorials</span>
  113. <ul class="nav-list">
  114. <li class="nav-item" data-depth="3">
  115. <button class="nav-item-toggle"></button>
  116. <span class="nav-text">Concepts</span>
  117. <ul class="nav-list">
  118. <li class="nav-item" data-depth="4">
  119. <a class="nav-link" href="../../jme3/intermediate/best_practices.html">Best Practices</a>
  120. </li>
  121. <li class="nav-item" data-depth="4">
  122. <a class="nav-link" href="../../jme3/intermediate/simpleapplication.html">Simple Application</a>
  123. </li>
  124. <li class="nav-item" data-depth="4">
  125. <a class="nav-link" href="../../jme3/features.html">Features</a>
  126. </li>
  127. <li class="nav-item" data-depth="4">
  128. <a class="nav-link" href="../../jme3/intermediate/optimization.html">Optimization</a>
  129. </li>
  130. <li class="nav-item" data-depth="4">
  131. <a class="nav-link" href="../../jme3/faq.html">FAQ</a>
  132. </li>
  133. </ul>
  134. </li>
  135. <li class="nav-item" data-depth="3">
  136. <button class="nav-item-toggle"></button>
  137. <span class="nav-text">Math Concepts</span>
  138. <ul class="nav-list">
  139. <li class="nav-item" data-depth="4">
  140. <a class="nav-link" href="../../jme3/math_for_dummies.html">Math For Dummies</a>
  141. </li>
  142. <li class="nav-item" data-depth="4">
  143. <a class="nav-link" href="../../jme3/intermediate/math.html">Math</a>
  144. </li>
  145. <li class="nav-item" data-depth="4">
  146. <a class="nav-link" href="../../jme3/math.html">More Math</a>
  147. </li>
  148. <li class="nav-item" data-depth="4">
  149. <a class="nav-link" href="../../jme3/rotate.html">Rotate</a>
  150. </li>
  151. <li class="nav-item" data-depth="4">
  152. <a class="nav-link" href="../../jme3/math_video_tutorials.html">Math Video Tutorials</a>
  153. </li>
  154. </ul>
  155. </li>
  156. <li class="nav-item" data-depth="3">
  157. <button class="nav-item-toggle"></button>
  158. <span class="nav-text">3D Graphics Concepts</span>
  159. <ul class="nav-list">
  160. <li class="nav-item" data-depth="4">
  161. <a class="nav-link" href="../../jme3/intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  162. </li>
  163. <li class="nav-item" data-depth="4">
  164. <a class="nav-link" href="../../jme3/scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  165. </li>
  166. <li class="nav-item" data-depth="4">
  167. <a class="nav-link" href="../../jme3/beginner/hellovector.html">Hello Vector</a>
  168. </li>
  169. <li class="nav-item" data-depth="4">
  170. <a class="nav-link" href="../../jme3/terminology.html">Terminology</a>
  171. </li>
  172. <li class="nav-item" data-depth="4">
  173. <a class="nav-link" href="../../jme3/intermediate/how_to_use_materials.html">How to Use Materials</a>
  174. </li>
  175. <li class="nav-item" data-depth="4">
  176. <a class="nav-link" href="../../jme3/intermediate/transparency_sorting.html">Transparency and Sorting</a>
  177. </li>
  178. <li class="nav-item" data-depth="4">
  179. <a class="nav-link" href="../../jme3/external/blender.html">Importing from Blender</a>
  180. </li>
  181. <li class="nav-item" data-depth="4">
  182. <a class="nav-link" href="../../jme3/external/3dsmax.html">Importing from 3DS Max</a>
  183. </li>
  184. </ul>
  185. </li>
  186. </ul>
  187. </li>
  188. </ul>
  189. </li>
  190. <li class="nav-item" data-depth="1">
  191. <a class="nav-link" href="../../logo.html">Logo Usage</a>
  192. </li>
  193. <li class="nav-item" data-depth="1">
  194. <a class="nav-link" href="../../bsd_license.html">License</a>
  195. </li>
  196. <li class="nav-item" data-depth="1">
  197. <a class="nav-link" href="../../github_tips.html">Github Tips</a>
  198. </li>
  199. </ul>
  200. </li>
  201. <li class="nav-item" data-depth="0">
  202. <button class="nav-item-toggle"></button>
  203. <span class="nav-text">SDK</span>
  204. <ul class="nav-list">
  205. <li class="nav-item" data-depth="1">
  206. <a class="nav-link" href="../../sdk.html">jMonkeyEngine SDK</a>
  207. </li>
  208. </ul>
  209. </li>
  210. </ul>
  211. </nav>
  212. </div>
  213. <div class="nav-panel-explore" data-panel="explore">
  214. <div class="context">
  215. <span class="title">Docs</span>
  216. <span class="version">master</span>
  217. </div>
  218. <ul class="components">
  219. <li class="component is-current">
  220. <span class="title">Docs</span>
  221. <ul class="versions">
  222. <li class="version is-current is-latest">
  223. <a href="../../documentation.html">master</a>
  224. </li>
  225. </ul>
  226. </li>
  227. <li class="component">
  228. <span class="title">Wiki UI</span>
  229. <ul class="versions">
  230. <li class="version is-latest">
  231. <a href="../../../wiki-ui/index.html">master</a>
  232. </li>
  233. </ul>
  234. </li>
  235. </ul>
  236. </div>
  237. </div>
  238. </aside>
  239. </div>
  240. <main class="article">
  241. <div class="toolbar" role="navigation">
  242. <button class="nav-toggle"></button>
  243. <nav class="breadcrumbs" aria-label="breadcrumbs">
  244. <ul>
  245. <li><a href="../../documentation.html">Docs</a></li>
  246. <li><a href="streaming.html">Streaming service</a></li>
  247. </ul>
  248. </nav>
  249. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/spidermonkey/tutorial/streaming.adoc">Edit this Page</a></div>
  250. </div>
  251. <div class="content">
  252. <article class="doc">
  253. <h1 class="page">Streaming service</h1>
  254. <div class="admonitionblock warning">
  255. <table>
  256. <tr>
  257. <td class="icon">
  258. <i class="fa icon-warning" title="Warning"></i>
  259. </td>
  260. <td class="content">
  261. <div class="paragraph">
  262. <p>This article covers a deprecated <abbr title="Application Programming Interface">API</abbr>! See <a href="../../jme3/advanced/networking.html" class="page">networking</a> for current documentation.</p>
  263. </div>
  264. </td>
  265. </tr>
  266. </table>
  267. </div>
  268. <div class="paragraph">
  269. <p>The streaming service is meant for situations where you want to transfer files, or other types of data to clients. In this tutorial we&#8217;ll discuss how it works, and how to use it.</p>
  270. </div>
  271. <div class="paragraph">
  272. <p>Let&#8217;s start off with how it works; streaming service uses messages to transfer data. This is done so it doesn&#8217;t block other messages from being sent, while transferring. First a message is sent the describes the stream. The peer can now choose whether to accept or reject the stream. When the peer accepts, the data will be sent. You have to handle this data yourself. At the end of the stream you get the same message as when the stream was offered, to indicate the end of the stream.</p>
  273. </div>
  274. <div class="paragraph">
  275. <p>Let&#8217;s transfer a file to a client:</p>
  276. </div>
  277. <div class="listingblock">
  278. <div class="content">
  279. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">StreamingService sService = client.getService(StreamingService.class);
  280. sService.addStreamListener(this);
  281. sService = server.getService(StreamingService.class);
  282. Client receiver = server.getConnectors().get(0); // Note that you can't use 'client' here, since it's not a connector.
  283. sService.offerStream(receiver, new StreamMessage(), new FileInputStream("test.txt")); // StreamMessage used here as start and end message, but can be anything to describe the stream on the other end.</code></pre>
  284. </div>
  285. </div>
  286. <div class="paragraph">
  287. <p>As you can see, this system uses the Service system. First, we get the client&#8217;s StreamingService, and register ourselves as a listener. Then we get the server&#8217;s version of the StreamingService, from which you can stream things. Then we get a connector client (the first one), and send the file via an InputStream.</p>
  288. </div>
  289. <div class="paragraph">
  290. <p>Now to receive this stuff is simple;</p>
  291. </div>
  292. <div class="listingblock">
  293. <div class="content">
  294. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">public boolean streamOffered(StreamMessage message) {
  295. // Here you'd normally check the message what this stream is all about, and
  296. // base your acception criteria on that.
  297. fileStream = new FileOutputStream("test.txt");
  298. return true; // Sure, we'll just accept this message.
  299. }
  300. public void streamDataReceived(StreamDataMessage message) {
  301. fileStream.write(message.getData());
  302. }
  303. public void streamCompleted(StreamMessage message) {
  304. fileStream.flush();
  305. fileStream.close();
  306. }</code></pre>
  307. </div>
  308. </div>
  309. <div class="paragraph">
  310. <p>That was all; simple right?</p>
  311. </div>
  312. </article>
  313. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  314. <div class="toc-menu"></div>
  315. </aside>
  316. </div>
  317. </main>
  318. </div>
  319. <footer class="footer">
  320. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  321. </footer>
  322. <script src="../../../_/js/site.js"></script>
  323. <script async src="../../../_/js/vendor/highlight.js"></script>
  324. </body>
  325. </html>