nodeskini 1.0.6 → 1.0.9

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.
@@ -2,7 +2,7 @@
2
2
  * @fileOverview OSC and Midi control
3
3
  * <BR> See: http://www.indiana.edu/~emusic/cntrlnumb.html,
4
4
  * http://www.ccarh.org/courses/253/handout/controllers/
5
- * @copyright (C) 2022-2024 Bertrand Petit-Hédelin
5
+ * @copyright (C) 2022-2026 Bertrand Petit-Hédelin
6
6
  *
7
7
  * This program is free software: you can redistribute it and/or modify
8
8
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
17
17
  * You should have received a copy of the GNU General Public License
18
18
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
19
19
  * @author Bertrand Petit-Hédelin <bertrand@hedelin.fr>
20
- * @version 1.4
20
+ * @version 1.5
21
21
  */
22
22
  "use strict"
23
23
  import { createRequire } from 'module';
@@ -159,7 +159,7 @@ export function sendOSCProcessing(message, val1, val2) {
159
159
  }
160
160
 
161
161
  /**
162
- * Send a note on through OSC
162
+ * Send a note on through OSC or MIDI
163
163
  * @param {number} bus
164
164
  * @param {number} channel
165
165
  * @param {number} note
@@ -178,6 +178,30 @@ export function sendNoteOn(bus, channel, note, velocity) {
178
178
  }
179
179
  };
180
180
 
181
+ /**
182
+ * Send a note on through OSC or MIDI to activate a clip
183
+ * @param {number} note
184
+ */
185
+ export function convertAndActivateClip(note){
186
+ let buf;
187
+
188
+ if (debug1) console.log("INFO: LogosOSCandMidiLocal : convertAndActivateClip: sending MIDI: " + note);
189
+ let channel = Math.floor(note / 127) + 1;
190
+ note = note % 127;
191
+ if (channel > 15) {
192
+ if (debug1) console.log("ERR: LogosOSCandMidiLocal : convertAndActivateClip: Nombre de canaux midi dépassé.");
193
+ return -1;
194
+ }
195
+
196
+ if (directMidi) {
197
+ midiOutput.sendMessage([144 + channel, note, 100]);
198
+ } else {
199
+ buf = osc.toBuffer({ address: "/noteOn" , args: [ par.busMidiAbleton, channel, note, 127 ] });
200
+ return udp.send(buf, 0, buf.length, par.outportForMIDI, par.remoteIPAddressSound,
201
+ function(err) { if (err !== null) console.log("ERR: logosOSCandMidi: convertAndActivateClip: Erreur udp send: ", err); });
202
+ }
203
+ };
204
+
181
205
  /**
182
206
  * Send a note off through OSC
183
207
  * @param {number} bus
@@ -649,7 +649,8 @@ export function cleanQueues() {
649
649
  messageLog.type = "VIDAGE FILES ATTENTES";
650
650
  logInfoDAW(messageLog);
651
651
  if (debug) console.log("controleDAW: cleanQueues");
652
- serv.broadcast(JSON.stringify({ type: "etatDeLaFileAttente", value: filesDattente }));
652
+ // Envoyer le même format que displayQueues() : un array vide car les files sont vidées
653
+ serv.broadcast(JSON.stringify({ type: "etatDeLaFileAttente", value: [] }));
653
654
  }
654
655
 
655
656
  /**
@@ -67,7 +67,7 @@ var midimix;
67
67
  var orchestration;
68
68
  var groupesClient;
69
69
  export var matriceDesPossibles;
70
- var timerDivision; // Nombre de pulses par tick, doit rester undefined si pas à jour par les automates
70
+ let timerDivision; // Nombre de pulses par tick, doit rester undefined si pas à jour par les automates
71
71
  var nbeDeGroupesSons = 0;
72
72
  var nombreDePatternsPossibleEnListe = [[1, 255]]; // init pour client memorySortable
73
73
 
@@ -81,6 +81,7 @@ var groupeName = "";
81
81
  // On créé ce fichier à partir du xml de Blockly
82
82
  var myReactOrchestration = "../myReact/orchestrationHH.mjs";
83
83
  var socketControleur;
84
+ var socketQueueViewer;
84
85
  var computeScorePolicy = 0;
85
86
  var computeScoreClass = 0;
86
87
 
@@ -341,6 +342,7 @@ export function setComputeScoreClass(scoreClass) {
341
342
  * @param {number} timer division
342
343
  */
