当前位置:K88软件开发文章中心编程语言非主流编程语言Erlang → 文章内容

Erlang 将大程序分在多个文件中

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 16:23:52

由 Loen 创建,路飞 最后一次修改 2016-08-12 将大程序分在多个文件中为了演示需要,我们将前面几节中 messager 程序分布到五个文件中: mess_config.hrl 配置所需数据头文件mess_interface.hrl 客户端与 messager 之间的接口定义user_interface.erl用户接口函数mess_client.erlmessager 系统客户端的函数mess_server.erlmessager 服务端的函数除了完成上述工作外,我们使用记录重新定义了 shell 、客户端以及服务端的消息格式。此外,我们还引入了下面这些宏: %%%----FILE mess_config.hrl----%%% Configure the location of the server node,-define(server_node, messenger@super).%%%----END FILE----%%%----FILE mess_interface.hrl----%%%Message interface between client and server and client shell for%%% messenger program %%%Messages from Client to server received in server/1 function.-record(logon,{client_pid, username}).-record(message,{client_pid, to_name, message}).%%% {'EXIT', ClientPid, Reason} (client terminated or unreachable.%%% Messages from Server to Client, received in await_result/0 function -record(abort_client,{message}).%%% Messages are: user_exists_at_other_node, %%% you_are_not_logged_on-record(server_reply,{message}).%%% Messages are: logged_on%%% receiver_not_found%%% sent (Message has been sent (no guarantee)%%% Messages from Server to Client received in client/1 function-record(message_from,{from_name, message}).%%% Messages from shell to Client received in client/1 function%%% spawn(mess_client, client, [server_node(), Name])-record(message_to,{to_name, message}).%%% logoff%%%----END FILE----%%%----FILE mess_interface.hrl----%%% Message interface between client and server and client shell for%%% messenger program %%%Messages from Client to server received in server/1 function.-record(logon,{client_pid, username}).-record(message,{client_pid, to_name, message}).%%% {'EXIT', ClientPid, Reason} (client terminated or unreachable.%%% Messages from Server to Client, received in await_result/0 function -record(abort_client,{message}).%%% Messages are: user_exists_at_other_node, %%% you_are_not_logged_on-record(server_reply,{message}).%%% Messages are: logged_on%%% receiver_not_found%%% sent (Message has been sent (no guarantee)%%% Messages from Server to Client received in client/1 function-record(message_from,{from_name, message}).%%% Messages from shell to Client received in client/1 function%%% spawn(mess_client, client, [server_node(), Name])-record(message_to,{to_name, message}).%%% logoff%%%----END FILE----%%%----FILE mess_client.erl----%%% The client process which runs on each user node-module(mess_client).-export([client/2]).-include("mess_interface.hrl").client(Server_Node, Name) -> {messenger, Server_Node} ! #logon{client_pid=self(), username=Name}, await_result(), client(Server_Node).client(Server_Node) -> receive logoff -> exit(normal); #message_to{to_name=ToName, message=Message} -> {messenger, Server_Node} ! #message{client_pid=self(), to_name=ToName, message=Message}, await_result(); {message_from, FromName, Message} -> io:format("Message from ~p: ~p~n", [FromName, Message]) end, client(Server_Node).%%% wait for a response from the serverawait_result() -> receive #abort_client{message=Why} -> io:format("~p~n", [Why]), exit(normal); #server_reply{message=What} -> io:format("~p~n", [What]) after 5000 -> io:format("No response from server~n", []), exit(timeout) end.%%%----END FILE---%%%----FILE mess_server.erl----%%% This is the server process of the messenger service-module(mess_server).-export([start_server/0, server/0]).-include("mess_interface.hrl").server() -> process_flag(trap_exit, true), server([]).%%% the user list has the format [{ClientPid1, Name1},{ClientPid22, Name2},...]server(User_List) -> io:format("User list = ~p~n", [User_List]), receive #logon{client_pid=From, username=Name} -> New_User_List = server_logon(From, Name, User_List), server(New_User_List); {'EXIT', From, _} -> New_User_List = server_logoff(From, User_List), server(New_User_List); #message{client_pid=From, to_name=To, message=Message} -> server_transfer(From, To, Message, User_List), server(User_List) end.%%% Start the serverstart_server() -> register(messenger, spawn(?MODULE, server, [])).%%% Server adds a new user to the user listserver_logon(From, Name, User_List) -> %% check if logged on anywhere else case lists:keymember(Name, 2, User_List) of true -> From ! #abort_client{message=user_exists_at_other_node}, User_List; false -> From ! #server_reply{message=logged_on}, link(From), [{From, Name} | User_List] %add user to the list end.%%% Server deletes a user from the user listserver_logoff(From, User_List) ->

[1] [2]  下一页


Erlang 将大程序分在多个文件中