manage deconnection/reconnection 98/17998/1
Antoine ELIAS [Tue, 29 Mar 2016 10:06:45 +0000 (12:06 +0200)]
Change-Id: I344ee13b76771638417b2f23b9a61861455e4e4a

scilab/modules/graphic_objects/src/cpp/webutils.cpp
scilab/node/scilab_process.js
scilab/node/scilab_server.js
scilab/node/start.sce
scilab/node/static/index.html
scilab/node/static/main.js
scilab/node/static/scilab.css
scilab/node/static/scilab_create.js
scilab/node/static/scilab_setter.js

index 31f606c..2aada79 100644 (file)
@@ -332,7 +332,7 @@ bool WebUtils::getUIEnable(int uid)
 void WebUtils::setUIEnable(int uid, std::ostringstream& ostr)
 {
     //reverse flag value
-    std::string v = getUIEnable(uid) ? "false" : "true";
+    std::string v = getUIEnable(uid) ? "true" : "false";
     ostr << "setUIEnable('" << uid << "', " + v << ");";
 }
 
index 1fa5d8e..c687e7f 100644 (file)
@@ -30,6 +30,10 @@ dispatchio.on('connection', function (dspSocket) {
         graphicio.emit('callback', msg);
     });
 
+    dspSocket.on('force_reload', function (msg) {
+               msgHistory = []; //reset history, sciab was closed or has crashed.
+    });
+
     dspSocket.on('imagepath', function (msg) {
         imagepath = msg;
     });
