CustomMessageContext.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*----------------------------------------------------------------
  2. Copyright (C) 2015 Senparc
  3. 文件名:CustomMessageContext.cs
  4. 文件功能描述:微信消息上下文
  5. 创建标识:Senparc - 20150312
  6. ----------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Runtime.Remoting.Messaging;
  11. using System.Text;
  12. using Senparc.Weixin.Context;
  13. using Senparc.Weixin.MP.Entities;
  14. namespace Senparc.Weixin.MP.Sample.CommonService.CustomMessageHandler
  15. {
  16. public class CustomMessageContext : MessageContext<IRequestMessageBase,IResponseMessageBase>
  17. {
  18. public CustomMessageContext()
  19. {
  20. base.MessageContextRemoved += CustomMessageContext_MessageContextRemoved;
  21. }
  22. /// <summary>
  23. /// 当上下文过期,被移除时触发的时间
  24. /// </summary>
  25. /// <param name="sender"></param>
  26. /// <param name="e"></param>
  27. void CustomMessageContext_MessageContextRemoved(object sender, Senparc.Weixin.Context.WeixinContextRemovedEventArgs<IRequestMessageBase,IResponseMessageBase> e)
  28. {
  29. /* 注意,这个事件不是实时触发的(当然你也可以专门写一个线程监控)
  30. * 为了提高效率,根据WeixinContext中的算法,这里的过期消息会在过期后下一条请求执行之前被清除
  31. */
  32. var messageContext = e.MessageContext as CustomMessageContext;
  33. if (messageContext == null)
  34. {
  35. return;//如果是正常的调用,messageContext不会为null
  36. }
  37. //TODO:这里根据需要执行消息过期时候的逻辑,下面的代码仅供参考
  38. //Log.InfoFormat("{0}的消息上下文已过期",e.OpenId);
  39. //api.SendMessage(e.OpenId, "由于长时间未搭理客服,您的客服状态已退出!");
  40. }
  41. }
  42. }