rebar3 服务器
This commit is contained in:
@@ -0,0 +1,291 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @copyright (C) 2021, <COMPANY>
|
||||
%%% @doc
|
||||
%%%
|
||||
%%% @end
|
||||
%%% Created : 25. 5月 2021 11:15
|
||||
%%%-------------------------------------------------------------------
|
||||
-ifndef(__BASE_HRL__).
|
||||
-define(__BASE_HRL__, true).
|
||||
|
||||
-include_lib("stdlib/include/ms_transform.hrl").
|
||||
-include_lib("kernel/include/logger.hrl").
|
||||
|
||||
-define(RPC_CALL_TIMEOUT, 5000).
|
||||
-define(CALL_TIMEOUT, 5000).
|
||||
|
||||
%% atom define
|
||||
|
||||
%% 游戏校验key
|
||||
-define(AUTH_KEY, "4399-auth-key").
|
||||
-define(TBL_KEY, "44c78a8401fd692bdefb58a32220861b").
|
||||
-define(RECHARGE_KEY, "7e532cad3b95689afc4fddb7e9a83e09").
|
||||
-define(FN_NORMAL_KEY, "aef842b91f54a878d00ad0897ed02473").
|
||||
-define(CLIENT_KEY, "0248537b34d9cd80f8121fe07ec58eee").
|
||||
-define(RCC_KEY, "53b16e47b634cd6046e4da2884ff77d8").
|
||||
-define(API_KEY, "80260282bb470b304b60c03ab113e3ea"). % 通用api key
|
||||
|
||||
-ifndef(OK).
|
||||
-define(OK, ok).
|
||||
-endif.
|
||||
|
||||
%% 这里故意用的err,避免以系统抛异常的error冲突
|
||||
-ifndef(ERROR).
|
||||
-define(ERROR, error).
|
||||
-endif.
|
||||
|
||||
%% 这里故意用的err,避免以系统抛异常的error冲突
|
||||
-ifndef(ERR).
|
||||
-define(ERR, err).
|
||||
-endif.
|
||||
|
||||
-ifndef(TRUE).
|
||||
-define(TRUE, true).
|
||||
-endif.
|
||||
|
||||
-ifndef(FALSE).
|
||||
-define(FALSE, false).
|
||||
-endif.
|
||||
|
||||
-ifndef(TRUE_INT).
|
||||
-define(TRUE_INT, 1).
|
||||
-endif.
|
||||
|
||||
-ifndef(FALSE_INT).
|
||||
-define(FALSE_INT, 0).
|
||||
-endif.
|
||||
|
||||
-define(INT_TO_BOOLEAN(I), I =/= 0).
|
||||
-define(BOOLEAN_TO_INT(I), ?IF(I, ?TRUE_INT, ?FALSE_INT)).
|
||||
|
||||
-ifndef(UNDEFINED).
|
||||
-define(UNDEFINED, undefined).
|
||||
-endif.
|
||||
|
||||
-ifndef(CONTINUE).
|
||||
-define(CONTINUE, continue).
|
||||
-endif.
|
||||
|
||||
-ifndef(IGNORE).
|
||||
-define(IGNORE, ignore).
|
||||
-endif.
|
||||
|
||||
-ifndef(INFINITY).
|
||||
-define(INFINITY, infinity).
|
||||
-endif.
|
||||
|
||||
-ifndef(NONE).
|
||||
-define(NONE, none).
|
||||
-endif.
|
||||
|
||||
-ifndef(STOP).
|
||||
-define(STOP, stop).
|
||||
-endif.
|
||||
|
||||
-ifndef(SKIP).
|
||||
-define(SKIP, skip).
|
||||
-endif.
|
||||
|
||||
-ifndef(DISABLED).
|
||||
-define(DISABLED, disabled).
|
||||
-endif.
|
||||
|
||||
-ifndef(ENABLED).
|
||||
-define(ENABLED, enabled).
|
||||
-endif.
|
||||
|
||||
-ifndef(ONLINE).
|
||||
-define(ONLINE, online).
|
||||
-endif.
|
||||
|
||||
-ifndef(OFFLINE).
|
||||
-define(OFFLINE, offline).
|
||||
-endif.
|
||||
|
||||
-ifndef(VALUE).
|
||||
-define(VALUE, value).
|
||||
-endif.
|
||||
|
||||
-ifndef(CONTINUE).
|
||||
-define(CONTINUE, continue).
|
||||
-endif.
|
||||
|
||||
|
||||
-define(IF(C, T), (?IF(C, T, skip))).
|
||||
-define(IF(C, T, F), (case (C) of true -> (T); false -> (F) end)).
|
||||
-define(MAP_GET(__K__, __Map__, __Default__), (case (__Map__) of #{__K__ := __V__} -> __V__; #{} -> (__Default__) end)).
|
||||
|
||||
-define(THROW(ErrCode), throw(ErrCode)).
|
||||
|
||||
-define(ASSERT(Express),
|
||||
case (Express) of
|
||||
true ->
|
||||
ok;
|
||||
false ->
|
||||
error(assert_error)
|
||||
end).
|
||||
|
||||
-define(ASSERT(Express, ErrCode),
|
||||
case (Express) of
|
||||
true ->
|
||||
ok;
|
||||
false ->
|
||||
error(ErrCode)
|
||||
end).
|
||||
|
||||
%% try_catch 捕获玩家自己抛的异常,需要玩家自行匹配
|
||||
-define(TRY_CATCH(Fun),
|
||||
try
|
||||
(Fun)
|
||||
catch
|
||||
_:TRY_CACHE_Error:Trace ->
|
||||
?ERROR(?MODULE, "snip err, Error = ~p~n", [{TRY_CACHE_Error, Trace}]),
|
||||
TRY_CACHE_Error
|
||||
end
|
||||
).
|
||||
|
||||
-define(CHILD_SPEC(I, Type), {I, {I, start_link, []}, permanent, 50000, Type, [I]}).
|
||||
-define(CHILD_SPEC(I, Type, Args), {I, {I, start_link, Args}, permanent, 50000, Type, [I]}).
|
||||
-define(CHILD_SPEC(C, I, Type, Args), {C, {I, start_link, Args}, permanent, 50000, Type, [I]}).
|
||||
|
||||
|
||||
%% 控制台打印
|
||||
-define(PRINT(F), ?PRINT(F, [])).
|
||||
-define(PRINT(F, D), (io:format("~w:~w/~w:~w ~w ~w " ++ F ++ "\n", [?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY, ?LINE, self(), erlang:get('!role_id!') | D]))).
|
||||
|
||||
-define(DEBUG(T, F, D), ?LOG_DEBUG(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(INFO(T, F, D), ?LOG_INFO(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(WARN(T, F, D), ?LOG_WARNING(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(CRIT(T, F, D), ?LOG_CRITICAL(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(NOTICE(T, F, D), ?LOG_NOTICE(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(ERROR(T, F, D), ?LOG_ERROR(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
|
||||
-define(DEBUG(F, D), ?LOG_DEBUG(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(INFO(F, D), ?LOG_INFO(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(WARN(F, D), ?LOG_WARNING(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(CRIT(F, D), ?LOG_CRITICAL(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(NOTICE(F, D), ?LOG_NOTICE(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
-define(ERROR(F, D), ?LOG_ERROR(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_base]})).
|
||||
|
||||
-define(DEBUG_TAG(Tag, Data), ?DEBUG(Tag, "~p=~w", [??Data, Data])).
|
||||
|
||||
%% http单独打印
|
||||
-define(HTTP_DEBUG(T, F, D), ?LOG_DEBUG(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_INFO(T, F, D), ?LOG_INFO(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_WARN(T, F, D), ?LOG_WARNING(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_CRIT(T, F, D), ?LOG_CRITICAL(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_NOTICE(T, F, D), ?LOG_NOTICE(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_ERROR(T, F, D), ?LOG_ERROR(F, D, #{tag => T, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
|
||||
-define(HTTP_DEBUG(F, D), ?LOG_DEBUG(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_INFO(F, D), ?LOG_INFO(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_WARN(F, D), ?LOG_WARNING(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_CRIT(F, D), ?LOG_CRITICAL(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_NOTICE(F, D), ?LOG_NOTICE(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
-define(HTTP_ERROR(F, D), ?LOG_ERROR(F, D, #{tag => ?MODULE, id => erlang:get('!role_id!'), domain => [ms_http]})).
|
||||
|
||||
%% 协议录制
|
||||
-define(GET_PROTO_TIME, (
|
||||
case erlang:get(proto_time) of
|
||||
?UNDEFINED ->
|
||||
erlang:put(proto_time, misc_lib:now_ms()),
|
||||
0;
|
||||
ProtoTime ->
|
||||
ProtoTime1 = misc_lib:now_ms(),
|
||||
erlang:put(proto_time, ProtoTime1),
|
||||
ProtoTime1 - ProtoTime
|
||||
end)).
|
||||
-define(PROTO_TRACE(F, D), ?LOG_DEBUG(F, D, #{tag => proto, time1=>?GET_PROTO_TIME, id => erlang:get('!role_id!'), domain=>[proto]})).
|
||||
|
||||
%% 打印错误码日志
|
||||
-define(CODE_LOG(Code, Desc, LogArgs), ?INFO(?MODULE, "err_code:~p ~ts ~p=~w", [Code, Desc, ??LogArgs, LogArgs])).
|
||||
|
||||
%% 错误码处理, 打印错误码日志,返回{err,code}
|
||||
-define(ERROR_CODE(Code, LogArgs),
|
||||
begin
|
||||
?CODE_LOG(Code, "", LogArgs),
|
||||
{?ERR, Code}
|
||||
end).
|
||||
|
||||
%% 错误码处理, 打印错误码日志,返回{err,code}
|
||||
-define(ERROR_CODE(Code, Desc, LogArgs),
|
||||
begin
|
||||
?CODE_LOG(Code, Desc, LogArgs),
|
||||
{?ERR, Code}
|
||||
end).
|
||||
|
||||
-define(SECONDS_PER_MINUTE, 60).
|
||||
-define(SECONDS_PER_HOUR, 3600).
|
||||
-define(SECONDS_PER_DAY, 86400).
|
||||
-define(SECONDS_PER_WEEK, 604800).
|
||||
-define(SECONDS_PER_YEAR, 31536000).
|
||||
-define(SECONDS_PER_LEAP_YEAR, 31622400).
|
||||
-define(SECONDS_FROM_0_TO_1970, 62167219200).
|
||||
|
||||
-define(MSECS_PER_SEC, 1000).
|
||||
-define(MSECS_PER_MINUTE, 60000).
|
||||
-define(MSECS_PER_HOUR, 3600000).
|
||||
-define(MSECS_PER_DAY, 86400000).
|
||||
-define(MSECS_PER_WEEK, 604800000).
|
||||
|
||||
-define(DAYS_PER_WEEK, 7).
|
||||
-define(DAYS_PER_YEAR, 365).
|
||||
-define(DAYS_PER_LEAP_YEAR, 366).
|
||||
-define(DAYS_PER_4YEARS, 1461).
|
||||
-define(DAYS_PER_100YEARS, 36524).
|
||||
-define(DAYS_PER_400YEARS, 146097).
|
||||
-define(DAYS_FROM_0_TO_1970, 719528).
|
||||
|
||||
-define(TEN, 10). % 0.01k
|
||||
-define(ONE_HUNDRED, 100). % 0.1k
|
||||
-define(ONE_THOUSAND, 1000). % 1k
|
||||
-define(TEN_THOUSAND, 10000). % 1w
|
||||
-define(HUNDRED_THOUSAND, 100000). % 10w
|
||||
-define(ONE_MILLION, 1000000). % 100w
|
||||
-define(HUNDRED_MILLION, 100000000). % 1亿
|
||||
|
||||
-define(INTMAX, 2147483647).
|
||||
-define(UINTMAX, 4294967294).
|
||||
-define(UINT64MAX, 18446744073709551615).
|
||||
|
||||
-define(RECORD_NAME_POS, 1).
|
||||
|
||||
-type role_id() :: integer().
|
||||
|
||||
%% 日常清理偏移时间
|
||||
-define(DAILY_HOUR, 0).
|
||||
-define(DAILY_RESET_SHIFT_TIME, (3600 * ?DAILY_HOUR)).
|
||||
|
||||
-define(ETS_OPTIONS, [set, public, named_table, {keypos, 1}, {read_concurrency, true}, {write_concurrency, auto}]).
|
||||
|
||||
%% todo,以下宏属于游戏相关的,写在这里是因为登录服和游戏服都要用到同一套宏定义
|
||||
|
||||
%% 服务器状态
|
||||
-define(SERVER_STATUS_SMOOTH, 1). %% 服务器状态 - 流畅
|
||||
-define(SERVER_STATUS_CROWD, 2). %% 服务器转态 - 拥挤
|
||||
-define(SERVER_STATUS_FULL, 3). %% 服务器状态 - 爆满
|
||||
|
||||
%% 蜂鸟角色互通平台
|
||||
-define(FN_PLATFORM_APP_AND, <<"1">>).
|
||||
-define(FN_PLATFORM_APP_IOS, <<"2">>).
|
||||
-define(FN_PLATFORM_WECHAT_AND, <<"1388">>).
|
||||
-define(FN_PLATFORM_WECHAT_IOS, <<"1390">>).
|
||||
-define(FN_PLATFORM_INTER_LIST, [?FN_PLATFORM_APP_AND, ?FN_PLATFORM_APP_IOS, ?FN_PLATFORM_WECHAT_AND, ?FN_PLATFORM_WECHAT_IOS]).
|
||||
|
||||
%% 角色类型
|
||||
-define(ACCOUNT_TYPE_VISITOR, 0). %% 游客
|
||||
-define(ACCOUNT_TYPE_NORMAL, 1). %% 普通玩家
|
||||
-define(ACCOUNT_TYPE_INNER, 2). %% 内部玩家
|
||||
-define(ACCOUNT_TYPE_INNER_MGR, 3). %% 内部玩家管理员
|
||||
|
||||
-define(SERVER_ACTIVE_AUTO, 0). %% 服务器自动激活,开服时间到了自动开服
|
||||
-define(SERVER_ACTIVE_CLOSE, 1). %% 服务器未激活,开服时间到了也不开服
|
||||
-define(SERVER_ACTIVE_OPEN, 2). %% 服务器立刻激活,马上开服
|
||||
|
||||
-define(PLATFORM_ZONE_ALL, 0). %% 通用专区
|
||||
-define(PLATFORM_ZONE_WECHAT, 1). %% 微信专区
|
||||
-define(PLATFORM_ZONE_APP, 2). %% app专区
|
||||
|
||||
-define(PLATFORM_ZONE_WECHAT_FN_PLATFORMS, [?FN_PLATFORM_WECHAT_AND, ?FN_PLATFORM_WECHAT_IOS]).
|
||||
|
||||
-endif.
|
||||
Reference in New Issue
Block a user