/trunk/Demo.Mmose.Core/ServerEngine/Entity/Suit/Reputation/BaseReputationHandler.cs

# · C# · 283 lines · 180 code · 26 blank · 77 comment · 16 complexity · a4502c0f4ea664eb2344f0c9afc4c1b9 MD5 · raw file

  1. #region zh-CHS 2006 - 2008 DemoSoft 团队 | en 2006 - 2008 DemoSoft Team
  2. // NOTES
  3. // ---------------
  4. //
  5. // This file is a part of the MMOSE(Massively Multiplayer Online Server Engine) for .NET.
  6. //
  7. // 2006-2008 DemoSoft Team
  8. //
  9. //
  10. // First Version : by H.Q.Cai - mailto:caihuanqing@hotmail.com
  11. /***************************************************************************
  12. *
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU Lesser General Public License as published
  15. * by the Free Software Foundation; either version 2.1 of the License, or
  16. * (at your option) any later version.
  17. *
  18. ***************************************************************************/
  19. #region zh-CHS 包含名字空间 | en Include namespace
  20. using System;
  21. using System.Diagnostics;
  22. using System.Threading;
  23. using Demo.Mmose.Core.Common;
  24. using Demo.Mmose.Core.Common.SafeCollections;
  25. using Demo.Mmose.Core.Util;
  26. #endregion
  27. namespace Demo.Mmose.Core.Entity.Suit.Reputation
  28. {
  29. /// <summary>
  30. ///
  31. /// </summary>
  32. public class BaseReputationHandler<T> where T : BaseReputation
  33. {
  34. #region zh-CHS 共有属性 | en Public Properties
  35. /// <summary>
  36. /// 给出脚本里面的可运动物体的数量(NPCs、Monster)
  37. /// </summary>
  38. public int Count
  39. {
  40. get { return m_Reputations.Count; }
  41. }
  42. #endregion
  43. #region zh-CHS ReputationManager方法 | en Public Methods
  44. #region zh-CHS 私有成员变量 | en Private Member Variables
  45. /// <summary>
  46. ///
  47. /// </summary>
  48. private SafeDictionary<long, T> m_Reputations = new SafeDictionary<long, T>();
  49. #endregion
  50. /// <summary>
  51. ///
  52. /// </summary>
  53. [MultiThreadedWarning( "zh-CHS", "(Reputation)当前的数组是列表临时产生的,不能保存数组用于以后操作:警告!" )]
  54. public T[] ToArray()
  55. {
  56. return m_Reputations.ToArrayValues();
  57. }
  58. /// <summary>
  59. ///
  60. /// </summary>
  61. /// <param name="baseTaxiNode"></param>
  62. public bool AddReputation( long lReputationSerial, T reputationT )
  63. {
  64. if ( reputationT == null )
  65. {
  66. Debug.WriteLine( "BaseReputationManager.AddReputation(...) - reputationT == null error!" );
  67. return false;
  68. }
  69. EventHandler<BeforeAddReputationCallEventArgs<T>> tempBeforeEventArgs = m_ThreadEventBeforeAddReputationCall;
  70. if ( tempBeforeEventArgs != null )
  71. {
  72. BeforeAddReputationCallEventArgs<T> eventArgs = new BeforeAddReputationCallEventArgs<T>( reputationT, this );
  73. tempBeforeEventArgs( this, eventArgs );
  74. if ( eventArgs.IsCancel == true )
  75. return false;
  76. }
  77. m_Reputations.Add( lReputationSerial, reputationT );
  78. EventHandler<AfterAddReputationCallEventArgs<T>> tempAfterEventArgs = m_ThreadEventAfterAddReputationCall;
  79. if ( tempAfterEventArgs != null )
  80. {
  81. AfterAddReputationCallEventArgs<T> eventArgs = new AfterAddReputationCallEventArgs<T>( reputationT, this );
  82. tempAfterEventArgs( this, eventArgs );
  83. }
  84. return true;
  85. }
  86. /// <summary>
  87. ///
  88. /// </summary>
  89. /// <returns></returns>
  90. public bool RemoveReputation( long lReputationSerial )
  91. {
  92. T reputationT = FindReputationOnSerial( lReputationSerial );
  93. if ( reputationT == null )
  94. return false;
  95. EventHandler<BeforeRemoveReputationCallEventArgs<T>> tempBeforeEventArgs = m_ThreadEventBeforeRemoveReputationCall;
  96. if ( tempBeforeEventArgs != null )
  97. {
  98. BeforeRemoveReputationCallEventArgs<T> eventArgs = new BeforeRemoveReputationCallEventArgs<T>( reputationT, this );
  99. tempBeforeEventArgs( this, eventArgs );
  100. if ( eventArgs.IsCancel == true )
  101. return false;
  102. }
  103. m_Reputations.Remove( lReputationSerial );
  104. EventHandler<AfterRemoveReputationCallEventArgs<T>> tempAfterEventArgs = m_ThreadEventAfterRemoveReputationCall;
  105. if ( tempAfterEventArgs != null )
  106. {
  107. AfterRemoveReputationCallEventArgs<T> eventArgs = new AfterRemoveReputationCallEventArgs<T>( reputationT, this );
  108. tempAfterEventArgs( this, eventArgs );
  109. }
  110. return true;
  111. }
  112. /// <summary>
  113. ///
  114. /// </summary>
  115. /// <returns></returns>
  116. public T FindReputationOnSerial( long lReputationSerial )
  117. {
  118. return m_Reputations.GetValue( lReputationSerial );
  119. }
  120. #endregion
  121. #region zh-CHS 共有事件 | en Public Event
  122. #region zh-CHS AddReputationCall事件 | en Public Event
  123. #region zh-CHS 私有成员变量 | en Private Member Variables
  124. /// <summary>
  125. ///
  126. /// </summary>
  127. private EventHandler<BeforeAddReputationCallEventArgs<T>> m_ThreadEventBeforeAddReputationCall;
  128. /// <summary>
  129. ///
  130. /// </summary>
  131. private ReaderWriterLockSlim m_LockThreadEventBeforeAddReputationCall = new ReaderWriterLockSlim();
  132. #endregion
  133. /// <summary>
  134. ///
  135. /// </summary>
  136. public event EventHandler<BeforeAddReputationCallEventArgs<T>> ThreadBeforeAddReputationCall
  137. {
  138. add
  139. {
  140. m_LockThreadEventBeforeAddReputationCall.EnterWriteLock();
  141. {
  142. m_ThreadEventBeforeAddReputationCall += value;
  143. }
  144. m_LockThreadEventBeforeAddReputationCall.ExitWriteLock();
  145. }
  146. remove
  147. {
  148. m_LockThreadEventBeforeAddReputationCall.EnterWriteLock();
  149. {
  150. m_ThreadEventBeforeAddReputationCall -= value;
  151. }
  152. m_LockThreadEventBeforeAddReputationCall.ExitWriteLock();
  153. }
  154. }
  155. #region zh-CHS 私有成员变量 | en Private Member Variables
  156. /// <summary>
  157. ///
  158. /// </summary>
  159. private EventHandler<AfterAddReputationCallEventArgs<T>> m_ThreadEventAfterAddReputationCall;
  160. /// <summary>
  161. ///
  162. /// </summary>
  163. private ReaderWriterLockSlim m_LockThreadEventAfterAddReputationCall = new ReaderWriterLockSlim();
  164. #endregion
  165. /// <summary>
  166. ///
  167. /// </summary>
  168. public event EventHandler<AfterAddReputationCallEventArgs<T>> ThreadAfterAddReputationCall
  169. {
  170. add
  171. {
  172. m_LockThreadEventAfterAddReputationCall.EnterWriteLock();
  173. {
  174. m_ThreadEventAfterAddReputationCall += value;
  175. }
  176. m_LockThreadEventAfterAddReputationCall.ExitWriteLock();
  177. }
  178. remove
  179. {
  180. m_LockThreadEventAfterAddReputationCall.EnterWriteLock();
  181. {
  182. m_ThreadEventAfterAddReputationCall -= value;
  183. }
  184. m_LockThreadEventAfterAddReputationCall.ExitWriteLock();
  185. }
  186. }
  187. #endregion
  188. #region zh-CHS RemoveReputationCall事件 | en Public Event
  189. #region zh-CHS 私有成员变量 | en Private Member Variables
  190. /// <summary>
  191. ///
  192. /// </summary>
  193. private EventHandler<BeforeRemoveReputationCallEventArgs<T>> m_ThreadEventBeforeRemoveReputationCall;
  194. /// <summary>
  195. ///
  196. /// </summary>
  197. private ReaderWriterLockSlim m_LockThreadEventBeforeRemoveReputationCall = new ReaderWriterLockSlim();
  198. #endregion
  199. /// <summary>
  200. ///
  201. /// </summary>
  202. public event EventHandler<BeforeRemoveReputationCallEventArgs<T>> ThreadBeforeRemoveReputationCall
  203. {
  204. add
  205. {
  206. m_LockThreadEventBeforeRemoveReputationCall.EnterWriteLock();
  207. {
  208. m_ThreadEventBeforeRemoveReputationCall += value;
  209. }
  210. m_LockThreadEventBeforeRemoveReputationCall.ExitWriteLock();
  211. }
  212. remove
  213. {
  214. m_LockThreadEventBeforeRemoveReputationCall.EnterWriteLock();
  215. {
  216. m_ThreadEventBeforeRemoveReputationCall -= value;
  217. }
  218. m_LockThreadEventBeforeRemoveReputationCall.ExitWriteLock();
  219. }
  220. }
  221. #region zh-CHS 私有成员变量 | en Private Member Variables
  222. /// <summary>
  223. ///
  224. /// </summary>
  225. private EventHandler<AfterRemoveReputationCallEventArgs<T>> m_ThreadEventAfterRemoveReputationCall;
  226. /// <summary>
  227. ///
  228. /// </summary>
  229. private ReaderWriterLockSlim m_LockThreadEventAfterRemoveReputationCall = new ReaderWriterLockSlim();
  230. #endregion
  231. /// <summary>
  232. ///
  233. /// </summary>
  234. public event EventHandler<AfterRemoveReputationCallEventArgs<T>> ThreadAfterRemoveReputationCall
  235. {
  236. add
  237. {
  238. m_LockThreadEventAfterRemoveReputationCall.EnterWriteLock();
  239. {
  240. m_ThreadEventAfterRemoveReputationCall += value;
  241. }
  242. m_LockThreadEventAfterRemoveReputationCall.ExitWriteLock();
  243. }
  244. remove
  245. {
  246. m_LockThreadEventAfterRemoveReputationCall.EnterWriteLock();
  247. {
  248. m_ThreadEventAfterRemoveReputationCall -= value;
  249. }
  250. m_LockThreadEventAfterRemoveReputationCall.ExitWriteLock();
  251. }
  252. }
  253. #endregion
  254. #endregion
  255. }
  256. }
  257. #endregion