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,536 @@
1
+ /**
2
+ * @fileOverview
3
+ * Controle de la matrice des possibles
4
+ * entre groupe de sons et groupe de clients
5
+ *
6
+ * browserify .\clientcontroleur.js -o .\controleurbundle.js
7
+ * sur Mac
8
+ * browserify ./clientcontroleur.js -o ./controleurbundle.js
9
+ *
10
+ * @copyright (C) 2022-2025 Bertrand Petit-Hédelin
11
+ *
12
+ * This program is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * any later version.
16
+ *
17
+ * This program is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU General Public License
23
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
24
+ *
25
+ * @version 1.4
26
+ * @author Bertrand Petit-Hédelin <bertrand@hedelin.fr>
27
+ */
28
+ "use strict"
29
+
30
+ var par;
31
+ var ipConfig = require('../../serveur/ipConfig');
32
+
33
+ var port;
34
+ var ws;
35
+ var id = Math.floor((Math.random() * 1000000) + 1); // Pour identifier le client;
36
+
37
+ var matricePad;
38
+
39
+ var nbeLignesPad;
40
+ var nbeColonesPad;
41
+ var etatScrutateurs = [];
42
+
43
+ var bleu = "#008CBA";
44
+ var rouge = '#CF1919';
45
+ var vert = "#4CAF50";
46
+ var marron = '#666633';
47
+ var violet = '#797bbf';
48
+ var orange = '#b3712d';
49
+
50
+ var debug = false;
51
+ var debug1 = true;
52
+
53
+ var DAWTableEnCours = 0;
54
+ var automateEncours = true;
55
+ var serverHostname;
56
+ // Autres déclarations
57
+
58
+ // On met des valeurs pas defaut, mais ce n'est pas nécessaire.
59
+ const msg = { type: "configuration" };
60
+
61
+ const COLORS = {
62
+ BLEU: "padBoutonBleu",
63
+ DEFAULT: "padBouton",
64
+ };
65
+
66
+ // Cette fonction est activée à la demande de chaque client sequenceur
67
+ // Le client séquenceur peut envoyer cette ordre de deux façon:
68
+ // - clic sur erase par le client sequenceur
69
+ // - réception par le client séquenceur d'un broadcast 'resetSequenceur' émis par websocketServeur lorsqu'il reçoit une demande du controleur:
70
+ // controleur ---- ws "resetSequenceur" ---> websocketserveur ----- broadcast "resetSequenceur" ----> clientsequenceur ---------- ws vers Processing "erasePatern" -----> Processing vide
71
+ // C'est un montage compliqué mais Processing ne reçoit pas les broadcast de hop.
72
+ function resetSequenceur() {
73
+ ws.send(JSON.stringify({ type: "resetSequenceur" }));
74
+ }
75
+ window.resetSequenceur = resetSequenceur;
76
+
77
+ function creationPad() {
78
+
79
+ const place = document.getElementById("listBoutonsLiens");
80
+ let compteurBouton = 0;
81
+
82
+ // On vide le PAD
83
+ place.innerHTML = '';
84
+
85
+ // Première ligne
86
+ var em = document.createElement("a");
87
+ em.setAttribute("class", "texteSon");
88
+ place.appendChild(em);
89
+ em.innerHTML = "-";
90
+
91
+ for (let j = 0; j < nbeColonesPad; j++) {
92
+ var em = document.createElement("button");
93
+ em.dataset.colone = j;
94
+ em.setAttribute("class", "numColone");
95
+ em.addEventListener("click", function (event) { clickColoneBouton(this.dataset.colone); });
96
+ place.appendChild(em);
97
+ em.innerHTML = j;
98
+ }
99
+
100
+ place.appendChild(document.createElement("br"));
101
+
102
+ // Le PAD
103
+ for (let i = 0; i < nbeLignesPad; i++) {
104
+ const em = document.createElement("a");
105
+ em.setAttribute("class", "texteSon");
106
+ place.appendChild(em);
107
+ em.innerHTML = i;
108
+
109
+ for (let j = 0; j < nbeColonesPad; j++) {
110
+ const bouton = document.createElement("button");
111
+ bouton.id = "padBouton" + compteurBouton;
112
+ compteurBouton++;
113
+ bouton.dataset.ligne = i;
114
+ bouton.dataset.colone = j;
115
+
116
+ bouton.setAttribute("class", "padBouton");
117
+ bouton.addEventListener("click", () => clickPadBouton(bouton.id));
118
+ place.appendChild(bouton);
119
+ }
120
+ place.appendChild(document.createElement("br"));
121
+ }
122
+
123
+ // Etat des scrutateurs
124
+ etatScrutateurs = Array(nbeColonesPad).fill(0);
125
+ const scrutHeader = document.createElement("a");
126
+ scrutHeader.className = "texteSon";
127
+ scrutHeader.innerHTML = "-";
128
+ place.appendChild(scrutHeader);
129
+
130
+ for (let j = 0; j < nbeColonesPad; j++) {
131
+ const em = document.createElement("button");
132
+ em.setAttribute("class", "etatScrut");
133
+ em.setAttribute("id", "etatScrut" + j);
134
+ place.appendChild(em);
135
+ em.innerHTML = "-";
136
+ }
137
+ place.appendChild(document.createElement("br"));
138
+ }
139
+
140
+ function setPadButton(son, groupe, status) {
141
+ // Traite une colone complète
142
+ if (groupe === 255) {
143
+ let id = parseInt(son);
144
+ for (let j = 0; j < nbeLignesPad; j++) {
145
+ const button = document.getElementById(`padBouton${id}`);
146
+ if (!button) return console.error("ERR setAllPad: boutton undefined", id);
147
+ button.className = status ? COLORS.BLEU : COLORS.DEFAULT;
148
+ id += nbeColonesPad;
149
+ }
150
+ return;
151
+ }
152
+
153
+ if (groupe >= par.nbeDeGroupesClients || son >= nbeColonesPad) {
154
+ return console.error("ERR: setPadButton out of bounds", { son, groupe });
155
+ }
156
+
157
+ const index = parseInt(son) + groupe * nbeColonesPad;
158
+ const idBouton = "padBouton" + index;
159
+ if (debug) console.log("clientcontroleur:setPadButton:idBouton", idBouton);
160
+ const leBouton = document.getElementById(idBouton);
161
+ leBouton.className = status ? COLORS.BLEU : COLORS.DEFAULT;
162
+ }
163
+
164
+ function clickColoneBouton(colone) {
165
+ let id = parseInt(colone);
166
+ let status;
167
+
168
+ if (debug) console.log("clickColoneBouton: bouton:", id, " nbeColonesPad:", nbeColonesPad);
169
+
170
+ for (let j = 0; j < nbeLignesPad; j++) {
171
+ const bouton = document.getElementById("padBouton" + id.toString());
172
+
173
+ if (bouton == undefined) {
174
+ console.log("ERR setAlclickColoneBouton: bouton undefined", id);
175
+ return;
176
+ }
177
+
178
+ if (bouton.getAttribute("class") == "padBoutonBleu") { // Désactive le lien entre groupes
179
+ bouton.setAttribute("class", "padBouton");
180
+ status = false;
181
+
182
+ } else { // Active le lien
183
+ bouton.setAttribute("class", "padBoutonBleu");
184
+ status = true;
185
+ }
186
+
187
+ ws.send(JSON.stringify({
188
+ type: "putInMatriceDesPossibles",
189
+ clients: j,
190
+ sons: colone,
191
+ status
192
+ }));
193
+
194
+ id += nbeColonesPad;
195
+ }
196
+ }
197
+ window.clickColoneBouton = clickColoneBouton;
198
+
199
+ // Quand on clique un bouton (X,Y)
200
+ function clickPadBouton(padBoutonId) {
201
+ const button = document.getElementById(padBoutonId);
202
+ const isActive = button.className === COLORS.BLEU;
203
+ const status = !isActive;
204
+ button.className = status ? COLORS.BLEU : COLORS.DEFAULT;
205
+
206
+ ws.send(JSON.stringify({
207
+ type: "putInMatriceDesPossibles",
208
+ clients: button.dataset.ligne,
209
+ sons: button.dataset.colone,
210
+ status
211
+ }));
212
+ }
213
+ exports.clickPadBouton = clickPadBouton;
214
+
215
+ function resetAllPad() {
216
+ if (automateEncours) {
217
+ let id = 0;
218
+ for (let j = 0; j < nbeLignesPad; j++) {
219
+ for (let i = 0; i < nbeColonesPad; i++) {
220
+ const bouton = document.getElementById("padBouton" + id.toString());
221
+ if (bouton == undefined) {
222
+ console.log("setAllPad:undefined", colone);
223
+ return;
224
+ }
225
+ bouton.setAttribute("class", "padBouton");
226
+ id++;
227
+ }
228
+ }
229
+
230
+ const msg = {
231
+ type: "ResetMatriceDesPossibles",
232
+ };
233
+ ws.send(JSON.stringify(msg));
234
+ } else {
235
+ alert("WARNING: Nothing to reset")
236
+ }
237
+ }
238
+ window.resetAllPad = resetAllPad;
239
+
240
+ function cleanPad() {
241
+ if (automateEncours) {
242
+ var id = 0;
243
+ for (var j = 0; j < nbeLignesPad; j++) {
244
+ for (var i = 0; i < nbeColonesPad; i++) {
245
+ var bouton = document.getElementById("padBouton" + id.toString());
246
+ if (bouton == undefined) {
247
+ console.log("setAllPad:undefined", colone);
248
+ return;
249
+ }
250
+ bouton.setAttribute("class", "padBouton");
251
+ id++;
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ function setAllPad() {
258
+ if (automateEncours) {
259
+ var id = 0;
260
+ for (var j = 0; j < nbeLignesPad; j++) {
261
+ for (var i = 0; i < nbeColonesPad; i++) {
262
+ var bouton = document.getElementById("padBouton" + id.toString());
263
+ if (bouton == undefined) {
264
+ console.log("setAllPad:undefined", colone);
265
+ return;
266
+ }
267
+ bouton.setAttribute("class", "padBoutonBleu");
268
+ id++;
269
+ }
270
+ }
271
+ var msg = {
272
+ type: "setAllMatriceDesPossibles",
273
+ };
274
+ ws.send(JSON.stringify(msg));
275
+ } else {
276
+ alert("WARNING: Nothing to set ALL")
277
+ }
278
+ }
279
+ window.setAllPad = setAllPad;
280
+
281
+ function cleanQueues() {
282
+ var msg = {
283
+ type: "cleanQueues",
284
+ };
285
+ ws.send(JSON.stringify(msg));
286
+ }
287
+ window.cleanQueues = cleanQueues;
288
+
289
+ //****** Lancement des opérations et fermeture *********
290
+
291
+ function initialisation() {
292
+
293
+ // Attention: si on envoie un message ici sur la websocket immédiatament après la reconnexion.
294
+ // Il se peut que la socket ne soit pas encore prête. Il y a des choses à faire avec readyState.
295
+
296
+ document.getElementById("MessageDuServeur").style.display = "inline";
297
+
298
+ // Attention block et pas inline pour les div
299
+ var el = document.getElementById("listBoutonsLiens");
300
+ el.style.display = "block";
301
+
302
+ initServerListener();
303
+
304
+ setInterval(function () {
305
+ getNbeDeSpectateurs();
306
+ }, 1000);
307
+ }
308
+ exports.initialisation = initialisation;
309
+
310
+ function getNbeDeSpectateurs() {
311
+ var msg = {
312
+ type: "getGroupesClientLength",
313
+ };
314
+ ws.send(JSON.stringify(msg));
315
+ }
316
+
317
+ function initControleur(serverHostname) {
318
+ initWSSocket(serverHostname);
319
+ initialisation();
320
+ }
321
+ window.initControleur = initControleur;
322
+
323
+ // Gestion de la fermeture du browser
324
+ window.onbeforeunload = function () {
325
+ msg.type = "closeSpectateur";
326
+ msg.text = "DISCONNECT_SPECTATEUR";
327
+ ws.send(JSON.stringify(msg));
328
+ ws.close();
329
+ }
330
+
331
+ function checkSession() {
332
+ msg.type = "checkSession";
333
+ ws.send(JSON.stringify(msg));
334
+ }
335
+ window.checkSession = checkSession;
336
+
337
+ /* function loadSession() {
338
+ var reponse = window.prompt("Descriptor file");
339
+ if (reponse === undefined || reponse === '') return;
340
+
341
+ var fileName;
342
+ fileName = par.sequencerFilePath + reponse + '.csv';
343
+ if (debug1) console.log("loadSession:", fileName);
344
+ msg.type = "loadSession";
345
+ msg.fileName = fileName;
346
+ ws.send(JSON.stringify(msg));
347
+ }
348
+ window.loadSession = loadSession; */
349
+
350
+ /* function saveSession() {
351
+ var reponse = window.prompt("Descriptor file");
352
+ if (reponse === undefined || reponse === '') return;
353
+
354
+ var fileName;
355
+ fileName = par.sequencerFilePath + reponse + '.csv';
356
+ if (debug1) console.log("saveSession:", fileName);
357
+ msg.type = "saveSession";
358
+ msg.fileName = fileName;
359
+ ws.send(JSON.stringify(msg));
360
+ }
361
+ window.saveSession = saveSession; */
362
+
363
+ //************ WEBSOCKET et listener BROADCAST ******************************
364
+ function initWSSocket(host) {
365
+ var toggle = true;
366
+ ws = new WebSocket("ws://" + host + ":" + ipConfig.websocketServeurPort);
367
+
368
+ if (debug1) console.log("clientcontroleur.js ws://" + host + ":" + ipConfig.websocketServeurPort);
369
+ ws.onopen = function (event) {
370
+ msg.type = "startSpectateur";
371
+ msg.text = "controleur";
372
+ msg.id = id;
373
+ console.log("ID sent to server:", msg.id);
374
+ ws.send(JSON.stringify(msg));
375
+ };
376
+
377
+ //Traitement de la Réception sur le client
378
+ ws.onmessage = function (event) {
379
+ //console.log( "Client: received [%s]", event.data );
380
+
381
+ var msgRecu = JSON.parse(event.data);
382
+ if (debug) console.log("message reçu: ", msgRecu.type);
383
+
384
+ switch (msgRecu.type) {
385
+ case "DAWTableNotReady": // Si la table n'est pas chargée on garde le bouton start
386
+ alert(msgRecu.text);
387
+ document.getElementById("buttonStartAutomate").style.display = "inline";
388
+ document.getElementById("buttonStopAutomate").style.display = "none";
389
+ break;
390
+
391
+ case "etatDeLaFileAttente":
392
+ if (debug) console.log("etatDeLaFileAttente:", msgRecu);
393
+
394
+ var texteAffiche = ' ';
395
+
396
+ if (msgRecu.value === undefined) {
397
+ console.log("WARN: clientcontroleur: etatDeLaFileAttente undefined");
398
+ break;
399
+ }
400
+ for (var i = 0; i < msgRecu.value.length; i++) {
401
+ if (msgRecu.value[i].length !== 0) {
402
+ texteAffiche += "[" + i + ":" + msgRecu.value[i][1] + "] ";
403
+ } else {
404
+ texteAffiche += " ";
405
+ }
406
+ }
407
+
408
+ document.getElementById("FileAttente").innerHTML = texteAffiche;
409
+ break;
410
+
411
+ case "groupesClientLength":
412
+ if (debug) console.log("groupesClientLength:", msgRecu.longueurs);
413
+
414
+ var groupesDisplay = " ";
415
+ for (var i = 0; i < msgRecu.longueurs.length; i++) {
416
+ groupesDisplay += "[";
417
+ groupesDisplay = groupesDisplay + msgRecu.longueurs[i] + "]";
418
+ }
419
+ document.getElementById("tailleDesGroupes").innerHTML = groupesDisplay;
420
+ break;
421
+
422
+ case "lesFilesDattente":
423
+ break;
424
+
425
+ case "sessionLoaded":
426
+ document.getElementById("MessageDuServeur").innerHTML = "Session loaded :" + msgRecu.fileName;
427
+ break;
428
+
429
+ case "message":
430
+ if (debug) console.log(msgRecu.text);
431
+ break;
432
+
433
+ case "resetMatriceDesPossibles":
434
+ cleanPad();
435
+ break;
436
+
437
+ case "setInMatrix":
438
+ setPadButton(msgRecu.son, msgRecu.groupe, msgRecu.status);
439
+ break;
440
+
441
+ case "setControlerPadSize":
442
+ if (debug1) console.log("setControlerPadSize:", msgRecu.nbeDeGroupesClients, msgRecu.nbeDeGroupesSons);
443
+ nbeLignesPad = msgRecu.nbeDeGroupesClients;
444
+ nbeColonesPad = msgRecu.nbeDeGroupesSons + 1; // Conversion d'un index en nombre de colone
445
+ // Création du pad
446
+ creationPad();
447
+ //resetAllPad();
448
+ break;
449
+
450
+ case "setTickAutomate":
451
+ document.getElementById("MessageDuServeur").innerHTML = "Tick:" + msgRecu.tick;
452
+ break;
453
+
454
+ case "skiniParametres":
455
+ if (debug1) console.log("skiniParametres:", msgRecu.value);
456
+ par = msgRecu.value;
457
+ break;
458
+
459
+ case "synchroSkini":
460
+ if (debug) console.log("Reçu synchro Skini");
461
+ if (toggle) {
462
+ document.getElementById('synchro').style.display = "none";
463
+ toggle = false;
464
+ } else {
465
+ document.getElementById('synchro').style.display = "inline";
466
+ toggle = true;
467
+ }
468
+ break;
469
+
470
+ default: if (debug1) console.log("Le Client reçoit un message inconnu", msgRecu);
471
+ }
472
+ };
473
+
474
+ ws.onerror = function (event) {
475
+ if (debug) console.log("clientcontroleur.js : received error on WS", ws.socket, " ", event);
476
+ }
477
+
478
+ // Mécanisme de reconnexion automatique si le serveur est tombé.
479
+ // Le service Ping permet de vérifier le présence du serveur
480
+ ws.onclose = function (event) {
481
+ if (debug1) console.log("clientcontroleur.js : ON CLOSE");
482
+ }
483
+ }
484
+
485
+
486
+ function initServerListener() {
487
+
488
+ /* server.addEventListener('etatDeLaFileAttente', function( event ) {
489
+ var texteAffiche = ' ';
490
+ //if (debug) console.log("Reçu Broadcast:", event.value );
491
+ for (var i = 0; i < event.value.length ; i++ ) {
492
+ texteAffiche += "[" + event.value[i][0] + ":" + event.value[i][1] + "] " ;
493
+ }
494
+ document.getElementById("FileAttente").innerHTML =texteAffiche;
495
+ });
496
+
497
+ var texteScrutateur = '';
498
+
499
+ server.addEventListener('propositionScrutateur', function( event ) {
500
+ if (debug) console.log("Reçu Broadcast scrutateur:", event.value );
501
+
502
+ texteScrutateur = "[" + event.value.pseudo + ":" + event.value.numero + ":" + event.value.value + "] " + texteScrutateur;
503
+ texteScrutateur = texteScrutateur.slice(0,50);
504
+ document.getElementById("propositionScrutateur").innerHTML = texteScrutateur;
505
+
506
+ // Affichage des compteurs de demandes
507
+ if ( event.value.value == '+') {
508
+ etatScrutateurs[parseInt(event.value.numero)] += 1;
509
+ } else if ( event.value.value == '-') {
510
+ etatScrutateurs[parseInt(event.value.numero)] -= 1;
511
+ }
512
+ document.getElementById("etatScrut" + event.value.numero).innerHTML = etatScrutateurs[event.value.numero];
513
+ document.getElementById("propositionScrutateur").innerHTML = texteScrutateur;
514
+
515
+ // Affichage de l'activation ou désactivation de la matrice des possibles
516
+ // On traite le colones et donc pas la groupes d'utilisateurs
517
+ var groupeON = false;
518
+ if ( event.value.value == '+') groupeON = true;
519
+
520
+ var id = parseInt( event.value.numero);
521
+
522
+ for(var j=0; j < nbeLignesPad ; j++){
523
+ var bouton = document.getElementById("padBouton" + id.toString());
524
+ if ( bouton == undefined ) {
525
+ console.log("ERR listener: propositionScrutateur: bouton undefined", id);
526
+ return;
527
+ }
528
+ if ( !groupeON ) { // Désactive le lien entre groupes
529
+ bouton.setAttribute("class", "padBouton");
530
+ } else { // Active le lien
531
+ bouton.setAttribute("class", "padBoutonBleu");
532
+ }
533
+ id += nbeColonesPad;
534
+ }
535
+ }); */
536
+ }