github:https://github.com/huangwenzi/get_erl_dir
自动生成erlang代码
有能力的同学也可以修改成其他语言的生成器
根据协议文件生成,除协议文件,下面的文件都是自动生成的内容
协议文件
header = []
record_define = [
]
protocol_define = {
"ancient_test_info_request": {
"cmd": single_counter.next(),
"desc": "请求山海试炼信息",
"payload": [
],
},
"ancient_test_info_reply": {
"cmd": single_counter.next(),
"desc": "山海试炼信息返回",
"payload": [
("code", "int"),
('harm', 'int', "历史最高伤害"),
('rank', 'int', "当前排名"),
("top_rank_list", "array of rank_p", "前三名玩家信息"),
("task_list", "array of task_accepted", "已接任务"),
("finished", "array of int", "已完成的任务"),
('day_hint', 'int', '每日提示红点'),
],
},
"ancient_test_challenge_request": {
"cmd": single_counter.next(),
"desc": "请求挑战",
"payload": [
],
},
"ancient_test_challenge_reply": {
"cmd": single_counter.next(),
"desc": "挑战返回",
"payload": [
("code", "int"),
("harm", "int", "伤害"),
("rank", "int", "当前排名"),
],
},
"ancient_test_submit_request": {
"cmd": single_counter.next(),
"desc": "请求完成任务",
"payload": [
("id", "int", "任务id"),
],
},
"ancient_test_submit_reply": {
"cmd": single_counter.next(),
"desc": "完成任务返回",
"payload": [
("code", "int"),
("id", "int", "任务id"),
],
},
"ancient_test_hint_request": {
"cmd": single_counter.next(),
"desc": "请求修改提示状态",
"payload": [
('day_hint', 'int', '每日提示红点'),
],
},
"ancient_test_hint_reply": {
"cmd": single_counter.next(),
"desc": "修改提示状态返回",
"payload": [
("code", "int"),
('day_hint', 'int', '每日提示红点'),
],
},
}
生成后的文件展示
hrl文件
%%%%%%-------------------------------------------------------------------
%%%%%% @author hw
%%%%%% @copyright (C) 2021, <COMPANY>
%%%%%% @doc
%%%%%%
%%%%%% @end
%%%%%% Created : 21. 6月 2021 16:29
%%%%%%-------------------------------------------------------------------
-ifndef(ANCIENT_TEST_H_H_).
-define(ANCIENT_TEST_H_H_, 1).
%%
-record(player_ancient_test, {
player_id = 0,
harm = 0, %% 历史最高伤害
task_list = [], %% 已接任务
finished = [], %% 已完成的任务
day_hint = 0 %% 每日提示红点
}).
-endif.
rpc文件
%%%%%%-------------------------------------------------------------------
%%%%%% @author hw
%%%%%% @copyright (C) 2021, <COMPANY>
%%%%%% @doc
%%%%%%
%%%%%% @end
%%%%%% Created : 21. 6月 2021 16:29
%%%%%%-------------------------------------------------------------------
-module(ancient_test_rpc).
-author("hw").
-include("erl_protocol_record.hrl").
-include("logger.hrl").
%% API
-export([handle/2]).
%%%% 请求山海试炼信息
handle(#ancient_test_info_request{}, Player) ->
case ancient_test_lib:info(Player) of
{ok, Notify} ->
{reply, Notify};
{false, Code} ->
{reply, #ancient_test_info_reply{code = Code}}
end;
%%%% 请求挑战
handle(#ancient_test_challenge_request{}, Player) ->
case ancient_test_lib:challenge(Player) of
{ok, Notify} ->
{reply, Notify};
{false, Code} ->
{reply, #ancient_test_challenge_reply{code = Code}}
end;
%%%% 请求完成任务
handle(#ancient_test_submit_request{id = Id}, Player) ->
case ancient_test_lib:submit(Player, Id) of
{ok, Notify} ->
{reply, Notify};
{false, Code} ->
{reply, #ancient_test_submit_reply{code = Code}}
end;
%%%% 请求修改提示状态
handle(#ancient_test_hint_request{day_hint = DayHint}, Player) ->
case ancient_test_lib:hint(Player, DayHint) of
{ok, Notify} ->
{reply, Notify};
{false, Code} ->
{reply, #ancient_test_hint_reply{code = Code}}
end;
handle(Msg, _Player) ->
?ERROR("module:[~p] handle msg error:[~p]", [?MODULE, Msg]),
ok.
lib文件
%%%%%%-------------------------------------------------------------------
%%%%%% @author hw
%%%%%% @copyright (C) 2021, <COMPANY>
%%%%%% @doc
%%%%%%
%%%%%% @end
%%%%%% Created : 21. 6月 2021 16:29
%%%%%%-------------------------------------------------------------------
-module(ancient_test_lib).
-author("hw").
-include("ancient_test.hrl").
-include("player.hrl").
-include("event.hrl").
-include("task.hrl").
-include("common.hrl").
-include("erl_protocol_record.hrl").
%% API
-export([
first_init/0,
on_first_login_event/2,
on_login_event/2,
on_zero_timer_event/2,
info/1,
challenge/1,
submit/2,
hint/2
]).
%% gm
-export([
]).
%% 初始化模块
first_init() ->
event_dispatcher:add_event_listener_once(?EVENT_AFTER_FIRST_INIT, ?MODULE, on_first_login_event),
event_dispatcher:add_event_listener(?EVENT_PLAYER_LOGIN, ?MODULE, on_login_event),
event_dispatcher:add_event_listener(?EVENT_ZERO_TIMER, ?MODULE, on_zero_timer_event).
%% 登录初始化
on_first_login_event(_Player, _Param) ->
ok.
%% 登录事件
on_login_event(_Player, _Param) ->
ok.
%% 零点事件
on_zero_timer_event(_Player, _Param) ->
ok.
%% @doc 协议函数
%% @doc 请求山海试炼信息
info(Player) ->
try check_info(Player) of
ok ->
do_info(Player)
catch throw : Code ->
{false, Code}
end.
%% @doc 请求挑战
challenge(Player) ->
try check_challenge(Player) of
ok ->
do_challenge(Player)
catch throw : Code ->
{false, Code}
end.
%% @doc 请求完成任务
submit(Player, Id) ->
try check_submit(Player, Id) of
ok ->
do_submit(Player, Id)
catch throw : Code ->
{false, Code}
end.
%% @doc 请求修改提示状态
hint(Player, DayHint) ->
try check_hint(Player, DayHint) of
ok ->
do_hint(Player, DayHint)
catch throw : Code ->
{false, Code}
end.
%% @doc 获取函数
%% @doc 获取数据
-spec lookup(PlayerId :: integer()) -> #player_ancient_test{}.
lookup(PlayerId) when is_integer(PlayerId) ->
case cache_unit:lookup(cache_player_ancient_test, PlayerId) of
undefined ->
#player_ancient_test{
player_id = PlayerId
};
AncientTest -> AncientTest
end;
lookup(Player) ->
lookup(player_lib:player_id(Player)).
%% @doc 保存数据
save_info(AncientTest) ->
cache_unit:insert(cache_player_ancient_test, AncientTest).
%% @doc 检查函数
%% @doc 检查山海试炼信息
check_info(Player) ->
ok.
%% @doc 检查挑战
check_challenge(Player) ->
ok.
%% @doc 检查完成任务
check_submit(Player, Id) ->
ok.
%% @doc 检查修改提示状态
check_hint(Player, DayHint) ->
ok.
%% @doc 修改函数
%% @doc 山海试炼信息
do_info(Player) ->
{ok, #ancient_test_info_reply{}}.
%% @doc 挑战
do_challenge(Player) ->
{ok, #ancient_test_challenge_reply{}}.
%% @doc 完成任务
do_submit(Player, Id) ->
{ok, #ancient_test_submit_reply{}}.
%% @doc 修改提示状态
do_hint(Player, DayHint) ->
{ok, #ancient_test_hint_reply{}}.