Namaste Reader,
Мы работаем над механизмом связи клиент-сервер с использованием программирования сокетов. Состояния вызова PJSUA2 (ответ на вызов, удержание вызова, разъединение вызова и т. Д.) Обрабатываются на стороне клиента в зависимости от наших пользовательских команд, полученных от сервера.
Например, если сервер отправляет «cmd_answer», клиент будет выполнять операторы кода «call_prm.statusCode = 200» и «call.answer (call_prm)».
Я создал дополнительный поток для отдельного управления коммуникацией сокета. Внутри метода я регистрирую поток в PJSUA2 как «endpoint.libRegisterThread (« clientSocketCommunication »)».
Пример кода для связи через сокет приведен ниже:
def clientSocketCommunication:
endpoint.libRegisterThread("clientSocketCommunication")
...
...
while True:
data = socket_client.recv(1024)
# Parse data into object
obj = json.loads(data.decode())
print(obj)
if obj['cmd'] == 'call_answer':
call_prm.statusCode = 200
call.answer(call_prm)
print("Call answered")
elif obj['cmd'] == 'call_end':
call_prm.statusCode = 200
call.hangup(call_prm)
print("Call ended")
break
Таким образом, в дополнение к основному приложению PJSUA2, этот вновь созданный поток для связи клиент-сервер теперь работает параллельно.
С этой логикой поток программы останавливается на неопределенное время в приведенной ниже инструкции даже после того, как сервер сокетов отправит сообщение клиенту сокета.
data = socket_client.recv(1024)
Конечная точка является объектом конечной точки PJSUA2, тогда как socket_client является объектом socket.socket () Python3.
Запрос помощи в решении этой проблемы. Обращайтесь за поддержкой, поскольку я новичок в Python и PJSUA2.
Спасибо | С уважением,
Dipen