源战役
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

147 lines
8.0 KiB

%%% -----------------------------------------
%%% @author huangyongxing@yeah.net
%%% @doc
%%% 跨服中心节点监控树
%%% 2017-03-02
%%% @end
%%% -----------------------------------------
-module(game_center_sup).
-behaviour(supervisor).
%% API
-export([
start_link/1
,stop/0
]).
%% Supervisor callbacks
-export([init/1]).
-include("common.hrl").
-include("clusters_zone.hrl").
-define(SERVER, ?MODULE).
start_link([StrHost, StrPort | _]) ->
Host = list_to_binary(StrHost),
Port = list_to_integer(StrPort),
application:set_env(kernel, dist_auto_connect, never),
%% 程序运行日志logger管理
logger_game_h:init_log(),
%% 启动监控树
supervisor:start_link({local, ?SERVER}, ?MODULE, [Host, Port]).
%% init(Args) -> {ok, {RestartStrategy, Children}}.
%% Args : list(),
%% RestartStrategy : {one_for_one, MaxR, MaxT},
%% Children : [ChildSpec].
init([Host, Port]) ->
?INFO_TTY("Start supervisor [~w] ...", [?SERVER]),
%% {RestartStrategy, MaxR, MaxT}, MaxT秒内超过MaxR次重启,即停止监控树和子进程
RestartStrategy = {one_for_one, 50, 5},
Children = get_children([Host, Port]),
{ok, {RestartStrategy, Children}}.
%% 关服回调
%% 注意,这里的关服操作完成之后,才调用application:stop/1关闭application
stop() ->
%% TODO 跨服中的玩家踢出到所在服
ok.
get_children([_Host, Port]) ->
%% 监控树策略:{Id, StartFunc = {_, _, _}, Restart, Shutdown, Type, Modules}
ListNormalStart = [
{mod_log, start_link, []} % 日志
,{czone, start_link, []} % 标准跨服分区管理
,{svr_vitality_center_mgr, start_link, []} % 分区活跃度管理
% ,{clusters_zone, start_link, [?SMALL_ZONE_TYPE]} % 跨服服务器分区管理:小分区
% ,{clusters_zone, start_link, [?MEDIUM_ZONE_TYPE]} % 跨服服务器分区管理:中分区
% ,{clusters_zone, start_link, [?LARGE_ZONE_TYPE]} % 跨服服务器分区管理:大分区
,{mod_scene_npc, start_link,[]} % 场景npc进程
,{mod_scene_object_create, start_link, []} % 创建场景对象进程
,{scene_mgr, start_link,[]} % 场景进程池管理进程
,{online_monitor, start_link, []} % 在线资源监控、数据库心跳
,{scene_enter_queue, start_link, []} % 场景排队进入管理
,{mod_team_create, start_link, []} % 组队id进程
,{mod_drop, start_link, []} % 掉落包进程
,{mod_crontab, start_link,[]} % cron服务进程
,{timer_min, start_link,[]}
,{timer_hour, start_link,[]}
,{timer_midnight, start_link,[]}
,{timer_4_clock, start_link,[]}
,{timer_custom_kf, start_link, []}
,{mod_custom_act_kf, start_link, []} % 跨服定制活动
,{mod_global_counter, start_link, []} % 单服计数器
,{mod_top_pk_rank_center, start_link, []} % 巅峰竞技排行榜
,{mod_top_pk_match, start_link, []} % 巅峰竞技匹配
,{race_rank_act, start_link, []} % 跨服竞榜活动管理
,{race_rank_mgr, start_link, []} % 跨服竞榜排行榜进程(需要在race_rank_zone进程后面启动)
,{mod_charm_beach, start_link, []} % 魅力海滩
,{mod_cloud_buy_mgr, start_link, []} % 众仙云购
,{mod_chat_cache, start_link, []} % 聊天缓存
,{mod_3v3_center, start_link, []} % 跨服3v3
,{mod_3v3_rank, start_link, []} % 跨服3v3
,{mod_drumwar_mgr, start_link, []} % 钻石大战
,{mod_kf_1vn, start_link, []} % 跨服1vn
,{mod_kf_1vn_mgr, start_link, []} % 跨服1vn
,{mod_kf_1vn_auction, start_link, []} % 跨服1vn
,{mod_dun_multi_mgr_cluster, start_link,[]} % 跨服组队
,{mod_dungeon_agent, start_link, []} % 副本管理
,{mod_kf_supplication, start_link, []} % 祈愿
,{mod_draw_record_kf, start_link, []} % 跨服抽奖记录
,{mod_void_fam, start_link, []} % 无尽领域
,{camp_war_mgr, start_link, []} % 跨服团战
,{mod_cgwar_ctrl, start_link, []} % 跨服帮战时间管理
,{cross_guild_war_mgr, start_link, []} % 跨服帮战
,{god_dun_rank_mgr, start_link, []} % 唤神副本排行
,{madness_land, start_link,[]} % 狂战领域
,{mod_wasteland_war, start_link, []} % 废土战场(饥饿游戏)跨服管理
,{beauty_contest, start_link, []} % 靓丽大赛
,{mod_chat_zone, start_link, []} % 跨服聊天
,{seckill_center, start_link, []} % 秒杀活动
,{mod_vie_rank_center,start_link,[]} % 通用封榜
,{cross_rank_mgr, start_link, []} % 跨服排行
,{guard_dun_assist_mgr, start_link, []} % 守卫信标榜单
,{jump_act_center, start_link, []} % 跳一跳游戏
,{deserted_boss_sup, start_link, []} % 混乱星域/古战场boss/废都幻魔
,{mod_legion_mgr,start_link,[]} % 指挥室
,{mod_legion_rank_mgr,start_link,[]} % 军功榜
,{mod_military_rank_mgr,start_link,[]} % 军衔榜
,{cross_point_fight_center, start_link, []} % 沙盘争夺战-总管理系统
,{mod_pet_support_center, start_link, []} % 宠物跨服战力榜
],
ListFirstStart = [ % 其他依赖内容,最早启动
{game_env, start_link, [?SERVER]}
,{center_init, start_link, []}
,{center_svr_reg, start_link, []}
],
ListLastStart = [ % 最后启动内容
{clusters_center, start_link, []}
,{web_interface, start_link, [Port]}
,{merge, start_link, []}
,{mod_activitycalen, start_link, []} % 活动日历
],
%% 数据库连接
DbChildSpecList = db:child_spec_list(),
[
case format_child(ChildInfo) of
false -> throw(error);
Child -> Child
end || ChildInfo <- DbChildSpecList ++ ListFirstStart ++ ListNormalStart ++ ListLastStart
].
%% 将简易配置转换为supervisor的childspec格式
format_child({clusters_zone = Mod, Fun, Args}) ->
ChildName = [Mod | Args],
{ChildName, {Mod, Fun, Args}, permanent, 10000, worker, [Mod]};
format_child({Mod, Fun, Args}) ->
{Mod, {Mod, Fun, Args}, permanent, 10000, worker, [Mod]};
format_child({StartFunc = {Mod, _, _}, {child_name, ChildName}}) ->
{ChildName, StartFunc, permanent, 10000, worker, [Mod]};
format_child({StartFunc = {Mod, _, _}, Type}) ->
{Mod, StartFunc, permanent, 10000, Type, [Mod]};
format_child(Child = {_ChildName, _StartFunc = {_, _, _}, _Restart, _Shutdown, _Type, _Modules}) ->
Child;
format_child(_) ->
?ERR_TTY("监控树错误格式"),
false.