예제 #1
0
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")
예제 #2
0
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)
예제 #3
0
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"
    )
예제 #4
0
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"
    )
예제 #5
0
    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")
예제 #6
0
    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")
예제 #7
0
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
예제 #8
0
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
예제 #9
0
파일: ra.py 프로젝트: tanghaoqi/mxcube3
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)
예제 #10
0
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)
예제 #11
0
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")
예제 #12
0
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)