343
344
  export function setTimerDivision(timer) {
345
+ if(debug1) console.log("INFO: groupecliensSons: setTimerDivision:", timer);
344
346
  timerDivision = timer;
345
347
  }
346
348
 
@@ -352,6 +354,14 @@ export function setSocketControleur(socket) {
352
354
  socketControleur = socket;
353
355
  }
354
356
 
357
+ /**
358
+ * Set the queueViewer socket
359
+ * @param {socket} queueViewer socket
360
+ */
361
+ export function setSocketQueueViewer(socket) {
362
+ socketQueueViewer = socket;
363
+ }
364
+
355
365
  /**
356
366
  * Call the reset of the rcoehstration matrix.
357
367
  */
@@ -490,7 +500,7 @@ export function informSelecteurOnMenuChange(groupe, sons, status) {
490
500
  }
491
501
 
492
502
  /**
493
- * To display the tick on the controler client.
503
+ * To display the tick on the controler and queueViewer clients.
494
504
  * @param {number} tick
495
505
  */
496
506
  export function setTickOnControler(tick) {
@@ -505,6 +515,19 @@ export function setTickOnControler(tick) {
505
515
  } else {
506
516
  if (debug) console.log("ERR: groupecliensSons: informControleur: socketControleur not ready;", socketControleur.readyState);
507
517
  }
518
+ }
519
+
520
+ // Send the tick to queueViewer.
521
+ if (socketQueueViewer !== undefined) {
522
+ if (socketQueueViewer.readyState == 1) {
523
+ try {
524
+ socketQueueViewer.send(JSON.stringify(message));
525
+ } catch (err) {
526
+ if (debug) console.log("ERR: groupecliensSons: send setTickAutomate to queueViewer", err);
527
+ }
528
+ } else {
529
+ if (debug) console.log("ERR: groupecliensSons: informControleur: socketControleur not ready;", socketControleur.readyState);
530
+ }
508
531
  }
509
532
  }
510
533
 