@@ -44,7 +48,7 @@ dispatchio.on('connection', function (dspSocket) {
             commandio.close();
             graphicio.close();
             process.exit(0);
-        }, /*60 * */10 * 1000); //10 seconds to test
+        }, /*60 * 10 * 1000*/5 * 1000); //5 seconds to test
     });
 
     dspSocket.on('reconnection', function () {
@@ -54,10 +58,12 @@ dispatchio.on('connection', function (dspSocket) {
         //resend all gui creation information
         var size = msgHistory.length;
         L('history: ' + size);
+               dspSocket.emit("graphic_reconnection", "start");
         for(var i = 0 ; i < size ; ++i) {
             //L('%d : %s', i+1, msgHistory[i]);
             dspSocket.emit('graphic_create', msgHistory[i]);
         }
+               dspSocket.emit("graphic_reconnection", "end");
     });
     
     L('open commandio socket');
index 74dd15c..252a6a4 100644 (file)
@@ -21,7 +21,7 @@ io.on('connection', function (socket) {
     
     if(processAlive === false) {
         //start process
-        fork('./scilab_process.js');
+        fork('./scilab_process.js'/*, [], {execArgv: ['--debug=5859']}*/);
         processAlive = true;
     
         var prcAddr = 'http://127.0.0.1:10002';
@@ -32,7 +32,7 @@ io.on('connection', function (socket) {
         socket.emit('status', {data:'reconnection'});
         prcSocket.emit('reconnection');
     }
-            
+
     prcSocket.emit('imagepath', {path:__dirname + '/static/'});
     
     prcSocket.on('command_end', function() {
@@ -51,7 +51,13 @@ io.on('connection', function (socket) {
     prcSocket.on('graphic_update', function(msg) {
         socket.emit('graphic_update', msg);
     });
+    prcSocket.on('graphic_reconnection', function(msg) {
+        //L(msg);
+        socket.emit('graphic_reconnection', msg);
+    });
         
     prcSocket.on('status', function(msg) {
         if(msg.data === 'ready') {
             //send ready message to client
@@ -61,9 +67,21 @@ io.on('connection', function (socket) {
         }
     });
 
+       prcSocket.on('connection', function(msg) {
+        L('dispatcher connected');
+    });
+
+       prcSocket.on('reconnect', function(msg) {
+        L('dispatcher reconnect');
+    });
+
+       prcSocket.on('reconnection', function(msg) {
+        L('dispatcher connected');
+    });
+
     prcSocket.on('disconnect', function(msg) {
         L('dispatcher disconnected');
-        prcSocket.close();
+        prcSocket.disconnect();
         processAlive = false;
     });
         
@@ -76,9 +94,14 @@ io.on('connection', function (socket) {
         prcSocket.emit('callback', msg);
     });
     
-    socket.on('disconnect', function () {
-        L('User disconnected');
-        prcSocket.emit('quit');
+    socket.on('callback', function (msg) {
+        prcSocket.emit('callback', msg);
+    });
+    
+    socket.on('force_reload', function () {
+        L('force reload');
+               prcSocket.emit('force_reload');
+               prcSocket.emit('command', {data:"exec(getenv('SCIFILES') + '" + "/start" + ".sce', -1);"});
     });
 });
 
index 3dbd5d7..8550169 100644 (file)
@@ -9,7 +9,7 @@
 //9 visible
 //10 opticlim
 
-demo = 5
+demo = 3;
 
 if demo == 1 then
     f1 = createWindow();
@@ -21,16 +21,17 @@ if demo == 1 then
 end
 
 if demo == 2 then
+    dim = 10;
     f2 = createWindow();
     f2.visible = %f;
-    f2.position(3:4) = [500, 600];
-    for i=1:81
-        x = floor((i-1) / 9);
-        y = modulo((i-1), 9);
-        uicontrol(f2, "position", [25 + 50*x, 125 + 50*y,50,50],"string", string(x) + " - " + string(y), "callback", "set(gcbo, ''enable'', %f)");
+    f2.position(3:4) = [50 * dim + 50, 50 * dim + 125];
+    for i=1:dim*dim
+        x = floor((i-1) / dim);
+        y = modulo((i-1), dim);
+        uicontrol(f2, "position", [25 + 50*x, 100 + 50*y,50,50],"string", string(x) + " - " + string(y), "callback", "set(gcbo, ''enable'', %f)");
     end
 
-    uicontrol(f2, "position", [200, 25, 100, 50], "string", "reset", "callback", "c = gcbo.parent.children;for i=1:size(c, ''*''), c(i).enable = %t;end");
+    uicontrol(f2, "position", [f2.position(3)/2 - 50, 25, 100, 50], "string", "reset", "callback", "c = gcbo.parent.children;for i=1:size(c, ''*''), c(i).enable = %t;end");
     f2.visible = %t;
 end
 
@@ -100,22 +101,29 @@ if demo == 5 then
     clear;
 
     function onchange()
-        R = get("sliderR", "value") / 255;
-        G = get("sliderG", "value") / 255;
-        B = get("sliderB", "value") / 255;
-        set("color", "backgroundcolor", [R, G, B]);
+        R = get("sliderR", "value");
+        G = get("sliderG", "value");
+        B = get("sliderB", "value");
+        set("textR", "string", string(R));
+        set("textG", "string", string(G));
+        set("textB", "string", string(B));
+        set("color", "backgroundcolor", [R, G, B]/255);
     endfunction
 
 
     f = createWindow();
     f.visible = %f;
-    f.position(3:4) = [396, 130];
+    f.position(3:4) = [300, 130];
 
-    uicontrol("style", "slider", "position", [10 10 256 30], "min", 0, "max", 255, "sliderstep", [1, 1], "value", 0, "tag", "sliderB");
-    uicontrol("style", "slider", "position", [10 50 256 30], "min", 0, "max", 255, "sliderstep", [1, 1], "value", 0, "tag", "sliderG");
-    uicontrol("style", "slider", "position", [10 90 256 30], "min", 0, "max", 255, "sliderstep", [1, 1], "value", 0, "tag", "sliderR");
+    uicontrol("style", "slider", "position", [10 10 128 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderB");
+    uicontrol("style", "slider", "position", [10 50 128 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderG");
+    uicontrol("style", "slider", "position", [10 90 128 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderR");
 
-    uicontrol("style", "frame", "position", [286 20 90 90], "tag", "color", "backgroundcolor", [0, 0, 0]);
+    uicontrol("style", "text", "position", [150 15 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textB");
+    uicontrol("style", "text", "position", [150 55 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textG");
+    uicontrol("style", "text", "position", [150 95 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textR");
+
+    uicontrol("style", "frame", "position", [200 20 90 90], "tag", "color", "backgroundcolor", [0, 0, 0]);
 
     set("sliderR", "callback", "onchange");
     set("sliderG", "callback", "onchange");
index 0b0841d..ed79cb4 100644 (file)
@@ -3,58 +3,46 @@
     <head>
         <meta charset='UTF-8' />
         <title>Scilab WebView</title>
-        <script type='text/javascript' src='/socket.io/socket.io.js'></script>
-        <link rel="stylesheet" type="text/css" href="scilab.css">
+        <script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.js'></script>
         <script src="main.js"></script>
         <script src="scilab_create.js"></script>
         <script src="scilab_helper.js"></script>
         <script src="scilab_setter.js"></script>
         <script src="scilab_tools.js"></script>
         <script src="scilab_enum.js"></script>
+        <link rel="stylesheet" href="scilab.css">
+
+               <!-- JQuery -->
+               <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
+               <!-- bootstrap -->
+               <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
+               <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
+               <!-- bootstrap-slider -->
+               <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/6.1.5/css/bootstrap-slider.css">
+               <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/6.1.5/bootstrap-slider.js"></script>
+               <!-- bootstrap touchspin >
+               <link rel="stylesheet" href="deps/jquery.bootstrap-touchspin.min.css">
+               <script src="deps/jquery.bootstrap-touchspin.min.js"></script-->
+               
+               <meta name="viewport" content="width=device-width, initial-scale=1.0">
     </head>
-    <body>
+    <body onunload="unload()">
         <h1>Scilab WebView</h1>
-        <!--table width=200 height=100>
-            <tr>
-                <td bgcolor="red"></td>
-                <td bgcolor="yellow" colspan="2"></td>
-            </tr>
-            <tr>
-                <td bgcolor="lime"></td>
-                <td bgcolor="magenta"></td>
-                <td bgcolor="cyan" rowspan="2"></td>
-            </tr>
-            <tr>
-                <td bgcolor="blue" colspan="2"></td>
-            </tr>
-        </table>
-        <br!-->
-        
-        <!--  style="width:100%;height:100%" !-->
-        
-        <!--table width=200 height=100 style="padding: 0px;border-collapse: collapse;">
-            <tr>
-                <td><div style="width:100%;height:100%;background-color:red"></div></td>
-                <td rowspan="2"><div style="width:100%;height:100%;background-color:yellow"></div></td>
-                <td><div style="width:100%;height:100%;background-color:magenta"></div></td>
-            </tr>
-            <tr>
-                <td><div style="width:100%;height:100%;background-color:lime"></div></td>
-                <td rowspan="2"><div style="width:100%;height:100%;background-color:cyan"></div></td>
-            </tr>
-            <tr>
-                <td colspan="2"><div style="width:100%;height:100%;background-color:blue"></div></td>
-            </tr>
-        </table!-->
-        
-        <div id='infobar'></div>
-        <h3>Logger:</h3>
-        <div class='log' id='logger'></div>
-        <br>
-        <div class='window' id='scilab'></div>
+               <div class='window' id='scilab'></div>
+               <footer>
+                       <div id='infobar'></div>
+                       <br>
+                       <button class='btn' style="position:relative;font-weight:bold" id='exec' onclick="force_reload();">clear and reload</button>
+                       <div class='log' id='logger'></div>
+               </footer>
         <script type='text/javascript'>
             resetLogger();
             setInfo('');
+                       
+                       function force_reload() {
+                               document.getElementById('scilab').innerHTML = '';
+                               socket.emit("force_reload");
+                       }
         </script>
     </body>
 </html>
index 499405f..93f6aaa 100644 (file)
@@ -38,6 +38,20 @@ socket.on('graphic_update', function (msg) {
     eval(msg);
 });
 
+socket.on('graphic_reconnection', function (msg) {
+       var scilab = document.getElementById('scilab');
+       switch(msg) {
+               case 'start':
+                       console.log('hidden');
+                       scilab.style.visibility = 'hidden';
+                       break;
+               case 'end' :
+                       console.log('visible');
+                       scilab.style.visibility = 'visible';
+                       break;
+       }
+});
+
 function onPushButton() {
     var id = getUID(this.id); //ignore "uid"
     socket.emit('callback', {uid:id});
@@ -95,6 +109,11 @@ function onSpinner() {
 }
 
 //tools
+
+function unload() {
+       socket.close();
+}
+
 function setInfo(data) {
     document.getElementById('infobar').innerHTML = data;
 }
index c9070ae..a2d1304 100644 (file)
@@ -1,6 +1,4 @@
 body {
-    background-color : rgb(192,192,192);
-    color : black;
     text-align : center;
 }
 
@@ -31,12 +29,10 @@ body {
     text-align: left;
 }
 
-.GO_UI_PUSHBUTTON {
+.btn {
     position: absolute;
     text-align:center;
     overflow : hidden;
-    font-family: Tahoma, Verdana, Segoe, sans-serif;
-    font-size: 11px;
     visibility:inherit;
 }
 
@@ -55,6 +51,7 @@ body {
     line-height:20px;
     text-align:left;
     vertical-align: middle;
+       margin-bottom: 0px;
     overflow : hidden;
     font-family: Tahoma, Verdana, Segoe, sans-serif;
     font-size:11px;
@@ -250,3 +247,7 @@ body {
     border : 1px rgb(0,0,0) solid;
     font-weight: bold;
 }
+
+#ex1Slider .slider-selection {
+       background: #BABABA;
+}
index b8e5b8e..7fb6603 100644 (file)
@@ -9,7 +9,7 @@ function createFigure(uid) {
 }
 
 function createPushButton(uid) {
-    return createCommonIUControl(uid, 'BUTTON', 'GO_UI_PUSHBUTTON');
+    return createCommonIUControl(uid, 'BUTTON', 'btn');
 }
 
 function createFrame(uid) {
@@ -85,7 +85,8 @@ function createCombobox(uid) {
 function createSpinner(uid) {
     var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_SPINNER');
     __temp__.type = 'number';
-    return __temp__;
+       //$("#" + getIdString(uid)).TouchSpin({verticalbuttons: true});
+       return __temp__;
 }
 
 function createTab(uid) {
@@ -100,5 +101,7 @@ function createTab(uid) {
 
 function deleteObject(uid) {
     var __child__ = getElementById(uid);
-    __child__.parentNode.removeChild(__child__);
+       if(__child__) {
+               __child__.parentNode.removeChild(__child__);
+       }
 }
\ No newline at end of file
index af83394..22aa86f 100644 (file)
@@ -72,8 +72,12 @@ function setVisible(uid, val) {
 }
 
 function setUIEnable(uid, val) {
-    var __child__ = getElementById(uid);
-    __child__.disabled = val;
+       var __child__ = $('#' + getIdString(uid));
+       if(val) {
+               __child__.removeClass("disabled");
+       } else {
+               __child__.addClass("disabled");
+       }
 }
 
 function setUIForegroundColor(uid, val) {
@@ -384,7 +388,7 @@ function setCallback(uid) {
     var __child__ = getElementById(uid);
 
     switch(__child__.className) {
-        case 'GO_UI_PUSHBUTTON' :
+        case 'btn' :
             event = "click";
             func = onPushButton;
             break;