mod_logSubscribe.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. typedef ULONG LogTypeSeverity[Log_Debug + 1][Severity_High + 1];
  4. class CLogSubscribeEntity : public CEntityBase
  5. , public ITimerListener
  6. , public ISysVarListener
  7. , public IBroadcastListener
  8. , public ILogListener
  9. {
  10. public:
  11. CLogSubscribeEntity():m_logCalCount(NULL) {
  12. m_logCalCount = new LogTypeSeverity[0x1000];
  13. }
  14. virtual ~CLogSubscribeEntity() {
  15. if (m_logCalCount)
  16. delete[] m_logCalCount;
  17. }
  18. virtual const char *GetEntityName() const { return "logSubscribe"; }
  19. /*for {ITimerListener} implement*/
  20. void OnTimeout(DWORD dwTimerID)
  21. {
  22. LOG_TRACE("timeout, id: %d", dwTimerID);
  23. }
  24. /*for {ISysVarListener} implement */
  25. virtual void OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName)
  26. {
  27. LOG_TRACE("entity:%s key:%s value:%s, old_value:%s", pszEntityName, pszKey, pszValue, pszOldValue);
  28. }
  29. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext)
  30. {
  31. LOG_FUNCTION();
  32. ErrorCodeEnum ec = Error_Succeed;
  33. Dbg("to subscribe all entity log.");
  34. GetFunction()->SubscribeLog(m_logSubUUID, this, Log_Ignore, Severity_None, Error_IgnoreAll, -2, NULL, false);
  35. pTransactionContext->SendAnswer(Error_Succeed);
  36. }
  37. virtual void OnStarted()
  38. {
  39. LOG_FUNCTION();
  40. }
  41. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  42. {
  43. LOG_FUNCTION();
  44. Dbg("to unsubscribe all entity log.");
  45. GetFunction()->UnsubscribeLog(m_logSubUUID);
  46. pTransactionContext->SendAnswer(Error_Succeed);
  47. }
  48. void OnBroadcastEvent(CUUID SubID,
  49. const char* pszEntityName,
  50. DWORD dwMessageId,
  51. DWORD dwMessageSignature,
  52. CAutoBuffer Buffer)
  53. {
  54. Dbg("OnBroadcastEvent: %s, %s, 0x%X, 0x%X, buffer size: %u", (LPCTSTR)SubID.ToString(), pszEntityName,
  55. dwMessageId, dwMessageSignature, Buffer.GetCount());
  56. }
  57. void OnLog(const CAutoArray<CUUID>& SubIDs
  58. , const CUUID nLogID
  59. , const LogTypeEnum eLogType
  60. , const SeverityLevelEnum eLevel
  61. , const DWORD dwSysError, const DWORD dwUserCode
  62. , const DWORD dwEntityInstanceID, const WORD wEntityDevelID
  63. , const CAutoArray<DWORD>& Param
  64. , const char* pszEntityName, const char* pszModuleName, const char* pszMessage)
  65. {
  66. if (m_logCalCount) {
  67. m_logCalCount[wEntityDevelID][eLogType][eLevel]++;
  68. }
  69. Dbg("OnLog(%s, %d, %d, 0x%X, 0x%X, 0x%X, 0x%04X, %s, %s, %s",
  70. (LPCTSTR)nLogID.ToString(), eLogType, eLevel, dwSysError, dwUserCode,
  71. dwEntityInstanceID, wEntityDevelID, pszEntityName, pszModuleName, pszMessage);
  72. if (Param.GetCount() > 0) {
  73. for (int i = 0; i < Param.GetCount(); ++i) {
  74. Dbg("Params[%d]: %d", i, Param[i]);
  75. }
  76. }
  77. }
  78. private:
  79. CUUID m_logSubUUID;
  80. LogTypeSeverity* m_logCalCount;
  81. };
  82. SP_BEGIN_ENTITY_MAP()
  83. SP_ENTITY(CLogSubscribeEntity)
  84. SP_END_ENTITY_MAP()