nodeskini 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +31 -0
  2. package/client/archive/bundle.js +11528 -0
  3. package/client/archive/golem.html +60 -0
  4. package/client/archive/golemClient.js +595 -0
  5. package/client/archive/golembundle.js +11634 -0
  6. package/client/archive/sequencer.html +43 -0
  7. package/client/archive/sequenceurClient.js +815 -0
  8. package/client/archive/stylegolem.css +158 -0
  9. package/client/archive/stylesequenceur.css +204 -0
  10. package/client/clientListe/Sortable-master/.circleci/config.yml +33 -0
  11. package/client/clientListe/Sortable-master/.editorconfig +15 -0
  12. package/client/clientListe/Sortable-master/.github/ISSUE_TEMPLATE/bug-report.md +73 -0
  13. package/client/clientListe/Sortable-master/.github/ISSUE_TEMPLATE/custom-template.md +48 -0
  14. package/client/clientListe/Sortable-master/.github/ISSUE_TEMPLATE/feature-request.md +41 -0
  15. package/client/clientListe/Sortable-master/.jshintrc +25 -0
  16. package/client/clientListe/Sortable-master/.testcaferc.json +7 -0
  17. package/client/clientListe/Sortable-master/CONTRIBUTING.md +26 -0
  18. package/client/clientListe/Sortable-master/LICENSE +21 -0
  19. package/client/clientListe/Sortable-master/README.md +813 -0
  20. package/client/clientListe/Sortable-master/Sortable.js +3709 -0
  21. package/client/clientListe/Sortable-master/Sortable.min.js +2 -0
  22. package/client/clientListe/Sortable-master/Sortable.min.old.js +2 -0
  23. package/client/clientListe/Sortable-master/Sortable.min.old.old.js +2 -0
  24. package/client/clientListe/Sortable-master/babel.config.js +27 -0
  25. package/client/clientListe/Sortable-master/bower.json +30 -0
  26. package/client/clientListe/Sortable-master/entry/entry-complete.js +8 -0
  27. package/client/clientListe/Sortable-master/entry/entry-core.js +19 -0
  28. package/client/clientListe/Sortable-master/entry/entry-defaults.js +19 -0
  29. package/client/clientListe/Sortable-master/index.html +460 -0
  30. package/client/clientListe/Sortable-master/modular/sortable.complete.esm.js +3701 -0
  31. package/client/clientListe/Sortable-master/modular/sortable.core.esm.js +3698 -0
  32. package/client/clientListe/Sortable-master/modular/sortable.esm.js +3699 -0
  33. package/client/clientListe/Sortable-master/package-lock.json +5704 -0
  34. package/client/clientListe/Sortable-master/package.json +56 -0
  35. package/client/clientListe/Sortable-master/plugins/AutoScroll/AutoScroll.js +270 -0
  36. package/client/clientListe/Sortable-master/plugins/AutoScroll/README.md +80 -0
  37. package/client/clientListe/Sortable-master/plugins/AutoScroll/index.js +1 -0
  38. package/client/clientListe/Sortable-master/plugins/MultiDrag/MultiDrag.js +617 -0
  39. package/client/clientListe/Sortable-master/plugins/MultiDrag/README.md +96 -0
  40. package/client/clientListe/Sortable-master/plugins/MultiDrag/index.js +1 -0
  41. package/client/clientListe/Sortable-master/plugins/OnSpill/OnSpill.js +79 -0
  42. package/client/clientListe/Sortable-master/plugins/OnSpill/README.md +60 -0
  43. package/client/clientListe/Sortable-master/plugins/OnSpill/index.js +1 -0
  44. package/client/clientListe/Sortable-master/plugins/README.md +178 -0
  45. package/client/clientListe/Sortable-master/plugins/Swap/README.md +55 -0
  46. package/client/clientListe/Sortable-master/plugins/Swap/Swap.js +90 -0
  47. package/client/clientListe/Sortable-master/plugins/Swap/index.js +1 -0
  48. package/client/clientListe/Sortable-master/scripts/banner.js +8 -0
  49. package/client/clientListe/Sortable-master/scripts/build.js +17 -0
  50. package/client/clientListe/Sortable-master/scripts/esm-build.js +28 -0
  51. package/client/clientListe/Sortable-master/scripts/minify.js +11 -0
  52. package/client/clientListe/Sortable-master/scripts/test-compat.js +30 -0
  53. package/client/clientListe/Sortable-master/scripts/test.js +21 -0
  54. package/client/clientListe/Sortable-master/scripts/umd-build.js +15 -0
  55. package/client/clientListe/Sortable-master/src/Animation.js +175 -0
  56. package/client/clientListe/Sortable-master/src/BrowserInfo.js +12 -0
  57. package/client/clientListe/Sortable-master/src/EventDispatcher.js +57 -0
  58. package/client/clientListe/Sortable-master/src/PluginManager.js +87 -0
  59. package/client/clientListe/Sortable-master/src/Sortable.js +1971 -0
  60. package/client/clientListe/Sortable-master/src/utils.js +556 -0
  61. package/client/clientListe/Sortable-master/st/app.js +224 -0
  62. package/client/clientListe/Sortable-master/st/iframe/frame.html +32 -0
  63. package/client/clientListe/Sortable-master/st/iframe/index.html +49 -0
  64. package/client/clientListe/Sortable-master/st/logo.png +0 -0
  65. package/client/clientListe/Sortable-master/st/og-image.png +0 -0
  66. package/client/clientListe/Sortable-master/st/prettify/prettify.css +1 -0
  67. package/client/clientListe/Sortable-master/st/prettify/prettify.js +46 -0
  68. package/client/clientListe/Sortable-master/st/prettify/run_prettify.js +64 -0
  69. package/client/clientListe/Sortable-master/st/saucelabs.svg +1 -0
  70. package/client/clientListe/Sortable-master/st/theme.css +254 -0
  71. package/client/clientListe/Sortable-master/tests/Sortable.compat.test.js +39 -0
  72. package/client/clientListe/Sortable-master/tests/Sortable.test.js +386 -0
  73. package/client/clientListe/Sortable-master/tests/dual-list.html +34 -0
  74. package/client/clientListe/Sortable-master/tests/empty-list.html +30 -0
  75. package/client/clientListe/Sortable-master/tests/filter.html +27 -0
  76. package/client/clientListe/Sortable-master/tests/handles.html +27 -0
  77. package/client/clientListe/Sortable-master/tests/nested.html +67 -0
  78. package/client/clientListe/Sortable-master/tests/single-list.html +25 -0
  79. package/client/clientListe/Sortable-master/tests/style.css +18 -0
  80. package/client/clientListe/clientListe.html +148 -0
  81. package/client/clientListe/clientListe.js +1508 -0
  82. package/client/clientListe/clientListebundle.js +13164 -0
  83. package/client/clientListe/images/poubelle.png +0 -0
  84. package/client/clientListe/images/start.png +0 -0
  85. package/client/clientListe/images/stop.png +0 -0
  86. package/client/clientListe/images/submit.png +0 -0
  87. package/client/clientListe/sortable-theme-bootstrap.css +90 -0
  88. package/client/configurateur/configReact.js +273 -0
  89. package/client/configurateur/configReactbundle.js +295 -0
  90. package/client/configurateur/configurateur.css +95 -0
  91. package/client/configurateur/configurateur.html +48 -0
  92. package/client/configurateur/lib/jexcel.css +755 -0
  93. package/client/configurateur/lib/jexcel.js +14970 -0
  94. package/client/configurateur/lib/jsuites.css +2801 -0
  95. package/client/configurateur/lib/jsuites.js +11822 -0
  96. package/client/configurateur/lib/react-dom.production.min.js +239 -0
  97. package/client/configurateur/lib/react.production.min.js +32 -0
  98. package/client/configurateur/src/configReact.js +247 -0
  99. package/client/controleur/clientcontroleur.js +536 -0
  100. package/client/controleur/clientcontroleur.test.js +282 -0
  101. package/client/controleur/controleur.html +51 -0
  102. package/client/controleur/controleurbundle.js +565 -0
  103. package/client/controleur/stylecontroleur.css +236 -0
  104. package/client/controleurHH/controleurHH.html +71 -0
  105. package/client/controleurHH/controleurHH.js +252 -0
  106. package/client/controleurHH/styles/index.css +320 -0
  107. package/client/controleurHH/styles/material.css +11552 -0
  108. package/client/parametrage/paramReact.js +473 -0
  109. package/client/parametrage/paramReactbundle.js +500 -0
  110. package/client/parametrage/parametrage.css +111 -0
  111. package/client/parametrage/parametrage.html +163 -0
  112. package/client/parametrage/src/paramReact.js +459 -0
  113. package/client/score/hash.js +83 -0
  114. package/client/score/p5.min.js +3 -0
  115. package/client/score/parto1.js +1171 -0
  116. package/client/score/parto1bundle.js +1181 -0
  117. package/client/score/processing.min.js +431 -0
  118. package/client/score/score.html +15 -0
  119. package/client/score/score.js +34 -0
  120. package/client/simulateurListe/simulateurFork.js +750 -0
  121. package/client/simulateurListe/simulateurFork.mjs +681 -0
  122. package/client/simulateurListe/simulateurForkSansReorg.js +569 -0
  123. package/client/simulateurListe/simulateurListe.js +628 -0
  124. package/myReact/archive/Nodeemitvaluedlocal1.hh.js +52 -0
  125. package/myReact/archive/abort-parNode.js +79 -0
  126. package/myReact/archive/abroNode.js +169 -0
  127. package/myReact/archive/abroNode2.js +80 -0
  128. package/myReact/archive/atom.compile.hh.js +51 -0
  129. package/myReact/archive/await-countNode.js +67 -0
  130. package/myReact/archive/await-nowvalNode.js +44 -0
  131. package/myReact/archive/callHH.js +96 -0
  132. package/myReact/archive/emit-if2.hh.compiled.js +113 -0
  133. package/myReact/archive/every1Node.js +35 -0
  134. package/myReact/archive/if-runNode.js +74 -0
  135. package/myReact/archive/if1Node.js +43 -0
  136. package/myReact/archive/makeawait.js +0 -0
  137. package/myReact/archive/myReact.old.js +684 -0
  138. package/myReact/archive/orchestration.js +281 -0
  139. package/myReact/archive/orchestration1.js +132 -0
  140. package/myReact/archive/orchestration1.xml +465 -0
  141. package/myReact/archive/orchestration2.js +161 -0
  142. package/myReact/archive/orchestrationHH.mano.js +280 -0
  143. package/myReact/archive/orchestrationHHTest.js +428 -0
  144. package/myReact/archive/orchestrationHHTest.xml +234 -0
  145. package/myReact/archive/orchestrationHHTestRun.js +104 -0
  146. package/myReact/archive/orchestrationHHTestRun.xml +34 -0
  147. package/myReact/archive/orchestrationTest0.js +178 -0
  148. package/myReact/archive/orchestrationTest1.js +181 -0
  149. package/myReact/archive/orchestrationTest2.js +281 -0
  150. package/myReact/archive/run3pointsNode.js +59 -0
  151. package/myReact/archive/runNode.js +123 -0
  152. package/myReact/archive/runNode2.js +91 -0
  153. package/myReact/archive/testAwait1.js +141 -0
  154. package/myReact/archive/testAwait1.xml +86 -0
  155. package/myReact/archive/testEvery1.js +122 -0
  156. package/myReact/archive/testEvery1.xml +79 -0
  157. package/myReact/archive/testHH1.js +135 -0
  158. package/myReact/archive/testHH1.xml +86 -0
  159. package/myReact/archive/testHH1revu.js +104 -0
  160. package/myReact/archive/testHH2.js +122 -0
  161. package/myReact/archive/testHH2.xml +79 -0
  162. package/myReact/archive/testHH3.js +130 -0
  163. package/myReact/archive/testHH3.xml +86 -0
  164. package/myReact/archive/testHHabort.js +121 -0
  165. package/myReact/archive/testHHabort.xml +83 -0
  166. package/myReact/archive/testMakeawait.js +202 -0
  167. package/myReact/archive/testRun1.js +168 -0
  168. package/myReact/archive/testRun1.xml +142 -0
  169. package/myReact/archive/titi.js +28 -0
  170. package/myReact/archive/titi.xml +110 -0
  171. package/myReact/archive/toto.js +73 -0
  172. package/myReact/archive/toto.xml +198 -0
  173. package/myReact/archive/trap-await-parallelNode.js +123 -0
  174. package/myReact/inutiles/hiver2022.xml +804 -0
  175. package/myReact/inutiles/hopeNode.xml +459 -0
  176. package/myReact/inutiles/mars2022.xml +871 -0
  177. package/myReact/inutiles/mystique1.xml +318 -0
  178. package/myReact/inutiles/mystiqueOSC.xml +277 -0
  179. package/myReact/inutiles/opus5Node.xml +1271 -0
  180. package/myReact/inutiles/opus5NodeLinux.xml +1241 -0
  181. package/myReact/inutiles/orchestrationHH.xml +541 -0
  182. package/myReact/inutiles/orchestrationHH2.xml +547 -0
  183. package/myReact/inutiles/testHH.xml +95 -0
  184. package/myReact/inutiles/trouveLaPercuTenor.xml +349 -0
  185. package/myReact/myReact.js +744 -0
  186. package/myReact/myReact.min.js +1 -0
  187. package/myReact/orchestrationHH.js +311 -0
  188. package/myReact/orchestrationHH.mjs +436 -0
  189. package/myReact/orchestrationHH.mjs.map +1 -0
  190. package/package.json +46 -0
  191. package/serveur/OSCandMidi.mjs +361 -0
  192. package/serveur/computeScore.mjs +415 -0
  193. package/serveur/controleDAW.mjs +1149 -0
  194. package/serveur/defaultSession.csv +2 -0
  195. package/serveur/defaultSkiniParametres.js +119 -0
  196. package/serveur/gameOSC.mjs +96 -0
  197. package/serveur/groupeClientsSons.mjs +1014 -0
  198. package/serveur/ipConfig.json +24 -0
  199. package/serveur/ipConfig127.json +19 -0
  200. package/serveur/ipConfig75.json +17 -0
  201. package/serveur/ipConfigBH.json +19 -0
  202. package/serveur/ipConfigLocal.json +19 -0
  203. package/serveur/midiConfig.json +26 -0
  204. package/serveur/midiConfigBH.json +26 -0
  205. package/serveur/midiConfigVoid.json +3 -0
  206. package/serveur/midimix.mjs +570 -0
  207. package/serveur/saveParam.mjs +159 -0
  208. package/serveur/skiniParametres.good.js +132 -0
  209. package/serveur/skiniParametres.js +106 -0
  210. package/serveur/utilsHHSkini.hh.js +64 -0
  211. package/serveur/utilsSkini.mjs +137 -0
  212. package/serveur/websocketServer.mjs +2052 -0
  213. package/serveur/workerInterfaceZ.mjs +327 -0
  214. package/serveur/workerSynchro.mjs +49 -0
  215. package/skini.mjs +141 -0
