我有一个2人聊天的应用。但在他们聊天之前,两方都必须按下"接受"
前端的我有一个调用此功能的按钮:
overflow:hidden
在我的凤凰频道我有这个(这是不完整的,因为我不知道该怎么做):
function acceptMatch() {
channel.push("accept_match", {
"matched_client_email": matchedClientEmail,
});
}
我查看 def handle_in("accept_match", %{ "matched_client_email" => matched_client_email }, socket) do
Logger.info "accept_match"
...
############################### here ####################################
match_accepted = true # <-- I want to be able to find out if the other person has pressed "accept" as well
case match_accepted do
true ->
...
{:noreply, socket}
_ ->
{:noreply, socket}
end
end
,但这似乎与PID有关,我不能轻易地传递到不同的套接字。我试图在所有可以保存到/查询的连接之间寻找一个公共存储(数据库除外)。这样,如果甲方按下接受,我可以询问存储&#34;乙方接受了吗?&#34;
=== UPDATE ===
当我尝试使用命名代理时,我得到了这个:
Agent
答案 0 :(得分:2)
实际上,您似乎可以在connect
user_socket
这个特定的PID或代理名称中传递给Agent.start_link(your_func, name: :myagent)
中的每个新连接,它应该解决这种情况。您只需要一个代理,因此您可以为其命名,例如
Agent.get(:myagent, your_get_func)
后来从中获取
lib
您也可以考虑使用Registry,它来自标准库中的Elixir 1.4。
此代理可以在<app_name>.ex
中,您只需将其作为单个工作人员添加到function initMap()
{
var mapDiv = document.getElementById('map');
var map = new google.maps.Map(mapDiv, {center: {lat: 45.9, lng: 25.0}, zoom:7,
mapTypeId: google.maps.MapTypeId.ROADMAP, disableDoubleClickZoom:true, scrollwheel:false, ...});
var marker = new google.maps.Marker({position: {lat:46.1, lng:25.4}, map:map, icon:'../images/Marker.png});
}
文件中,并在需要时使用专用主管进行监督。