/// <summary> /// 接收消息处理。 /// </summary> /// <param name="type">消息类型。</param> /// <param name="dictionary">字典数据。</param> /// <returns>返回被动回复。</returns> protected virtual async Task <IReplyMessage> OnReceiveMessage(string type, IDictionary <string, string> dictionary) { if (!await TryEnterLock(dictionary["MsgId"].GetHashCode())) { return(new ReplyEmptyMessage()); } try { if (type == "text") { if (ReceiveText == null) { return(null); } var e = new UserTextMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserTextMessage>(e); await ReceiveText(this, arg); return(arg.Reply); } else if (type == "image") { if (ReceiveImage == null) { return(null); } var e = new UserImageMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserImageMessage>(e); await ReceiveImage(this, arg); return(arg.Reply); } else if (type == "voice") { if (ReceiveVoice == null) { return(null); } var e = new UserVoiceMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserVoiceMessage>(e); await ReceiveVoice(this, arg); return(arg.Reply); } else if (type == "video") { if (ReceiveVideo == null) { return(null); } var e = new UserVideoMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserVideoMessage>(e); await ReceiveVideo(this, arg); return(arg.Reply); } else if (type == "shortvideo") { if (ReceiveShortVideo == null) { return(null); } var e = new UserShortVideoMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserShortVideoMessage>(e); await ReceiveShortVideo(this, arg); return(arg.Reply); } else if (type == "location") { if (ReceiveLocation == null) { return(null); } var e = new UserLocationMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserLocationMessage>(e); await ReceiveLocation(this, arg); return(arg.Reply); } else if (type == "link") { if (ReceiveLink == null) { return(null); } var e = new UserLinkMessage(dictionary); var arg = new MessageHandlerEventArgs <IUserLinkMessage>(e); await ReceiveLink(this, arg); return(arg.Reply); } else { throw new UnknownMessageException(type); } } finally { ExitLock(dictionary["MsgId"].GetHashCode()); } }
/// <summary> /// 接收事件处理。 /// </summary> /// <param name="type">事件类型。</param> /// <param name="dictionary">字典数据。</param> /// <returns>返回被动回复。</returns> protected virtual async Task <IReplyMessage> OnReceiveEvent(string type, IDictionary <string, string> dictionary) { if (!await TryEnterLock(dictionary["FromUserName"].GetHashCode() + dictionary["CreateTime"].GetHashCode())) { return(new ReplyEmptyMessage()); } try { switch (type) { case "subscribe": case "unsubscribe": if (dictionary.ContainsKey("Ticket")) { if (Scan != null) { var e = new UserScanEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserScanEvent>(e); await Scan(this, arg); return(arg.Reply); } } else { if (Subscribe != null) { var e = new UserSubscribeEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserSubscribeEvent>(e); await Subscribe(this, arg); return(arg.Reply); } } return(null); case "scan": if (Scan != null) { var e = new UserScanEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserScanEvent>(e); await Scan(this, arg); return(arg.Reply); } return(null); case "location": if (Locate != null) { var e = new UserLocatedEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserLocatedEvent>(e); await Locate(this, arg); return(arg.Reply); } return(null); case "click": if (Click != null) { var e = new UserClickEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserClickEvent>(e); await Click(this, arg); return(arg.Reply); } return(null); case "templatesendjobfinish": if (TemplateSend != null) { var e = new UserTemplateSendEvent(dictionary); var arg = new MessageHandlerEventArgs <IUserTemplateSendEvent>(e); await TemplateSend(this, arg); return(arg.Reply); } return(null); default: throw new UnknownMessageException(type); } } finally { ExitLock(dictionary["FromUserName"].GetHashCode() + dictionary["CreateTime"].GetHashCode()); } }