Часть требований Apple к видеочату заключается в том, что обе стороны должны явно нажать «принять», прежде чем они смогут войти в видеочат.Phoenix + Channels: Как обеспечить, чтобы обе стороны «приняли»?
У меня есть кнопка, которая вызывает эту функцию при нажатии "принять":
Мое мнение:
channel.on("match_accepted", payload => {
if (payload.matched_client_email == matchedClientEmail) {
this.setState({ clientQueued: true });
}
});
acceptMatch() {
...
if (this.state.clientQueued) {
// start video session
} else {
// notify the other person that you have accepted
channel.push("accept_match", {
"matched_client_email": matchedClientEmail,
});
}
}
Вызов канала:
def handle_in("accept_match", %{ "matched_client_email" => matched_client_email }, socket) do
# broadcast to the other person that you have accepted
VideoChat.Endpoint.broadcast(
"user_pool:#{matched_client_email}",
"match_accepted",
%{ matched_client_email: socket.assigns[:email] }
)
{:noreply, socket}
end
Это очень хрупким, так как у меня нет способ гарантировать, что state
(это реактивная вещь) будет обновляться к тому времени, когда человек нажмет кнопку. Поэтому они могли бы одновременно одновременно принять и просто висеть в подвешенном состоянии.
Есть ли лучший способ гарантировать, что оба человека нажали, принять? Я думал о том, чтобы сделать это через библиотеку Presence
Phoenix и сохранить свойство в ключе metas
, но с его нынешним способом у меня все клиенты находятся в своих собственных каналах/комнатах, поэтому каждый список присутствия будет иметь только одну запись (.. .правильно?).
Wow это является удивительным. Спасибо! Что такое агент? И откуда происходит «agent_session_pid»? – Edmund