コード例 #1
0
ファイル: vdomrserver.py プロジェクト: tjd2002/spikeforest2
 def post(self):
     session_id = self.get_argument('session_id', None)
     if not session_id:
         self.write(dict(success=False, error='No session_id'))
         return
     vd._set_server_session(session_id)
     try:
         data = json.loads(self.request.body)
     except:
         self.write(
             dict(success=False, error='Missing self.request.body'))
         return
     try:
         obj = json.loads(self.request.body)
     except:
         self.write(
             dict(success=False, error='Unable to parse body'))
         return
     if 'callback_id' not in obj:
         self.write(dict(success=False,
                         error='Missing callback_id'))
         return
     callback_id = obj['callback_id']
     args = obj['args']
     kwargs = obj['kwargs']
     try:
         retval = vd.invoke_callback(callback_id,
                                     argument_list=args,
                                     kwargs=kwargs)
     except:
         traceback.print_exc()
         self.write(
             dict(success=False, error='Error invoking callback.'))
         return
     self.write(dict(success=True, retval=retval))
コード例 #2
0
ファイル: vdomrserver.py プロジェクト: yger/spikeforest
 def get(self):
     session_id = self.get_argument('session_id', None)
     if not session_id:
         self.write('//no session_id')
         return
     vd._set_server_session(session_id)
     js_list = []
     while True:
         js = vd._take_javascript_to_execute()
         if js is None:
             break
         js_list.append(js)
     if len(js_list) > 0:
         self.write('\n\n'.join(js_list))
     else:
         self.write('(function() {/*nothing to do --*/})')
コード例 #3
0
ファイル: vdomrserver.py プロジェクト: yger/spikeforest
 def get(self):
     session_id = self.get_argument('session_id', None)
     if not session_id:
         self.write('//no session_id')
         return
     delay = 1
     num_delays = 10
     for _ in range(num_delays):
         vd._set_server_session(session_id)
         js_list = []
         while True:
             js = vd._take_javascript_to_execute()
             if js is None:
                 break
             js_list.append(js)
         if len(js_list) > 0:
             self.write('\n\n'.join(js_list))
             break
         yield async_sleep(delay)
     self.write("(function() {/*nothing to do*/})")
コード例 #4
0
ファイル: vdomrserver.py プロジェクト: yger/spikeforest
            def get(self):
                session_id = ''.join(
                    random.choices(string.ascii_uppercase + string.digits,
                                   k=10))
                server_self._sessions[session_id] = dict(root=None)
                vd._set_server_session(session_id)

                root = server_self._vdomr_app.createSession()
                server_self._sessions[session_id]['root'] = root

                html = '''
                <head>
                <script>
                    function post_json(url,obj,callback) {
                    xhr = new XMLHttpRequest();
                    xhr.open("POST", url, true);
                    xhr.setRequestHeader("Content-type", "application/json");
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            var resp;
                            try {
                                resp=JSON.parse(xhr.responseText);
                            }
                            catch(err) {
                                callback('Problem parsing json response.');
                                return;
                            }
                            if (resp.success) {
                                callback(null,resp);
                            }
                            else {
                                callback('Error: '+resp.error);
                            }
                        }
                    }
                    var data = JSON.stringify(obj);
                    xhr.send(data);
                    }
                    function inject_script(url,callback) {
                        var head = document.getElementsByTagName('head')[0];
                        var script = document.createElement('script');
                        script.type = 'text/javascript';
                        script.onload = function() {
                            callback();
                        }
                        script.src = url;
                        head.appendChild(script);
                    }
                </script>

                <script>
                window.vdomr_invokeFunction=function(callback_id,args,kwargs) {
                    // console.log('vdomr_invokeFunction',callback_id,args,kwargs);
                    // document.getElementById('overlay').style.visibility='visible'
                    post_json('/{vdomr_token_str}invoke/?session_id={session_id}',{callback_id:callback_id,args:args,kwargs:kwargs},function(err,resp) {
                    // document.getElementById('overlay').style.visibility='hidden'
                    if (err) {
                        console.error(err);
                        return;
                    }
                    // console.log('ok',resp);
                    inject_script('/{vdomr_token_str}script_immediate.js?session_id={session_id}',function() {

                    });
                    });
                }
                {init_js}
                </script>

                <script>
                    function get_script() {
                        inject_script('/{vdomr_token_str}script.js?session_id={session_id}',function() {
                            setTimeout(function() {
                                get_script();
                            },0);
                        });
                    }
                    setTimeout(function() {
                        get_script();
                    },100);
                </script>

                <style>
                .overlay {
                    background-color: rgba(1, 1, 1, 0.2);
                    color:white;
                    font-size:24px;
                    bottom: 0;
                    left: 0;
                    position: fixed;
                    right: 0;
                    top: 0;
                    text-align: center;
                    padding: 40px;
                }
                </style>

                </head>
                <html>
                <div id=overlay class=overlay style="visibility:hidden">Please wait...</div>
                {content}
                </html>
                '''
                html = root._repr_html_().join(html.split('{content}'))
                html = session_id.join(html.split('{session_id}'))
                html = html.replace('{init_js}', _get_init_javascript())
                if server_self._token:
                    html = html.replace('{vdomr_token_str}',
                                        server_self._token + '/')
                else:
                    html = html.replace('{vdomr_token_str}', '')
                self.write(html)