0
我正在通過併發的Erlang網站上的例子。我目前正在研究實現簡單聊天信使的第3.5節。 下面是代碼:Erlang節點配置
-module(messenger).
-export([start_server/0, server/1, goOnline/1, goOffline/0, message/2, client/2]).
server_node() ->
[email protected]
server(User_List) ->
receive
{From, logon, Name} ->
New_User = server_goOnline(From, Name, User_List),
server(New_User);
{From, logoff} ->
New_User = server_goOffline(From, User_List),
server(New_User);
{From, message_to, To, Message} ->
server_transfer(From, To, Message, User_List),
io:format("list is now: ~p~n", [User_List]),
server(User_List)
end.
start_server() ->
register(messenger, spawn(messager, server, [[]])).
server_goOnline(From, Name, User_List) ->
case lists:keymember(Name, 2, User_List) of
true ->
From ! {messenger, stop, user_exists_at_other_node},
User_List;
false ->
From ! {messenger, logged_on},
[{From, Name} | User_List]
end.
server_goOffline(From, User_List) ->
lists:keydelete(From, 1, User_List).
server_transfer(From, To, Message, User_List) ->
case lists:keysearch(From, 1, User_List) of
false ->
From ! {messenger, stop, you_are_not_logged_on};
{value, {From, Name}} ->
server_transfer(From, Name, To, Message, User_List)
end.
server_transfer(From, Name, To, Message, User_List) ->
case lists:keysearch(To, 2, User_List) of
false ->
From ! {messenger, receiver_not_found};
{value, {ToPid, To}} ->
ToPid ! {message_from, Name, Message},
From ! {messenger, sent}
end.
goOnline(Name) ->
case whereis(mess_client) of
undefined ->
register(mess_client,
spawn(messenger, client, [server_node(), Name]));
_ -> already_logged_on
end.
goOffline() ->
mess_client ! logoff.
message(ToName, Message) ->
case whereis(mess_client) of
undefined ->
not_logged_on;
_ -> mess_client ! {message_to, ToName, Message},
ok
end.
client(Server_Node, Name) ->
{messenger, Server_Node} ! {self(), goOnline, Name},
await_result(),
client(Server_Node).
client(Server_Node) ->
receive
logoff ->
{messenger, Server_Node} ! {self(), logoff},
exit(normal);
{message_to, ToName, Message} ->
{messenger, Server_Node} ! {self(), message_to, ToName, Message},
await_result();
{message_from, FromName, Message} ->
io:format("Message From ~p: ~p~n", [FromName, Message])
end,
client(Server_Node).
await_result() ->
receive
{messenger, stop, Why} ->
io:format("~p~n", [Why]),
exit(normal);
{messneger, What} ->
io:format("~p~n", [What])
end.
的教程說配置server_node() - >到節點,在我的使者服務器運行。我如何配置該功能?我不完全知道這意味着什麼,我的問題是如何配置server_node註冊我的服務器位置信使。
嗯,這正是我所做的然而我得到這個錯誤,真正的錯誤在過程<0.40.0>節點'super @ timberlake'退出值:{undef,[{messager,server,[[]],[]}] } – user2757849
稍後我會看看這段代碼(現在是睡覺的時候了......) – Pascal
錯誤消息表明調用messager:server()是未定義的。我認爲你在start_server-function中產生了一個產生錯誤的輸入錯誤。 Erlang的錯誤信息實際上在您習慣時非常有用。 – mbesso