def toggle_operator(new_op_sid, message): current_op = loginutils.get_operator() new_op = loginutils.get_user_by_sid(new_op_sid) loginutils.set_operator(new_op["sid"]) new_op["message"] = message observers = loginutils.get_observers() # Append the new data path so that it can be updated on the client new_op["rootPath"] = blcontrol.beamline.session.get_base_image_directory() # Current op might have logged out, while this is happening if current_op: current_op[ "rootPath"] = blcontrol.beamline.session.get_base_image_directory( ) current_op["message"] = message socketio.emit("setObserver", current_op, room=current_op["socketio_sid"], namespace="/hwr") socketio.emit("observersChanged", observers, namespace="/hwr") socketio.emit("setMaster", new_op, room=new_op["socketio_sid"], namespace="/hwr")
def request_control(): """ """ @copy_current_request_context def handle_timeout_gives_control(sid, timeout=30): gevent.sleep(timeout) if mxcube.TIMEOUT_GIVES_CONTROL: user = loginutils.get_user_by_sid(sid) # Pass control to user if still waiting if user.get("requestsControl"): toggle_operator(sid, "Timeout expired, you have control") data = request.get_json() remote_addr = loginutils.remote_addr() # Is someone already asking for control for observer in loginutils.get_observers(): if observer["requestsControl"] and observer["host"] != remote_addr: msg = "Another user is already asking for control" return make_response(msg, 409) user = loginutils.get_user_by_sid(session.sid) user["name"] = data["name"] user["requestsControl"] = data["control"] user["message"] = data["message"] observers = loginutils.get_observers() gevent.spawn(handle_timeout_gives_control, session.sid, timeout=10) socketio.emit("observersChanged", observers, namespace="/hwr") return make_response("", 200)
def remain_observer(observer_sid, message): observer = loginutils.get_user_by_sid(observer_sid) observer["message"] = message socketio.emit( "setObserver", observer, room=observer["socketio_sid"], namespace="/hwr" )
def handle_timeout_gives_control(sid, timeout=30): gevent.sleep(timeout) if mxcube.TIMEOUT_GIVES_CONTROL: user = loginutils.get_user_by_sid(sid) # Pass control to user if still waiting if user.get("requestsControl"): toggle_operator(sid, "Timeout expired, you have control")
def set_observer(data): name = data.get("name", "") observers = loginutils.get_observers() observer = loginutils.get_user_by_sid(session.sid) if observer and name: observer["name"] = name socketio.emit("observerLogin", observer, include_self=False, namespace="/hwr") socketio.emit("observersChanged", observers, namespace="/hwr") return session.sid
def connect(): user = loginutils.get_user_by_sid(session.sid) # Make sure user is logged, session may have been closed i.e by timeout if user: user["socketio_sid"] = request.sid # (Note: User is logged in if operator) if loginutils.is_operator(session.sid): if (not blcontrol.beamline.queue_manager.is_executing() and not loginutils.DISCONNECT_HANDLED): loginutils.DISCONNECT_HANDLED = True socketio.emit("resumeQueueDialog", namespace="/hwr") msg = "Client reconnected, Queue was previously stopped, asking " msg += "client for action" logging.getLogger("HWR").info(msg)
def connect(): user = loginutils.get_user_by_sid(session.sid) # Make sure user is logged, session may have been closed i.e by timeout if user: user["socketio_sid"] = request.sid # (Note: User is logged in if operator) if loginutils.is_operator(session.sid): loginutils.emit_pending_events() if ( not blcontrol.queue.queue_hwobj.is_executing() and not loginutils.DISCONNECT_HANDLED ): loginutils.DISCONNECT_HANDLED = True socketio.emit("resumeQueueDialog", namespace="/hwr") msg = "Client reconnected, Queue was previously stopped, asking " msg += "client for action" logging.getLogger("HWR").info(msg)
def toggle_operator(new_op_sid, message): current_op = loginutils.get_operator() new_op = loginutils.get_user_by_sid(new_op_sid) loginutils.set_operator(new_op["sid"]) new_op["message"] = message observers = loginutils.get_observers() # Append the new data path so that it can be updated on the client new_op["rootPath"] = blcontrol.session.get_base_image_directory() # Current op might have logged out, while this is happening if current_op: current_op["rootPath"] = blcontrol.session.get_base_image_directory() current_op["message"] = message socketio.emit( "setObserver", current_op, room=current_op["socketio_sid"], namespace="/hwr" ) socketio.emit("observersChanged", observers, namespace="/hwr") socketio.emit("setMaster", new_op, room=new_op["socketio_sid"], namespace="/hwr")