@@ -0,0 +1,60 @@
1
+ <html>
2
+ <head>
3
+ <link rel="stylesheet" type="text/css" href="./client/stylegolem.css" >
4
+ <meta charset="UTF-8" name="viewport" content="width=device-width, height=device-height, shrink-to-fit=yes, intial-scale=1" />
5
+ </head>
6
+ <body onload="initWSSocket(8383);">
7
+ <script type='text/javascript' src='./client/golembundle.js'></script>
8
+ <div class="wrapper">
9
+ <input type="text" id="monPseudo" placeholder="Votre prénom">
10
+ </div>
11
+ <div class="wrapper">
12
+ <button class="button buttonPseudo" id="leBoutonPseudo" onclick="initialisation();">OK</button>
13
+ </div>
14
+ <br class="breakAccueil" style="display:none">
15
+ <div class="wrapper">
16
+ <button id="buttonType1" style="display:none" class="button boutonsSons1" onclick="clickButton(1);">Percu</button>
17
+ <button id="buttonType2" style="display:none" class="button boutonsSons2" onclick="clickButton(2);">Voix</button>
18
+ <button id="buttonType3" style="display:none" class="button boutonsSons3" onclick="clickButton(3);">Ambiances</button>
19
+ <button id="buttonRetour" style="display:none" class="button button3" onclick="clickButton(4);">...</button>
20
+ </div>
21
+ <br class="breakAccueil" style="display:none">
22
+
23
+ <div class="wrapper">
24
+ <em id="labelSons" color="white" style="display:none">Sons disponibles</em>
25
+
26
+ <div class="wrapButtons" id="listButton" style="display:none" >
27
+ <div id="listBoutonsSons"></div>
28
+ </div>
29
+
30
+ </div>
31
+
32
+ <div class="sonChoisi"> <span id="sonChoisi" style="display:none" ></span></div>
33
+
34
+ <br class="breakAccueil" style="display:none">
35
+ <div class="wrapper">
36
+ <button id="buttonEcouter" class="button buttonListen" style="display:none" onclick="startListenClip();">ECOUTER</button>
37
+ <button id="buttonStop" class="button buttonStop" style="display:none" onclick="stopListenClip();">STOP</button>
38
+ <button id="buttonStart" class="button" style="display:none" onclick="startClip();">JOUER</button>
39
+ </div>
40
+ <br class="breakAccueil" style="display:none">
41
+ <div class="wrapper">
42
+ <em class="texteSon" id="textProgressbar1" style="display:none"></em>
43
+ <progress class="progressBar" id="progressbar1" value="0" max="30" style="display:none"></progress>
44
+ <br>
45
+ <em class="texteSon" id="textProgressbar2" style="display:none"></em>
46
+ <progress class="progressBar" id="progressbar2" value="0" max="30" style="display:none"></progress>
47
+ <br>
48
+ <em class="texteSon" id="textProgressbar3" style="display:none"></em>
49
+ <progress class="progressBar" id="progressbar3" value="0" max="30" style="display:none"></progress>
50
+ </div>
51
+
52
+ <p style="color:white" id="pseudo"></p>
53
+ <div class="info-spectateur"> <span id="MessageDuServeur"> Bonjour, donnez votre prénom</span></div>
54
+ <hr>
55
+ <div class="text-spectacle"> <span id="Broadcast"> </span></div>
56
+ <div class="text-spectacle"> <span id="demandeDeSons" class="breakAccueil" style="display:none"> </span></div>
57
+
58
+ </body>
59
+
60
+ </html>
@@ -0,0 +1,595 @@
1
+ /********************************
2
+
3
+ VERSION NODE JS : 28 Fev 2018
4
+
5
+ *********************************/
6
+
7
+ var $=require('jquery');
8
+ $('#test').text('browserify working');
9
+
10
+ var port;
11
+ var ws;
12
+ var treeButtons;
13
+ var currentButtons;
14
+ var positionBouton = [];
15
+ var arbre;
16
+
17
+ var par = require('../serveur/skiniParametres');
18
+ var ipConfig = require('../serveur/ipConfig');
19
+
20
+ var id = Math.floor((Math.random() * 1000000) + 1 ); // Pour identifier le client
21
+ var listenMachine;
22
+ var buttonMachine;
23
+ var src = -1;
24
+ var DAWON = 1;
25
+ var demandeDeSons = ' ';
26
+ var pseudo;
27
+ var debug = true;
28
+ var listClips; // Devient une array avec toutes les infos sur les clips selectionnes
29
+ var indexChoisi =-1;
30
+ var nombreSonsPossible = 3;
31
+
32
+ var bleu = "#008CBA";
33
+ var rouge = '#CF1919';
34
+ var vert = "#4CAF50";
35
+ var marron = '#666633';
36
+ var violet = '#797bbf';
37
+ var orange = '#b3712d';
38
+
39
+ var msg = { // On met des valeurs pas defaut
40
+ type: "configuration",
41
+ text: "ECRAN_NOIR" ,
42
+ pseudo: "Anonyme",
43
+ value: 0,
44
+ };
45
+
46
+ navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
47
+
48
+ function vibration(duree) {
49
+ if (navigator.vibrate == undefined ) return;
50
+ if ('vibrate' in navigator) {
51
+ navigator.vibrate(duree);
52
+ }
53
+ }
54
+
55
+ var audioInit = new Audio("../sounds/FM8-6.mp3");
56
+
57
+ function initialisation() {
58
+ audioInit.play();
59
+
60
+ // Pour la gestion de la reconnexion si le serveur est tombé et relancé.
61
+ // Si on n'a pas de pseudo en local on suit la procédure de demande d'un pseudo
62
+ // Si on a déjà un pseudo on ne demande rien .
63
+ // La gestion du status du client est dangereuse car c'est document.getElementById("monPseudo").value;
64
+ // qui donne l'état. Ce sera à revoir.
65
+
66
+ console.log("PSEUDO clientGolem.js:", pseudo);
67
+ if (pseudo === undefined) { // Cas de la première fois que l'on appelle le service golem(pseudo)
68
+ var x = document.getElementById("monPseudo").value;
69
+ if ( x === "" || x === "Votre prénom" ) { // Cas du OK sans saisie
70
+ document.getElementById("MessageDuServeur").textContent = "Vous n'avez pas donné votre prénom !! ";
71
+ return;
72
+ } else {
73
+ pseudo = x;
74
+ }
75
+ }
76
+ msg.pseudo = pseudo;
77
+
78
+ // Attention: si on envoie un message ici sur la websocket immédiatament après la reconnexion.
79
+ // Il se peut que la socket ne soit pas encore prête. Il y a des choses à faire avec readyState.
80
+
81
+ // On a passé l'étape du pseudo, on peut enlever la partie HTML du pseudo inutile à présent
82
+ document.getElementById( "monPseudo" ).style.display = "none";
83
+ document.getElementById( "leBoutonPseudo" ).style.display = "none";
84
+
85
+ var el = document.getElementById( "buttonType1" );
86
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
87
+ el = document.getElementById( "buttonType2" );
88
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
89
+ el = document.getElementById( "buttonType3" );
90
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
91
+
92
+ el = document.getElementById( "labelSons" );
93
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
94
+
95
+ el = document.getElementById( "sonChoisi" );
96
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
97
+
98
+ el = document.getElementById( "buttonEcouter" );
99
+ if (DAWON) {
100
+ el.style.display = "inline";
101
+ //audioInit.play();
102
+ vibration([2000,30,2000]);
103
+ } else {
104
+ //listenMachine.inputAndReact("stop");
105
+ el.style.display = "none";
106
+ }
107
+ el = document.getElementById( "buttonStart" );
108
+ if (DAWON) { el.style.display = "inline"; } else { el.style.display = "none"; }
109
+
110
+ if (DAWON) document.getElementById("MessageDuServeur").textContent = "";
111
+ else document.getElementById("MessageDuServeur").textContent = pseudo;
112
+
113
+ var elements = document.getElementsByClassName("breakAccueil");
114
+ for ( var i=0; i< elements.length; i++) {
115
+ if (DAWON) {
116
+ elements[i].style.display = "inline";
117
+ } else { elements[i].style.display = "none"; }
118
+ }
119
+
120
+ // Attention block et pas inline pour les div
121
+ el = document.getElementById( "listButton" );
122
+ if (DAWON) { el.style.display = "block"; } else { el.style.display = "none"; }
123
+
124
+ actionSurDAWON(); // N'est pas là dans la version hop, se déclenche sur DAWON
125
+
126
+ }
127
+ window.initialisation = initialisation;
128
+
129
+ function afficheAttente (duree, nomDuSon) {
130
+
131
+ var element;
132
+
133
+ element = document.getElementById("textProgressbar1");
134
+ if (element.textContent == '' ) {
135
+ element.textContent = nomDuSon;
136
+ element.style.display = "inline";
137
+
138
+ var el = document.getElementById("progressbar1");
139
+ el.style.display = "inline";
140
+ el.value = duree;
141
+ decreaseProgressBar(el);
142
+ return;
143
+ }
144
+
145
+ element = document.getElementById("textProgressbar2");
146
+ if (element.textContent == '' ) {
147
+ element.textContent = nomDuSon;
148
+ element.style.display = "inline";
149
+
150
+ var el = document.getElementById("progressbar2");
151
+ el.style.display = "inline";
152
+ el.value = duree;
153
+ decreaseProgressBar(el);
154
+ return;
155
+ }
156
+
157
+ element = document.getElementById("textProgressbar3");
158
+ if (element.textContent == '' ) {
159
+ element.textContent = nomDuSon;
160
+ element.style.display = "inline";
161
+
162
+ var el = document.getElementById("progressbar3");
163
+ el.style.display = "inline";
164
+ el.value = duree;
165
+ decreaseProgressBar(el);
166
+ return;
167
+ }
168
+ console.log("clientGolem.js: afficheAttente: PLUS DE PROGRESS BAR DISPO");
169
+ }
170
+
171
+ function decreaseProgressBar(progressBar) {
172
+ var compte = progressBar.value;
173
+ while ( compte > 0 ) {
174
+ compte--;
175
+ //console.log("Progress value:", compte);
176
+ setTimeout( function() { progressBar.value = progressBar.value -1 }, compte *1000 );
177
+ }
178
+ }
179
+
180
+ // Utiliser à partir du broadcast mais aussi du message WS.
181
+ // WS est utilisé en cas de reconnexion.
182
+ function actionSurDAWON() {
183
+
184
+ /* if ( DAWON == false ) {
185
+ initialisation();
186
+ return;
187
+ }*/
188
+ // Plusieurs configurations de menu possibles
189
+ if (DAWON == 1) arbre = arbre1;
190
+ else if (DAWON == 2) arbre = arbre2;
191
+ else arbre = arbre1; // Protection, inutile normalement
192
+ giveMenu(true);
193
+ //console.log("WS Recu : DAWON:", DAWON);
194
+ //initialisation(); //Pour le cas où le client recharge sa page en cours d'interaction
195
+
196
+ // Pour initaliser la liste complete des sons disponibles
197
+ var niv = [0,0,0];
198
+ selectListClips(niv);
199
+ }
200
+
201
+ function initWSSocket(port) {
202
+ //ws = new WebSocket( "ws://" + par.serverIPAddress + ":" + port + "/hop/serv", [ "bar", "foo" ] );
203
+ ws = new WebSocket("ws://" + ipConfig.serverIPAddress + ":" + ipConfig.websocketServeurPort); // NODE JS
204
+
205
+ console.log("clientgolem.js WS: ", "ws://" + ipConfig.serverIPAddress + ":" + ipConfig.websocketServeurPort );
206
+
207
+ ws.onopen = function( event ) {
208
+ msg.type = "startSpectateur";
209
+ msg.text = "client";
210
+ msg.id = id;
211
+ ws.send(JSON.stringify(msg));
212
+ };
213
+
214
+ //Traitement de la Réception sur le client
215
+ ws.onmessage = function( event ) {
216
+ var msgRecu = JSON.parse(event.data);
217
+ //console.log( "Client: received [%s]", event.data );
218
+ switch(msgRecu.type) {
219
+ case "message":
220
+ if (debug) console.log(msgRecu.text);
221
+ var element = document.getElementById("MessageDuServeur");
222
+ element.innerHTML = msgRecu.text;
223
+ break;
224
+
225
+ case "dureeAttente":
226
+ afficheAttente(msgRecu.text, msgRecu.son);
227
+ break;
228
+
229
+ case "DAWON":
230
+ //Permet de savoir si DAW est actif quand on recharge un client, le serveur envoie l'info à la connexion
231
+ // C'est le même scénario que quand on reçoit un broadcast de "DAWStatus".
232
+ DAWON = msgRecu.value;
233
+ actionSurDAWON();
234
+ break;
235
+
236
+ case "listClips":
237
+ //setOptionsInSelect(msgRecu.listClips); // Avec Select
238
+ setBoutonSons(msgRecu.listClips); // Avec boutons
239
+ listClips = msgRecu.listClips;
240
+ console.log("WS Recu : listClips:", listClips);
241
+ break;
242
+
243
+ case "demandeDeSonParPseudo": // Reçu par broadcast
244
+ if (debug) console.log("demandeDeSonParPseudo", msgRecu);
245
+ if ( msgRecu.text === ' ') {
246
+ document.getElementById("demandeDeSons").innerHTML = " ";
247
+ demandeDeSons = " ";
248
+ } else {
249
+ demandeDeSons = msgRecu.text + " <br> " + demandeDeSons;
250
+ // On tronque aussi la chaine de caractère
251
+ document.getElementById("demandeDeSons").innerHTML = demandeDeSons.slice(0, 100);
252
+ }
253
+ break;
254
+
255
+ case "infoPlayDAW": // Reçu par broadcast
256
+ if (debug) console.log("infoPlayDAW", msgRecu);
257
+ ajusteProgressBar(msgRecu.id, msgRecu.nom);
258
+ break;
259
+
260
+ default: console.log("Le Client reçoit un message inconnu", msgRecu );
261
+ }
262
+ };
263
+
264
+ ws.onerror = function (event) {
265
+ console.log( "clientgolem.js : received error on WS", ws.socket, " ", event );
266
+ }
267
+
268
+ // Mécanisme de reconnexion automatique si le serveur est tombé en hop
269
+ // Le service golemPing permet de vérifier le présence du serveur
270
+ ws.onclose = function( event ) {
271
+ /* (function loop() {
272
+ golemPing()
273
+ .post()
274
+ .then(function(){ // Si serveur présent
275
+ document.location=golem(pseudo);
276
+ },
277
+ function(){ // Si serveur absent
278
+ console.log( "reconnecting..." );
279
+ setTimeout( loop, 2000 );
280
+ } );
281
+ })();*/
282
+ }
283
+ }
284
+ window.initWSSocket = initWSSocket;
285
+
286
+ function sendPseudo( texte ) { // Le pseudo est aussi envoyé au moment de la lecture, mais Websocket n'en fait rien pour le moment.
287
+ msg.type = "DAWPseudo";
288
+ msg.pseudo= texte;
289
+ ws.send(JSON.stringify(msg));
290
+ }
291
+
292
+ function ajusteProgressBar(idRecu, nomRecu) {
293
+
294
+ if (debug) console.log("Reçu Texte Broadcast infoPlayDAW:", event.value );
295
+ if ( idRecu === id ){
296
+ document.getElementById("MessageDuServeur").textContent = " "; // Nettoyage
297
+ vibration(2000);
298
+ document.body.className = "inplay";
299
+ setTimeout( function() { document.body.className = "black-again" }, 1000 );
300
+
301
+ document.getElementById("buttonStart").style.backgroundColor = vert;
302
+ ++nombreSonsPossible;
303
+
304
+ // On efface la progress bar du son joué en utilisant l'affichage (on commence par 1, FIFO)
305
+ element = document.getElementById("textProgressbar1");
306
+ if (element.textContent == nomRecu) {
307
+ element.textContent = '';
308
+ element.style.display = "none";
309
+ document.getElementById("progressbar1").style.display = "none";
310
+ return;
311
+ }
312
+
313
+ element = document.getElementById("textProgressbar2");
314
+ if (element.textContent == nomRecu) {
315
+ element.textContent = '';
316
+ element.style.display = "none";
317
+ document.getElementById("progressbar2").style.display = "none";
318
+ return;
319
+ }
320
+
321
+ element = document.getElementById("textProgressbar3");
322
+ if (element.textContent == nomRecu) {
323
+ element.textContent = '';
324
+ element.style.display = "none";
325
+ document.getElementById("progressbar3").style.display = "none";
326
+ return;
327
+ }
328
+ console.log("clientGolem.js: afficheAttente: infoPlayDAW : PAS DE PROGRESS BAR ", event.value);
329
+ }
330
+ }
331
+
332
+ // Gestion de la fermeture du browser
333
+ window.onbeforeunload = function () {
334
+ msg.type = "closeSpectateur";
335
+ msg.text = "DISCONNECT_SPECTATEUR";
336
+ msg.pseudo = pseudo;
337
+ ws.send(JSON.stringify(msg));
338
+ ws.close();
339
+ }
340
+
341
+ //========== Controle des CLIPS =================================
342
+ function selectListClips(niveaux) { // golemV2
343
+ msg.type = "DAWSelectListClips";
344
+ msg.niveaux = niveaux;
345
+ ws.send(JSON.stringify(msg));
346
+ }
347
+
348
+ function selectClip(element) {
349
+ var idx=element.selectedIndex;
350
+ var val=element.options[idx].value;
351
+ var content=element.options[idx].innerHTML;
352
+ document.getElementById("sonChoisi").innerHTML = content;
353
+ indexChoisi = idx;
354
+ if (debug) console.log("clientgolem.js: selectClip: index", idx, ": Clip: " , listClips[idx]);
355
+
356
+ var nomComplet = "../sounds/" + listClips[idx][4] + ".mp3";
357
+ console.log("Soundfile recu :", nomComplet);
358
+ src = new Audio(nomComplet);
359
+
360
+ }
361
+ exports.selectClip = selectClip;
362
+
363
+ // Demande au serveur de lancer le clip
364
+ function startClip() {
365
+
366
+ if (indexChoisi == -1) return -1; // Protection sur un choix sans selection au départ
367
+
368
+ if (nombreSonsPossible < 1 ) {
369
+ document.getElementById("MessageDuServeur").textContent = "Vous avez dejà demandé 3 sons.";
370
+ return -1;
371
+ }
372
+ --nombreSonsPossible;
373
+ msg.type = "DAWStartClip";
374
+ msg.clipChoisi = listClips[indexChoisi];
375
+ msg.pseudo = pseudo;
376
+ ws.send(JSON.stringify(msg));
377
+
378
+ document.getElementById("buttonStart").style.backgroundColor = violet; // '#797bbf'
379
+ vibration(200);
380
+ }
381
+ window.startClip = startClip;
382
+
383
+ // Ecoute en local
384
+ function startListenClip() {
385
+ document.getElementById( "buttonEcouter").style.display = "none";
386
+ document.getElementById( "buttonStop").style.display = "inline";
387
+ src.play();
388
+ }
389
+ window.startListenClip = startListenClip;
390
+
391
+ // Arret de l'écoute en local
392
+ function stopListenClip() {
393
+ document.getElementById( "buttonEcouter").style.display = "inline";
394
+ document.getElementById( "buttonStop").style.display = "none";
395
+ src.pause();
396
+ }
397
+ window.stopListenClip = stopListenClip;
398
+
399
+ // Pour flasher le smartphone ====================================
400
+ function bg() {
401
+ document.body.className = "inplay";
402
+ setTimeout( function() { document.body.className = "black-again" }, 10 );
403
+ }
404
+ exports.bg = bg
405
+
406
+ //========= Automate Buttons de sélection des sons ===============
407
+ var niveau = 0;
408
+ var position = [-1,-1,-1]; // C'est la mémoire des positions cliquées dans les différents niveaux, l'index de cette array est le niveau
409
+ // Ceci sert à naviguer dans l'arborescence des menus et à choisir les clips via une conversion simple.
410
+ function clickButton(val) {
411
+
412
+ console.log("Avant le click", position, niveau);
413
+
414
+ if (val != 4 ) { // Pas de retour
415
+ if ( niveau < par.nombreDeNiveaux ) { // < 3 => On se limite à passer au niveau 3, < 2 => se limte au niveau 2 (voir giveMenu en concordance)
416
+ position[niveau] = val - 1;// Les boutons vont de 1 à 3, alors que position[] va de 0 à 2
417
+ niveau++;
418
+ // Affichage du retour
419
+ el = document.getElementById( "buttonRetour" );
420
+ el.style.display = "inline";
421
+ }
422
+ }
423
+ else {
424
+ if ( niveau > 0) { // Pas en haut en entrant
425
+ position[niveau - 1] = -1; // Pour oublier le niveau en cours.
426
+ niveau--;
427
+ }
428
+ if ( niveau == 0 ){ // On est en haut
429
+ position[niveau] = -1;
430
+ if (debug) console.log("clientGolem.js: retour au niveau precedent en haut de l'arborescence:");
431
+ // Pour faire disparaitre le bouton retour quand on est en haut de l'arbre
432
+ el = document.getElementById( "buttonRetour" );
433
+ el.style.display = "none";
434
+ }
435
+ }
436
+ console.log("Apres le click", position, niveau);
437
+
438
+ giveMenu(false);
439
+ convertPosInNiv();
440
+ return;
441
+ }
442
+ window.clickButton =clickButton;
443
+
444
+ // Pour le fonctionnement par bouton plutôt que select, PB en cours sur scroll
445
+ // Les clips sont des lignes de la table des commandes [4] -> nom du fichier, [3] -> nom du son
446
+ function selectClipBouton(id) {
447
+
448
+ document.getElementById("sonChoisi").innerHTML = listClips[id][3];
449
+ indexChoisi = id;
450
+
451
+ var nomComplet = "../sounds/" + listClips[id][4] + ".mp3";
452
+ console.log("Soundfile recu :", nomComplet);
453
+ src = new Audio(nomComplet);
454
+ }
455
+ window.selectClipBouton = selectClipBouton;
456
+
457
+ function setBoutonSons(listClips) {
458
+ var place = document.getElementById("listBoutonsSons");
459
+ var styleBouton;
460
+
461
+ while (place.firstChild) {
462
+ place.removeChild(place.firstChild);
463
+ }
464
+
465
+ for(i=0;i< listClips.length ;i++){
466
+ var bouton = document.createElement("button");
467
+ bouton.id = i;
468
+ // Les clips sont des lignes de la table des commandes [3] -> nom du son
469
+ bouton.innerHTML = listClips[i][3];
470
+
471
+ styleBouton = "boutonsSons ";
472
+
473
+ // !! Attention ça fonctionne avec deux niveaux, ce sera différent avec 3
474
+ // A completer donc. listClips[i][6], 7 et 8 correspondent aux valeurs par niveaux dans le fichier de config
475
+ if (position[2] > -1) { styleBouton += "boutonsSons" ;}
476
+ else if (position[1] > -1) { styleBouton += "boutonsSons" + listClips[i][7];}
477
+ else if (position[0] > -1) { styleBouton += "boutonsSons" + listClips[i][7];}
478
+ else { styleBouton += "boutonsSons" + listClips[i][6];}
479
+
480
+ bouton.setAttribute("class", styleBouton);
481
+ bouton.addEventListener("click", function(event) { window.selectClipBouton(this.id); });
482
+ place.appendChild(bouton);
483
+ }
484
+ }
485
+
486
+ var arbre1 = [
487
+ [ // N0
488
+ "percu", "voix", "ambiance"
489
+ ],
490
+ [ // N1
491
+ ["berlin", "acoustique", "house" ],
492
+ ["gentil", "mechant", "hebreu"],
493
+ ["planant","agressif","mystere"]
494
+ ],
495
+ [ // N2
496
+ [["afrique", "inde", "asie"],["house","minimale","techno"],["classique", "jazz", "rock"]],
497
+ [["corde","cuivre","bois"],["chant","parler","bruitvoix"],["synthe","piano","orgue"]],
498
+ [["aérien","aquatique","terrien"],["rocher","distors","explosif"],["brume","nuit","suspens"]]
499
+ ]
500
+ ]
501
+
502
+ var arbre2 = [
503
+ [ // N0
504
+ "ensemble", "solos", "ambiance"
505
+ ],
506
+ [ // N1
507
+ ["inde", "afrique", "Bronx" ],
508
+ ["inde", "techno", "djembe"],
509
+ ["leger","lourd","acoustique"]
510
+ ],
511
+ [ // N2
512
+ [["afrique", "inde", "asie"],["house","minimale","techno"],["classique", "jazz", "rock"]],
513
+ [["corde","cuivre","bois"],["chant","parler","bruitvoix"],["synthe","piano","orgue"]],
514
+ [["aérien","aquatique","terrien"],["rocher","distors","explosif"],["brume","nuit","suspens"]]
515
+ ]
516
+ ]
517
+
518
+
519
+ function convertPosInNiv() { // Pour établir le lien entre les menus et le mécanisme de selection des clips.
520
+ var niv = [0,0,0];
521
+ niv[0] = position[0]+1; // Niveau 1 dans la liste des clips
522
+ niv[1] = position[1]+1; // Niveau 2
523
+ niv[2] = position[2]+1; // Niveau 3
524
+
525
+ selectListClips(niv);
526
+ }
527
+
528
+ // Fabrication des textes des boutons en fonction de la table position
529
+ function giveMenu(init) {
530
+ var menu;
531
+ var label = ' ';
532
+
533
+ if (position[0] != -1) label = arbre[0][position[0]];
534
+ if (position[1] != -1) label = label + "/"+ arbre[1][position[0]][position[1]];
535
+ if (position[2] != -1) label = labet + "/"+ arbre[2][position[0]][position[1]][position[2]];
536
+ document.getElementById("labelSons").textContent = label;
537
+
538
+ if(init) {
539
+ menu = arbre[0]; // N0
540
+ document.getElementById("buttonType1").textContent = menu[0];
541
+ document.getElementById("buttonType2").textContent = menu[1];
542
+ document.getElementById("buttonType3").textContent = menu[2];
543
+
544
+ return;
545
+ }
546
+
547
+ else if (par.nombreDeNiveaux == 3) {
548
+ if (position[2] >= 0) { // On est au bout de l'arbre, donc on n'affiche plus rien
549
+ document.getElementById("buttonType1").style.display = "none";
550
+ document.getElementById("buttonType2").style.display = "none";
551
+ document.getElementById("buttonType3").style.display = "none";
552
+ return undefined;
553
+ }
554
+ else if (position[1] >= 0 ) { menu = arbre[2][position[0]][position[1]];} // N2
555
+ else if (position[0] >= 0 ) { menu = arbre[1][position[0]];} // N1
556
+ else menu = arbre[0]; // N0
557
+ }
558
+ else if (par.nombreDeNiveaux == 2) {
559
+ if (position[1] >= 0) { // On est au bout de l'arbre, donc on n'affiche plus rien
560
+ document.getElementById("buttonType1").style.display = "none";
561
+ document.getElementById("buttonType2").style.display = "none";
562
+ document.getElementById("buttonType3").style.display = "none";
563
+ return undefined;
564
+ }
565
+ else if (position[0] >= 0) { menu = arbre[1][position[0]];} // N1
566
+ else menu = arbre[0]; // N0
567
+ }
568
+ else if (par.nombreDeNiveaux == 1) {
569
+ if (position[0] >= 0) { // On est au bout de l'arbre, donc on n'affiche plus rien
570
+ document.getElementById("buttonType1").style.display = "none";
571
+ document.getElementById("buttonType2").style.display = "none";
572
+ document.getElementById("buttonType3").style.display = "none";
573
+ return undefined;
574
+ }
575
+ else if (position[0] >= 0) { menu = arbre[1][position[0]];} // N1
576
+ else menu = arbre[0]; // N0
577
+ }
578
+ else {
579
+ menu = arbre[0]; // N0
580
+ }
581
+
582
+ if(menu != undefined) {
583
+ document.getElementById("buttonType1").style.display = "inline";
584
+ document.getElementById("buttonType2").style.display = "inline";
585
+ document.getElementById("buttonType3").style.display = "inline";
586
+
587
+ document.getElementById("buttonType1").textContent = menu[0];
588
+ document.getElementById("buttonType2").textContent = menu[1];
589
+ document.getElementById("buttonType3").textContent = menu[2];
590
+
591
+ }
592
+ return menu;
593
+ }
594
+
595
+