1- using GameFrameX . NetWork ;
1+ using System . Diagnostics ;
2+ using GameFrameX . Log ;
3+ using GameFrameX . NetWork ;
24using GameFrameX . NetWork . Abstractions ;
5+ using GameFrameX . Setting ;
36
4- namespace GameFrameX . Core . BaseHandler ;
5-
6- /// <summary>
7- /// 基础消息处理器
8- /// </summary>
9- public abstract class BaseMessageHandler : IMessageHandler
7+ namespace GameFrameX . Core . BaseHandler
108{
119 /// <summary>
12- /// 网络频道
10+ /// 基础消息处理器
1311 /// </summary>
14- public INetWorkChannel NetWorkChannel { get ; private set ; }
12+ public abstract class BaseMessageHandler : IMessageHandler
13+ {
14+ /// <summary>
15+ /// 网络频道
16+ /// </summary>
17+ public INetWorkChannel NetWorkChannel { get ; private set ; }
1518
16- /// <summary>
17- /// 消息对象
18- /// </summary>
19- public INetworkMessage Message { get ; private set ; }
19+ /// <summary>
20+ /// 消息对象
21+ /// </summary>
22+ public INetworkMessage Message { get ; private set ; }
2023
21- private bool _isInit ;
24+ private bool _isInit ;
2225
23- /// <summary>
24- /// 初始化
25- /// 子类实现必须调用
26- /// </summary>
27- /// <param name="message">消息对象</param>
28- /// <param name="netWorkChannel">网络渠道</param>
29- /// <returns></returns>
30- public virtual Task Init ( INetworkMessage message , INetWorkChannel netWorkChannel )
31- {
32- Message = message ;
33- NetWorkChannel = netWorkChannel ;
34- _isInit = true ;
35- return Task . CompletedTask ;
36- }
26+ /// <summary>
27+ /// 监控器
28+ /// </summary>
29+ private Stopwatch _stopwatch ;
3730
38- /// <summary>
39- /// 动作异步
40- /// </summary>
41- /// <returns></returns>
42- protected abstract Task ActionAsync ( ) ;
31+ /// <summary>
32+ /// 初始化
33+ /// 子类实现必须调用
34+ /// </summary>
35+ /// <param name="message">消息对象</param>
36+ /// <param name="netWorkChannel">网络渠道</param>
37+ /// <returns>初始化任务</returns>
38+ public virtual Task Init ( INetworkMessage message , INetWorkChannel netWorkChannel )
39+ {
40+ _stopwatch = new Stopwatch ( ) ;
41+ Message = message ;
42+ NetWorkChannel = netWorkChannel ;
43+ _isInit = true ;
44+ return Task . CompletedTask ;
45+ }
4346
44- /// <summary>
45- /// 执行
46- /// </summary>
47- /// <returns></returns>
48- public virtual Task InnerAction ( )
49- {
50- if ( _isInit == false )
47+ /// <summary>
48+ /// 动作异步
49+ /// </summary>
50+ /// <returns>动作执行任务</returns>
51+ protected abstract Task ActionAsync ( ) ;
52+
53+ /// <summary>
54+ /// 内部动作异步
55+ /// 记录执行时间并调用 <see cref="ActionAsync"/>
56+ /// </summary>
57+ /// <returns>动作执行任务</returns>
58+ protected Task InnerActionAsync ( )
5159 {
52- throw new Exception ( "消息处理器未初始化,请调用先Init方法,如果已经子类实现了Init方法,请调用在子类Init中调用父类Init方法" ) ;
60+ if ( GlobalSettings . IsDebug )
61+ {
62+ _stopwatch . Restart ( ) ;
63+ var result = ActionAsync ( ) ;
64+ _stopwatch . Stop ( ) ;
65+ LogHelper . Debug ( $ "消息处理器:{ GetType ( ) . Name } 执行耗时:{ _stopwatch . ElapsedMilliseconds } ms") ;
66+ return result ;
67+ }
68+
69+ return ActionAsync ( ) ;
5370 }
5471
55- return ActionAsync ( ) ;
72+ /// <summary>
73+ /// 执行
74+ /// </summary>
75+ /// <returns>执行任务</returns>
76+ public virtual Task InnerAction ( )
77+ {
78+ if ( _isInit == false )
79+ {
80+ throw new Exception ( "消息处理器未初始化,请调用先Init方法,如果已经子类实现了Init方法,请调用在子类Init中调用父类Init方法" ) ;
81+ }
82+
83+ return InnerActionAsync ( ) ;
84+ }
5685 }
5786}
0 commit comments