Привет, я пишу приложение 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?
}