services.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  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>Service system :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/spidermonkey/tutorial/services.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="Service system">
  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="services.html">Service system</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/services.adoc">Edit this Page</a></div>
  250. </div>
  251. <div class="content">
  252. <article class="doc">
  253. <h1 class="page">Service system</h1>
  254. <div id="preamble">
  255. <div class="sectionbody">
  256. <div class="admonitionblock warning">
  257. <table>
  258. <tr>
  259. <td class="icon">
  260. <i class="fa icon-warning" title="Warning"></i>
  261. </td>
  262. <td class="content">
  263. <div class="paragraph">
  264. <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>
  265. </div>
  266. </td>
  267. </tr>
  268. </table>
  269. </div>
  270. <div class="paragraph">
  271. <p>The service system is meant to create a common way of using plugins. It is a tiny system, on Server and Client level. In this tutorial I&#8217;ll tell you how to use services, and how to create your own.</p>
  272. </div>
  273. </div>
  274. </div>
  275. <div class="sect1">
  276. <h2 id="creating-services"><a class="anchor" href="#creating-services"></a>Creating services</h2>
  277. <div class="sectionbody">
  278. <div class="paragraph">
  279. <p>Creating services is really easy - you just have to implement the Service interface. <strong>Make sure you don&#8217;t do anything time consuming</strong> since the developer may not be expecting it. Services can choose to support Server, Client, or both. To implement this, use the appropriate constructors:</p>
  280. </div>
  281. <div class="listingblock">
  282. <div class="content">
  283. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">public class MyExampleService implements Service {
  284. public MyExampleService(Server server) {
  285. // By adding the constructor with the Server as argument, this service
  286. // now supports servers.
  287. }
  288. public MyExampleService(Client client) {
  289. // Same goes for client. I could just leave this constructor out, and
  290. // SpiderMonkey would determine this service does not support client mode.
  291. }
  292. }</code></pre>
  293. </div>
  294. </div>
  295. </div>
  296. </div>
  297. <div class="sect1">
  298. <h2 id="using-services"><a class="anchor" href="#using-services"></a>Using services</h2>
  299. <div class="sectionbody">
  300. <div class="paragraph">
  301. <p>The Server and Client class both have a method called getService(). It retrieves a service based on class name, and instantiates it if necessary. From there you can use the service.</p>
  302. </div>
  303. <div class="paragraph">
  304. <p>The Service system is not a terribly powerful system, neither does it do safety checks and service management - it just provides a way to commonly manage extensions.</p>
  305. </div>
  306. <div class="paragraph">
  307. <p>That&#8217;s it! Next tutorial we&#8217;re going to have a look at how to use the streaming <abbr title="Application Programming Interface">API</abbr>.</p>
  308. </div>
  309. </div>
  310. </div>
  311. </article>
  312. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  313. <div class="toc-menu"></div>
  314. </aside>
  315. </div>
  316. </main>
  317. </div>
  318. <footer class="footer">
  319. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  320. </footer>
  321. <script src="../../../_/js/site.js"></script>
  322. <script async src="../../../_/js/vendor/highlight.js"></script>
  323. </body>
  324. </html>