Как вызвать функцию обратного вызова между сервером Flask -SocketIO и клиентом C#? - PullRequest
0 голосов
/ 17 июня 2020

Привет, я пишу приложение Python Flask, которое, помимо прочего, должно взаимодействовать с кодом C#. На практике пользователь будет использовать приложение Flask для отправки данных с помощью Flask -SocketIO. Код клиента C# получит эти данные и сообщит серверу Python, что данные получены. Для этой цели я хочу дождаться функции обратного вызова и заморозить приложение Flask на несколько секунд, пока не сработает обратный вызов и программа не будет выпущена.

Этот механизм хорошо работает, когда я использую клиент Python (использующий библиотеку SocketIO), но тот же механизм не работает с клиентом C# (я пробовал некоторые библиотеки, такие как SocketIoClientDo tNet и SocketIO 4Net). С C# данные получены, но обратный вызов не запускается в приложении Flask, поэтому приложение не знает, что данные получены правильно.

Итак, мой вопрос: есть ли способ вызвать функцию обратного вызова на сервере Flask -SocketIO, пока я работаю с клиентом C#?

The Flask -SocketIO код сервера следующий:

....
elif from_who=="improve":

    ev = threading.Event()
    socketio.emit('send data event', {'data': session["IC_to_plc"]}, callback=ack)  
    ev.wait(30)  # blocks until ev.set() is called or 30 seconds expired

    if ev.is_set():
        ev.clear()
        flash("DATA SENDED TO PLC")
        return render_template("improve_calibration/IC_2.html")
    else:
         ev.clear()
         flash("NOT POSSIBLE TO CONNECT TO PLC.")
         return render_template("improve_calibration/IC_2.html") 

Функция обратного вызова:

def ack():
    nonlocal ev
    ev.set()  # unblock HTTP route

Функция C# «при событии» (SocketIOClientDo tNet библиотека):

socket.On("send data event", (data) =>
{ 
    Console.WriteLine(data);
    //How to inform the server with a callback that data is correctly received without emitting another 
    //event?
}
...