@@ -884,6 +907,7 @@ export async function makeOneAutomatePossibleMachine() {
884
907
  if (debug) console.log("groupeClientsSons.js: makeOneAutomatePossibleMachine", par.groupesDesSons);
885
908
 
886
909
  try {
910
+ //C'est l'import qui compile le code HH en machine HipHop.js
887
911
  const orchestration = await import(myReactOrchestration + '?foo=bar' + tempIndex);
888
912
  tempIndex++;
889
913
  orchestration.setServ(serv, DAW, this, oscMidiLocal, midimix);
@@ -891,7 +915,7 @@ export async function makeOneAutomatePossibleMachine() {
891
915
 
892
916
  makeSignalsListeners(machine);
893
917
 
894
- if (debug) console.log("------------- groupecliensSons: makeOneAutomatePossibleMachine:machine: ", machine);
918
+ if (debug) console.log("------------- groupecliensSons: makeOneAutomatePossibleMachine:par: ", par);
895
919
 
896
920
  return machine;
897
921
  } catch (err) {
@@ -19,6 +19,6 @@
19
19
  "outportProcessing": 10000,
20
20
  "outportLumiere": 7700,
21
21
  "inportLumiere": 9000,
22
- "sessionPath": "./pieces/opus/",
23
- "piecePath" : "./pieces/opus/"
22
+ "sessionPath": "./pieces/etudesHarmonie/",
23
+ "piecePath" : "./pieces/etudesHarmonie/"
24
24
  }
@@ -1,5 +1,5 @@
1
1
 
2
- // Generated by Skini: Wed Jan 07 2026 10:47:37 GMT+0100 (heure normale d’Europe centrale)
2
+ // Generated by Skini: Thu May 28 2026 10:24:15 GMT+0200 (heure d’été d’Europe centrale)
3
3
  "use strict"
4
4
 
5
5
  // A utiliser si Processing en passerelle
@@ -19,9 +19,9 @@ exports.english = true;
19
19
  Si ces valeurs ne sont pas données c'est celle qui
20
20
  sont dans le simulateur qui sont utilisées
21
21
  ************************************/
22
- exports.tempoMax = 2000; // En ms
23
- exports.tempoMin = 2200; // En ms
24
- exports.limiteDureeAttente = 2000; // En pulsations
22
+ exports.tempoMax = 3000; // En ms
23
+ exports.tempoMin = 2900; // En ms
24
+ exports.limiteDureeAttente = 33; // En pulsations
25
25
 
26
26
  /********************************************************
27
27
  AUTOMATE
@@ -36,7 +36,7 @@ exports.pulsationON = false;
36
36
  CHEMIN DES FICHIERS SONS MP3 pour les clients
37
37
  Nom du sous répartoire ./sounds/xxxx
38
38
  *************************************/
39
- exports.soundFilesPath1 = "opus4";
39
+ exports.soundFilesPath1 = "";
40
40
 
41
41
  /***************************************
42
42
  CHEMIN DES PARTITIONS DES PATTERNS ET CONFIG AVEC MUSICIENS
@@ -83,106 +83,58 @@ exports.synchroSkini = false;
83
83
  exports.timer = 500;
84
84
  exports.gameOSCSignals = false;
85
85
 
86
- exports.sensorOSC = true;
87
- exports.tempoSensorsInit = [100,100,100,100,100,100,20,20,20,20,20,20];
88
- exports.sensorsSensibilities = [200,200,200,200,200,200,200,200,200,200,200,199];
86
+ exports.sensorOSC = false;
87
+ exports.tempoSensorsInit = [0,0,0,0,0,0,0,0,0,0,0,0];
88
+ exports.sensorsSensibilities = [5,5,5,5,5,5,5,5,5,5,5,5];
89
89
 
90
90
  const groupesDesSons = [
91
- [ "saxo",1, "group",401,200,21,"#4CAF50",[],10 ],
92
- [ "nappeViolons",2, "group",100,500,20,"#4CAF50",[],1 ],
93
- [ "nappe2Violons",3, "group",100,600,20,"#797bbf",[],1 ],
94
- [ "Piano1Intro1",10, "tank",100,51,1,"#5F6262",[],1 ],
95
- [ "Piano1Intro2",11, "tank",,,1,"#5F6262",[], ],
96
- [ "Piano1Intro3",12, "tank",,,1,"#5F6262",[], ],
97
- [ "Piano1Intro4",13, "tank",,,1,"#5F6262",[], ],
98
- [ "Piano1Intro5",14, "tank",,,1,"#5F6262",[], ],
99
- [ "Piano1Intro6",15, "tank",,,1,"#5F6262",[], ],
100
- [ "Piano1Intro7",16, "tank",,,1,"#5F6262",[], ],
101
- [ "Piano1Milieu1",17, "tank",,,1,"#5F6262",[], ],
102
- [ "Piano1Milieu2",18, "tank",,,1,"#5F6262",[], ],
103
- [ "Piano1Milieu3",19, "tank",,,1,"#5F6262",[], ],
104
- [ "Piano1Milieu4",20, "tank",,,1,"#5F6262",[], ],
105
- [ "Piano1Milieu5",21, "tank",,,1,"#5F6262",[], ],
106
- [ "Piano1Milieu6",22, "tank",,,1,"#5F6262",[], ],
107
- [ "Piano1Milieu7",23, "tank",,,1,"#5F6262",[], ],
108
- [ "Piano1Fin1",24, "tank",,,1,"#5F6262",[], ],
109
- [ "Piano1Fin2",25, "tank",,,1,"#5F6262",[], ],
110
- [ "Piano1Fin3",26, "tank",,,1,"#5F6262",[], ],
111
- [ "Piano1Fin4",27, "tank",,,1,"#5F6262",[], ],
112
- [ "Piano1Fin5",28, "tank",,,1,"#5F6262",[], ],
113
- [ "Piano1Fin6",29, "tank",,,1,"#5F6262",[], ],
114
- [ "Piano1Fin7",30, "tank",,,1,"#5F6262",[], ],
115
- [ "SaxIntro1",31, "tank",400,51,2,"#5F6262",[],1 ],
116
- [ "SaxIntro2",32, "tank",,,2,"#5F6262",[], ],
117
- [ "SaxIntro3",33, "tank",,,2,"#5F6262",[], ],
118
- [ "SaxIntro4",34, "tank",,,2,"#5F6262",[], ],
119
- [ "SaxIntro5",35, "tank",,,2,"#5F6262",[], ],
120
- [ "SaxIntro6",36, "tank",,,2,"#5F6262",[], ],
121
- [ "SaxIntro7",37, "tank",,,2,"#5F6262",[], ],
122
- [ "SaxMilieu1",38, "tank",,,2,"#5F6262",[], ],
123
- [ "SaxMilieu2",39, "tank",,,2,"#5F6262",[], ],
124
- [ "SaxMilieu3",40, "tank",,,2,"#5F6262",[], ],
125
- [ "SaxMilieu4",41, "tank",,,2,"#5F6262",[], ],
126
- [ "SaxMilieu5",42, "tank",,,2,"#5F6262",[], ],
127
- [ "SaxMilieu6",43, "tank",,,2,"#5F6262",[], ],
128
- [ "SaxMilieu7",44, "tank",,,2,"#5F6262",[], ],
129
- [ "SaxFin1",45, "tank",,,2,"#5F6262",[], ],
130
- [ "SaxFin2",46, "tank",,,2,"#5F6262",[], ],
131
- [ "SaxFin3",47, "tank",,,2,"#5F6262",[], ],
132
- [ "SaxFin4",48, "tank",,,2,"#5F6262",[], ],
133
- [ "SaxFin5",49, "tank",,,2,"#5F6262",[], ],
134
- [ "SaxFin6",50, "tank",,,2,"#5F6262",[], ],
135
- [ "SaxFin7",51, "tank",,,2,"#5F6262",[], ],
136
- [ "BrassIntro1",52, "tank",700,51,3,"#039879",[],1 ],
137
- [ "BrassIntro2",53, "tank",,,3,"#039879",[], ],
138
- [ "BrassIntro3",54, "tank",,,3,"#039879",[], ],
139
- [ "BrassIntro4",55, "tank",,,3,"#039879",[], ],
140
- [ "BrassIntro5",56, "tank",,,3,"#039879",[], ],
141
- [ "BrassIntro6",57, "tank",,,3,"#039879",[], ],
142
- [ "BrassIntro7",58, "tank",,,3,"#039879",[], ],
143
- [ "BrassMilieu1",59, "tank",,,3,"#039879",[], ],
144
- [ "BrassMilieu2",60, "tank",,,3,"#039879",[], ],
145
- [ "BrassMilieu3",61, "tank",,,3,"#039879",[], ],
146
- [ "BrassMilieu4",62, "tank",,,3,"#039879",[], ],
147
- [ "BrassMilieu5",63, "tank",,,3,"#039879",[], ],
148
- [ "BrassMilieu6",64, "tank",,,3,"#039879",[], ],
149
- [ "BrassMilieu7",65, "tank",,,3,"#039879",[], ],
150
- [ "BrassFin1",66, "tank",,,3,"#039879",[], ],
151
- [ "BrassFin2",67, "tank",,,3,"#039879",[], ],
152
- [ "BrassFin3",68, "tank",,,3,"#039879",[], ],
153
- [ "BrassFin4",69, "tank",,,3,"#039879",[], ],
154
- [ "BrassFin5",70, "tank",,,3,"#039879",[], ],
155
- [ "BrassFin6",71, "tank",,,3,"#039879",[], ],
156
- [ "BrassFin7",72, "tank",,,3,"#039879",[], ],
157
- [ "Percu1",73, "tank",800,600,4,"#039879",[],1 ],
158
- [ "Percu2",74, "tank",,,4,"#039879",[], ],
159
- [ "Percu3",75, "tank",,,4,"#039879",[], ],
160
- [ "Percu4",76, "tank",,,4,"#039879",[], ],
161
- [ "Percu5",77, "tank",,,4,"#039879",[], ],
162
- [ "Percu6",78, "tank",,,4,"#039879",[], ],
163
- [ "Percu7",79, "tank",,,4,"#039879",[], ],
164
- [ "FluteIntro1",80, "tank",400,400,5,"#039879",[],1 ],
165
- [ "FluteIntro2",81, "tank",,,5,"#039879",[], ],
166
- [ "FluteIntro3",82, "tank",,,5,"#039879",[], ],
167
- [ "FluteIntro4",83, "tank",,,5,"#039879",[], ],
168
- [ "FluteIntro5",84, "tank",,,5,"#039879",[], ],
169
- [ "FluteIntro6",85, "tank",,,5,"#039879",[], ],
170
- [ "FluteIntro7",86, "tank",,,5,"#039879",[], ],
171
- [ "FluteMilieu1",87, "tank",,,5,"#039879",[], ],
172
- [ "FluteMilieu2",88, "tank",,,5,"#039879",[], ],
173
- [ "FluteMilieu3",89, "tank",,,5,"#039879",[], ],
174
- [ "FluteMilieu4",90, "tank",,,5,"#039879",[], ],
175
- [ "FluteMilieu5",91, "tank",,,5,"#039879",[], ],
176
- [ "FluteMilieu6",92, "tank",,,5,"#039879",[], ],
177
- [ "FluteMilieu7",93, "tank",,,5,"#039879",[], ],
178
- [ "FluteFin1",94, "tank",,,5,"#039879",[], ],
179
- [ "FluteFin2",95, "tank",,,5,"#039879",[], ],
180
- [ "FluteFin3",96, "tank",,,5,"#039879",[], ],
181
- [ "FluteFin4",97, "tank",,,5,"#039879",[], ],
182
- [ "FluteFin5",98, "tank",,,5,"#039879",[], ],
183
- [ "FluteFin6",99, "tank",,,5,"#039879",[], ],
184
- [ "FluteFin7",100, "tank",,,5,"#039879",[], ],
185
- [ "Flesh",110, "group",100,350,7,"#008CBA",[],1 ],
186
- [ "Massive",111, "group",100,400,7,"#008CBA",[],1 ],
91
+ [ "PianoC",0, "group",100,100,5,"#5F6262",[],1 ],
92
+ [ "PianoEb",1, "group",200,100,5,"#5F6262",[],1 ],
93
+ [ "PianoFmin",2, "group",300,100,5,"#5F6262",[],1 ],
94
+ [ "FluteC1",3, "tank",400,100,1,"#5F6262",[],1 ],
95
+ [ "FluteC2",5, "tank",,,1,"",[],1 ],
96
+ [ "FluteC3",6, "tank",,,1,"",[],1 ],
97
+ [ "FluteC4",7, "tank",,,1,"",[],1 ],
98
+ [ "FluteC5",8, "tank",,,1,"",[],1 ],
99
+ [ "FluteC6",9, "tank",,,1,"",[],1 ],
100
+ [ "FluteC7",10, "tank",,,1,"",[],1 ],
101
+ [ "FluteC8",11, "tank",,,1,"",[],1 ],
102
+ [ "FluteC9",12, "tank",,,1,"",[],1 ],
103
+ [ "FluteC10",13, "tank",,,1,"",[],1 ],
104
+ [ "FluteC11",14, "tank",,,1,"",[],1 ],
105
+ [ "FluteC12",15, "tank",,,1,"",[],1 ],
106
+ [ "FluteC13",16, "tank",,,1,"",[],1 ],
107
+ [ "FluteC14",17, "tank",,,1,"",[],1 ],
108
+ [ "FluteC15",18, "tank",,,1,"",[],1 ],
109
+ [ "FluteEb1",19, "tank",100,200,2,"#BCA104",[],1 ],
110
+ [ "FluteEb2",20, "tank",,,2,"",[],1 ],
111
+ [ "FluteEb3",21, "tank",,,2,"",[],1 ],
112
+ [ "FluteEb4",22, "tank",,,2,"",[],1 ],
113
+ [ "FluteEb5",23, "tank",,,2,"#039879",[],1 ],
114
+ [ "FluteEb6",24, "tank",,,2,"#039879",[],1 ],
115
+ [ "FluteEb7",25, "tank",,,2,"#039879",[],1 ],
116
+ [ "FluteEb8",26, "tank",,,2,"",[],1 ],
117
+ [ "FluteEb9",27, "tank",,,2,"",[],1 ],
118
+ [ "FluteEb10",28, "tank",,,2,"",[],1 ],
119
+ [ "FluteEb11",29, "tank",,,2,"",[],1 ],
120
+ [ "FluteEb12",30, "tank",,,2,"",[],1 ],
121
+ [ "FluteEb13",31, "tank",,,2,"",[],1 ],
122
+ [ "FluteEb14",32, "tank",,,2,"",[],1 ],
123
+ [ "FluteEb15",33, "tank",,,2,"",[],1 ],
124
+ [ "FluteFmin1",34, "tank",200,200,3,"#BCA104",[],1 ],
125
+ [ "FluteFmin2",35, "tank",,,3,"",[],1 ],
126
+ [ "FluteFmin3",36, "tank",,,3,"",[],1 ],
127
+ [ "FluteFmin4",37, "tank",,,3,"",[],1 ],
128
+ [ "FluteFmin5",38, "tank",,,3,"",[],1 ],
129
+ [ "FluteFmin6",39, "tank",,,3,"",[],1 ],
130
+ [ "FluteFmin7",40, "tank",,,3,"",[],1 ],
131
+ [ "FluteFmin8",41, "tank",,,3,"",[],1 ],
132
+ [ "FluteFmin9",42, "tank",,,3,"",[],1 ],
133
+ [ "FluteFmin10",43, "tank",,,3,"",[],1 ],
134
+ [ "FluteFmin11",44, "tank",,,3,"",[],1 ],
135
+ [ "FluteFmin12",45, "tank",,,3,"",[],1 ],
136
+ [ "FluteFmin13",46, "tank",,,3,"",[],1 ],
137
+ [ "FluteFmin14",47, "tank",,,3,"",[],1 ],
138
+ [ "FluteFmin15",48, "tank",,,3,"",[],1 ],
187
139
  ];
188
140
  exports.groupesDesSons = groupesDesSons;
@@ -31,7 +31,7 @@ let debug1 = true;
31
31
  export function creationInterfacesOUT(groupes) {
32
32
  if (groupes !== undefined) {
33
33
  return groupes.map(function (k) {
34
- return k[0] + "OUT";
34
+ return k[0] + "OUT";
35
35
  })
36
36
  };
37
37
  }
@@ -265,6 +265,7 @@ let offsetDivision = 0;
265
265
  let compteurDivisionMesure = 0;
266
266
  let nbeDeGroupesSons = 0;
267
267
  let socketControleur;
268
+ let socketQueueViewer;
268
269
  let groupeName = "";
269
270
  let automatePossibleMachine;
270
271
 
@@ -1326,7 +1327,8 @@ maybe an hiphop compile Error`);
1326
1327
  }));
1327
1328
  break;
1328
1329
 
1329
- /* case "DAWStartClip":
1330
+ /* Pas à jour dans la version node.js
1331
+ case "DAWStartClip":
1330
1332
  pseudo = msgRecu.pseudo;
1331
1333
  if (msgRecu.clipChoisi === undefined ) break; // Protection si pas de selection sur le client
1332
1334
  if (debug) console.log("Web Socket Serveur: DAWStartClip: clipChoisi", msgRecu.clipChoisi, " pour ID: ", msgRecu.id);
@@ -1361,8 +1363,8 @@ maybe an hiphop compile Error`);
1361
1363
  messageLog.pseudo = msgRecu.pseudo;
1362
1364
  messageLog.text = msg.text;
1363
1365
  logInfoSocket(messageLog);
1364
- break;*/
1365
-
1366
+ break;
1367
+ */
1366
1368
  case "dureeDuTickHorlogeMidi": // Reçu de Processing chaque 24 pulses de l'horloge Midi (une noire)
1367
1369
  receivedTickFromSynchro();
1368
1370
  break;
@@ -1871,6 +1873,14 @@ maybe an hiphop compile Error`);
1871
1873
  ws.id = msgRecu.id;
1872
1874
  if (debug) console.log("INFO: websocketserbeur: startSpectateur: ", msgRecu.id);
1873
1875
 
1876
+ // On ne permet donc qu'un seul queueViewer.
1877
+ if (msgRecu.text === "queueViewer") {
1878
+ if (debug1) console.log("INFO: webSocketServeur: startSpectateur: un queueViewer connecté");
1879
+ socketQueueViewer = ws;
1880
+ groupesClientSon.setSocketQueueViewer(ws);
1881
+ break; // Pas besoin d'aller plus loin dans ce cas
1882
+ }
1883
+
1874
1884
  // On ne permet donc qu'un seul controleur.
1875
1885
  // Attention: La connexion d'un deuxième contrôleur, fait perdre la première et réinitialise la matrice des possible.
1876
1886
  if (msgRecu.text === "controleur") {
@@ -1882,7 +1892,7 @@ maybe an hiphop compile Error`);
1882
1892
  type: "skiniParametres",
1883
1893
  value: par
1884
1894
  }));
1885
- break;
1895
+ break; // Pas besoin d'aller plus loin dans ce cas
1886
1896
  }
1887
1897
 
1888
1898
  if (msgRecu.text === "pieceParameters") {
package/skini.mjs CHANGED
@@ -130,6 +130,10 @@ function startSkini() {
130
130
  res.sendFile(path.join(__dirname + '/client/parametrage/parametrage.html'));
131
131
  });
132
132
 
133
+ app.get('/queueViewer', function (req, res) {
134
+ res.sendFile(path.join(__dirname + '/client/queueViewer/queue.html'));
135
+ });
136
+
133
137
  var port = ipConfig.webserveurPort;
134
138
  var addressServer = ipConfig.serverIPAddress;
135
139
  app.listen(port, () => {