Exemplo n.º 1
0
        /// <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());
            }
        }
Exemplo n.º 2
0
        /// <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());
            }
        }