Exemple #1
0
        private void ScanAction(object sender, string data)
        {
            try
            {
                var scanEventArgs = new ScanEventArgs(data);
                Task.Run(() => { ScanEvent?.Invoke(sender, scanEventArgs); });

                var response = scanEventArgs.Wait(_responseTimeoutInMilliseconds);
                if (response.ConfirmationReceived)
                {
                    _serialPort.Write($"OK{Constants.End}");
                    _serialPort.Write(response.ConfirmationMessage.TextCommandData + Constants.End);

                    if (!response.IsSuccess)
                    {
                        _serialPort.Write(Constants.BeepBadReadTone + Constants.LedRedOn + Constants.End);
                    }
                }
                else
                {
                    ScanConfirmationNotreceivedEvent?.Invoke(this, new ScanConfirmationNotreceivedEventArgs(data));
                }
            }
            catch (Exception e)
            {
                MessageEvent?.Invoke(this, new MessageEventArgs(e));
            }
        }
Exemple #2
0
        private void ScanCallback(ScanEvent obj)
        {
            var systemobject = SystemObject.GetObject(obj);

            switch (systemobject.ObjectType)
            {
            case ObjectType.Star:
                HandleStarObject((StarObject)systemobject);
                break;

            case ObjectType.Planet:
                HandlePlanetObject((PlanetObject)systemobject);
                break;

            case ObjectType.ClusterBelt:
                HandleClusterBeltObject((ClusterBeltObject)systemobject);
                break;

            case ObjectType.Ring:
                HandleRingObject((RingObject)systemobject);
                break;

            default:
                break;
            }
        }
 internal ScanEvent InvokeEvent(ScanEvent arg)
 {
     if (_api.ValidateEvent(arg))
     {
         Scan?.Invoke(_api, arg);
     }
     return(arg);
 }
        private void FSSScanCallback(ScanEvent obj)
        {
            var systemobject = SystemObject.GetObject(obj);

            _objects.Add(systemobject);

            SetValue(() => CurrentBodySingals, _objects.Where(m => m.ObjectType == ObjectType.Star || m.ObjectType == ObjectType.Planet).Count());
            SetValue(() => CurrentNonBodySingals, _objects.Where(m => m.ObjectType == ObjectType.ClusterBelt).Count());
            OnAction("AddObject");
        }
Exemple #5
0
        internal static ClusterBeltObject CreateCluster(ScanEvent obj)
        {
            return(new ClusterBeltObject()
            {
                ObjectType = ObjectType.ClusterBelt,
                Scantype = obj.ScanType,

                Name = obj.BodyName,
                Id = obj.BodyId,
                Parents = obj.Parents,
            });
        }
Exemple #6
0
        internal static RingObject CreateRing(ScanEvent obj)
        {
            return(new RingObject()
            {
                ObjectType = ObjectType.Ring,
                Scantype = obj.ScanType,

                Name = obj.BodyName,
                Id = obj.BodyId,
                Parents = obj.Parents,
            });
        }
Exemple #7
0
 private void HandleError(string scanId, ScanData data, string error, bool fatal)
 {
     // TODO: Logging
     if (fatal)
     {
         var msg = $"Error on scanning [{data.Item.ScanSource}]: {error}";
         _log.Error(msg);
         ScanEvent?.Invoke(this, new ScanEventArgs(data.Item.CallbackId, msg));
         data.SetError(error);
     }
     else
     {
         _log.Warning($"Warning for scan [{data.Item.ScanSource}]: {error}");
     }
 }
Exemple #8
0
        internal static StarObject CreateStar(ScanEvent obj)
        {
            return(new StarObject()
            {
                ObjectType = ObjectType.Star,
                Scantype = obj.ScanType,

                Name = obj.BodyName,
                Id = obj.BodyId,
                Parents = obj.Parents,
                Age = obj.AgeMY,

                Subclass = obj.Subclass,
                Startype = obj.StarType,
                Luminosity = obj.Luminosity,
                Landable = obj.Landable,
            });
        }
Exemple #9
0
        internal static PlanetObject CreatePlanet(ScanEvent obj)
        {
            return(new PlanetObject()
            {
                ObjectType = ObjectType.Planet,
                Scantype = obj.ScanType,

                Name = obj.BodyName,
                Id = obj.BodyId,
                Parents = obj.Parents,
                PlanetClass = obj.PlanetClass,
                Mass = obj.MassEm,
                Landable = obj.Landable,
                Composition = obj.Composition,
                Atmosphere = obj.Atmosphere,
                AtmosphereComposition = obj.AtmosphereComposition,
                AtmosphereType = obj.AtmosphereType
            });
        }
Exemple #10
0
        internal static SystemObject GetObject(ScanEvent obj)
        {
            switch (GetObjectType(obj))
            {
            case ObjectType.Star:
                return(CreateStar(obj));

            case ObjectType.Planet:
                return(CreatePlanet(obj));

            case ObjectType.ClusterBelt:
                return(CreateCluster(obj));

            case ObjectType.Ring:
                return(CreateRing(obj));

            default:
                return(null);
            }
        }
Exemple #11
0
        private void HandleError(string scanId, ScanData data, string error, bool severe)
        {
            const string itemFailed = "Item is failed: scanning skipped";

            if (String.IsNullOrEmpty(error))
            {
                error  = "Task was cancelled";
                severe = false;
            }

            if (severe)
            {
                data.Errors++;

                var msg = $"Errors: {data.Errors} in a row on scanning [{data.Item.ScanSource}]: {error}";

                _log.Error(msg);
                data.StateDescription = error;

                if (data.Errors >= _errorsToFail)
                {
                    data.State = ScanEventType.Error;
                    ScanEvent?.Invoke(this, new ScanEventArgs(data.Item.CallbackID, ScanEventType.Error, msg + "\n" + itemFailed));
                    _log.Error(itemFailed);
                }
                else
                {
                    data.State = ScanEventType.Warning;
                }
            }
            else
            {
                data.State            = ScanEventType.None;
                data.StateDescription = error;
                data.Errors           = 0;
                _log.Warning($"Warning for scan [{data.Item.ScanSource}]: {error}");
            }
        }
Exemple #12
0
        /// <summary>
        /// 事件模型
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        private EventBase GetEventModel(XmlUtils xml)
        {
            string    eventType = xml.GetValue("/xml/Event").ToLower();
            EventBase message   = null;

            switch (eventType)
            {
            case "unsubscribe":
                message = new UnsubscribeEvent();
                break;

            case "subscribe":
                message = new SubscribeEvent();
                break;

            case "scan":
                message = new ScanEvent();
                break;

            case "location":
                message = new LocationEvent();
                break;

            case "click":
                message = new ClickEvent();
                break;

            case "view":
                message = new ViewEvent();
                break;

            default:
                return(null);
            }

            return(message);
        }
Exemple #13
0
 internal static ObjectType GetObjectType(ScanEvent obj)
 {
     if (!string.IsNullOrEmpty(obj.StarType))
     {
         return(ObjectType.Star);
     }
     else if (!string.IsNullOrEmpty(obj.PlanetClass))
     {
         return(ObjectType.Planet);
     }
     else if (obj.Parents.Sum(m => m.Ring) > 0)
     {
         return(ObjectType.ClusterBelt);
     }
     else if (string.IsNullOrEmpty(obj.PlanetClass) || string.IsNullOrEmpty(obj.StarType))
     {
         return(ObjectType.Ring);
     }
     else
     {
         Debug.WriteLine("Unkown Scan objecttype");
         return(0);
     }
 }
Exemple #14
0
 private void RfidScanned(ScanEventArgs e)
 {
     ScanEvent?.Invoke(this, e);
 }
Exemple #15
0
        private async Task ScanAsync(string scanId, ScanData data)
        {
            if (data.Error != null)
            {
                return;
            }

            using (var lck = data.GetLock())
            {
                if (lck.IsCaptured)
                {
                    data.IncAttempts();

                    using (var service = CreateService())
                    {
                        var item  = data.Item;
                        var train = await service.FetchTrainAsync(item.Date, item.Source, item.Destination, item.TrainNumber);

                        if (train != null)
                        {
                            if (train.CoachTypes != null && train.CoachTypes.Length > 0)
                            {
                                CoachType[] coachTypes = null;

                                if (!String.IsNullOrEmpty(item.CoachType))
                                {
                                    var coachType = FindCoachType(train, item.CoachType);

                                    if (coachType != null)
                                    {
                                        coachTypes = new[] { coachType };
                                    }
                                    //else if (!allowOtherCoachTypes)
                                    //{
                                    //	HandleError(scanId, data, "No vacant coaches " + item.CoachType, false);
                                    //	return;
                                    //}
                                }

                                if (coachTypes == null)
                                {
                                    coachTypes = train.CoachTypes;
                                }

                                var sessionId = await BookAsync(train, coachTypes, item.FirstName, item.LastName);

                                if (!String.IsNullOrEmpty(sessionId))
                                {
                                    var msg = $"Reserved ticket for [{item.ScanSource}]: {sessionId}";
                                    _log.Info(msg);
                                    ScanEvent?.Invoke(this, new ScanEventArgs(item.CallbackId, msg));
                                    //Abort(scanId); rebook again in case it is bought by requester
                                    return;
                                }
                            }

                            HandleError(scanId, data, "No vacant seats", false);
                        }
                        else
                        {
                            HandleError(scanId, data, $"Train {item.TrainNumber} not found", true);
                        }
                    }
                }
            }
        }
 private string DealWithMsg(ScanEvent scanEvent)
 {
     return("");
 }
Exemple #17
0
 protected virtual string ProcessScanEvent(ScanEvent msg)
 {
     return(DefaultProcess(msg));
 }
Exemple #18
0
 protected override Message ProcessScanEvent(ScanEvent msg)
 {
     return(base.ProcessScanEvent(msg));
 }
Exemple #19
0
        /// <summary>
        /// 从请求中提取微信消息推送的请求数据
        /// </summary>
        /// <param name="request">推送过来的请求</param>
        /// <returns>消息推送的请求数据</returns>
        public MsgRequest GetMsgRequestData(WeChatEncryptMsg requestEncryptMsg)
        {
            //微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
            //消息排重,推荐使用msgid排重;事件类型消息推荐使用FromUserName + CreateTime 排重
            //服务器无法保证在五秒内处理并回复,直接回复success;直接回复空串,微信不再重试
            //开发者在5秒内未回复任何内容,开发者回复了异常数据,微信系统提示“该公众号暂时无法提供服务,请稍后再试”
            if (weChatConfig == null)
            {
                throw new NullReferenceException("请使用构造MessageLinkUp(idOrAppId),或初始化Initialize(idOrAppId)");
            }
            string xmlText;//消息

            if (weChatConfig.EnCrypt)
            {
                //消息是密文,要解密后处理
                xmlText = MessageDecrypt(requestEncryptMsg);
            }
            else
            {
                var          stream = requestEncryptMsg.Body; //具体消息数据在请求流里面
                StreamReader reader = new StreamReader(stream);
                xmlText = reader.ReadToEnd();                 //消息
                reader.Close();
            }
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xmlText);
            XmlNode    rootNode   = xmlDoc.SelectSingleNode("xml");
            MsgRequest msgRequest = null;

            if (rootNode["MsgType"] == null)
            {
                msgRequest = new MsgRequest();
            }
            else
            {
                string msgType = rootNode["MsgType"].InnerText;
                switch (msgType)
                {
                case "text":
                    ContentMsg contentMsg = new ContentMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        contentMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Content"] != null)
                    {
                        contentMsg.Content = rootNode["Content"].InnerText;
                    }
                    msgRequest = contentMsg;
                    break;

                case "image":
                    PictureMsg pictureMsg = new PictureMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        pictureMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["PicUrl"] != null)
                    {
                        pictureMsg.PicUrl = rootNode["PicUrl"].InnerText;
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        pictureMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    msgRequest = pictureMsg;
                    break;

                case "voice":
                    VoiceMsg voiceMsg = new VoiceMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        voiceMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        voiceMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["Format"] != null)
                    {
                        voiceMsg.Format = rootNode["Format"].InnerText;
                    }
                    if (rootNode["Recognition"] != null)
                    {
                        voiceMsg.Recognition = rootNode["Recognition"].InnerText;
                    }
                    msgRequest = voiceMsg;
                    break;

                case "video":
                    VideoMsg videoMsg = new VideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        videoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        videoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        videoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = videoMsg;
                    break;

                case "shortvideo":
                    ShortVideoMsg shortVideoMsg = new ShortVideoMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        shortVideoMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["MediaId"] != null)
                    {
                        shortVideoMsg.MediaId = rootNode["MediaId"].InnerText;
                    }
                    if (rootNode["ThumbMediaId"] != null)
                    {
                        shortVideoMsg.ThumbMediaId = rootNode["ThumbMediaId"].InnerText;
                    }
                    msgRequest = shortVideoMsg;
                    break;

                case "location":
                    LocationMsg locationMsg = new LocationMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        locationMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Location_X"] != null)
                    {
                        locationMsg.Location_X = Convert.ToDouble(rootNode["Location_X"].InnerText);
                    }
                    if (rootNode["Location_Y"] != null)
                    {
                        locationMsg.Location_Y = Convert.ToDouble(rootNode["Location_Y"].InnerText);
                    }
                    if (rootNode["Scale"] != null)
                    {
                        locationMsg.Scale = int.Parse(rootNode["Scale"].InnerText);
                    }
                    if (rootNode["Label"] != null)
                    {
                        locationMsg.Label = rootNode["Label"].InnerText;
                    }
                    msgRequest = locationMsg;
                    break;

                case "link":
                    LinkMsg linkMsg = new LinkMsg();
                    if (rootNode["MsgId"] != null)
                    {
                        linkMsg.MsgId = Convert.ToInt64(rootNode["MsgId"].InnerText);
                    }
                    if (rootNode["Title"] != null)
                    {
                        linkMsg.Title = rootNode["Title"].InnerText;
                    }
                    if (rootNode["Description"] != null)
                    {
                        linkMsg.Description = rootNode["Description"].InnerText;
                    }
                    if (rootNode["Url"] != null)
                    {
                        linkMsg.Url = rootNode["Url"].InnerText;
                    }
                    msgRequest = linkMsg;
                    break;

                case "event":
                    if (rootNode["Event"] != null)
                    {
                        string eventStr = rootNode["Event"].InnerText.ToLower();
                        switch (eventStr)
                        {
                        case "subscribe":
                            if (rootNode["EventKey"] != null)
                            {
                                string eventKey = rootNode["EventKey"].InnerText;
                                if (eventKey.StartsWith("qrscene_"))
                                {
                                    ScanSubscribeEvent scanSubscribeEvent = new ScanSubscribeEvent();
                                    scanSubscribeEvent.EventKey = eventKey;
                                    if (rootNode["Ticket"] != null)
                                    {
                                        scanSubscribeEvent.Ticket = rootNode["Ticket"].InnerText;
                                    }
                                    msgRequest = scanSubscribeEvent;
                                }
                            }
                            if (msgRequest == null)
                            {
                                msgRequest = new SubscribeEvent();
                            }
                            break;

                        case "unsubscribe": msgRequest = new UnSubscribeEvent(); break;

                        case "scan":
                            ScanEvent scanEvent = new ScanEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                scanEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            if (rootNode["Ticket"] != null)
                            {
                                scanEvent.Ticket = rootNode["Ticket"].InnerText;
                            }
                            msgRequest = scanEvent;
                            break;

                        case "location":
                            LocationEvent locationEvent = new LocationEvent();
                            if (rootNode["Latitude"] != null)
                            {
                                locationEvent.Latitude = double.Parse(rootNode["Latitude"].InnerText);
                            }
                            if (rootNode["Longitude"] != null)
                            {
                                locationEvent.Longitude = double.Parse(rootNode["Longitude"].InnerText);
                            }
                            if (rootNode["Precision"] != null)
                            {
                                locationEvent.Precision = double.Parse(rootNode["Precision"].InnerText);
                            }
                            msgRequest = locationEvent;
                            break;

                        case "click":
                            ClickEvent clickEvent = new ClickEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                clickEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = clickEvent;
                            break;

                        case "view":
                            ViewEvent viewEvent = new ViewEvent();
                            if (rootNode["EventKey"] != null)
                            {
                                viewEvent.EventKey = rootNode["EventKey"].InnerText;
                            }
                            msgRequest = viewEvent;
                            break;

                        case "masssendjobfinish":        //批量发送群发消息处理完成的消息通知
                            MassSendJobFinishEvent sendJobFinishEvent = new MassSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                sendJobFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                sendJobFinishEvent.Status = Enum.Parse <MassSendJobStatus>(rootNode["Status"].InnerText);
                            }
                            if (rootNode["TotalCount"] != null)
                            {
                                sendJobFinishEvent.TotalCount = int.Parse(rootNode["TotalCount"].InnerText);
                            }
                            if (rootNode["FilterCount"] != null)
                            {
                                sendJobFinishEvent.FilterCount = int.Parse(rootNode["FilterCount"].InnerText);
                            }
                            if (rootNode["SentCount"] != null)
                            {
                                sendJobFinishEvent.SentCount = int.Parse(rootNode["SentCount"].InnerText);
                            }
                            if (rootNode["ErrorCount"] != null)
                            {
                                sendJobFinishEvent.ErrorCount = int.Parse(rootNode["ErrorCount"].InnerText);
                            }
                            XmlNodeList checkResultList = rootNode["CopyrightCheckResult"]?.ChildNodes;
                            if (checkResultList != null && checkResultList.Count > 0)
                            {
                                XmlNode countNode      = rootNode["CopyrightCheckResult"]["Count"];
                                XmlNode checkStateNode = rootNode["CopyrightCheckResult"]["CheckState"];
                                XmlNode resultListNode = rootNode["CopyrightCheckResult"]["ResultList"];
                                if (countNode != null)
                                {
                                    sendJobFinishEvent.CopyrightCheckCount = int.Parse(countNode.InnerText);
                                }
                                else if (checkStateNode != null)
                                {
                                    sendJobFinishEvent.CheckState = int.Parse(checkStateNode.InnerText);
                                }
                                else if (resultListNode != null)
                                {
                                    sendJobFinishEvent.ResultList = new List <ArticleCheckResult>();
                                    foreach (XmlNode itemNode in resultListNode)
                                    {
                                        sendJobFinishEvent.ResultList.Add(new ArticleCheckResult()
                                        {
                                            ArticleIdx            = int.Parse(itemNode["ArticleIdx"].InnerText),
                                            UserDeclareState      = int.Parse(itemNode["UserDeclareState"].InnerText),
                                            AuditState            = int.Parse(itemNode["AuditState"].InnerText),
                                            OriginalArticleUrl    = itemNode["OriginalArticleUrl"].InnerText,
                                            OriginalArticleType   = int.Parse(itemNode["OriginalArticleType"].InnerText),
                                            CanReprint            = bool.Parse(itemNode["CanReprint"].InnerText),
                                            NeedReplaceContent    = bool.Parse(itemNode["NeedReplaceContent"].InnerText),
                                            NeedShowReprintSource = bool.Parse(itemNode["NeedShowReprintSource"].InnerText),
                                        });
                                    }
                                }
                            }
                            msgRequest = sendJobFinishEvent;
                            break;

                        case "templatesendjobfinish":
                            TemplateSendJobFinishEvent templateSendFinishEvent = new TemplateSendJobFinishEvent();
                            if (rootNode["MsgID"] != null)
                            {
                                templateSendFinishEvent.MsgID = int.Parse(rootNode["MsgID"].InnerText);
                            }
                            if (rootNode["Status"] != null)
                            {
                                templateSendFinishEvent.Status = rootNode["Status"].InnerText;
                            }
                            break;

                        default: msgRequest = new MsgRequest(); break;
                        }
                    }
                    break;

                default: msgRequest = new MsgRequest(); break;
                }
                msgRequest.MsgType = msgType;
            }
            msgRequest.ToUserName   = rootNode["ToUserName"].InnerText;
            msgRequest.FromUserName = rootNode["FromUserName"].InnerText;
            msgRequest.CreateTime   = int.Parse(rootNode["CreateTime"].InnerText);

            return(msgRequest);
        }
Exemple #20
0
        //private async Task ScanAsync(string scanId, ScanData data)
        private async Task ScanAsync(UzService service, string scanId, ScanData data)
        {
            if (data.State == ScanEventType.Error)
            {
                return;
            }

            using (var lck = data.GetLock())
            {
                if (lck.IsCaptured)
                {
                    data.Attempts++;

                    //using (var service = CreateService())
                    {
                        var item   = data.Item;
                        var trains = await service.ListTrainsAsync(item.Date, item.Source, item.Destination);

                        if (trains != null && trains.Length > 0)
                        {
                            var train = trains.GetByNumber(item.TrainNumber);

                            if (train != null)
                            {
                                if (train.CoachTypes != null && train.CoachTypes.Length > 0)
                                {
                                    CoachType[] coachTypes = null;

                                    if (!String.IsNullOrEmpty(item.CoachType))
                                    {
                                        coachTypes = FindCoachTypes(train, item.CoachType);

                                        if (coachTypes.Length == 0 && item.ExactCoachType)
                                        {
                                            HandleError(scanId, data, "No vacant coaches " + item.CoachType, false);
                                            return;
                                        }
                                    }

                                    if (coachTypes == null || coachTypes.Length == 0)
                                    {
                                        coachTypes = train.CoachTypes;
                                    }

                                    var(sessionId, coach, seat) = await BookAsync(train, coachTypes, item.FirstName, item.LastName);

                                    if (!String.IsNullOrEmpty(sessionId))
                                    {
                                        var msg = $"Reserved ticket for [{item.ScanSource}]:\nTrain: {train.Number} Coach: {coach.Number}-{coach.Type} Seat: {seat.Number} Price: {(seat.Price??0)/100m:##.00 UAH}\n{sessionId}";
                                        _log.Info(msg);
                                        data.State            = ScanEventType.Success;
                                        data.StateDescription = sessionId;
                                        ScanEvent?.Invoke(this, new ScanEventArgs(item.CallbackID, ScanEventType.Success, msg));
                                        //Abort(scanId); rebook again in case it is bought by requester
                                        return;
                                    }
                                }

                                HandleError(scanId, data, "No vacant seats", false);
                            }
                            else
                            {
                                HandleError(scanId, data, $"Train {item.TrainNumber} not found", false);
                            }
                        }
                        else
                        {
                            HandleError(scanId, data, "No tickets selling for date/train", false);
                        }
                    }
                }
            }
        }
Exemple #21
0
        /// <summary>
        /// 初始化微信消息处理事件
        /// </summary>
        private void InitEventsHandle()
        {
            #region 普通消息
            //文本消息
            handlerList.Add(MessageType.Text, ReceiveEventType.None, (data) =>
            {
                ReceiveTextMessage?.Invoke(data.ConvertBodyTo <TextMessage>(), Replier.Create(data));
            });

            //图片消息
            handlerList.Add(MessageType.Image, ReceiveEventType.None, (data) =>
            {
                ReceiveImageMessage?.Invoke(data.ConvertBodyTo <ImageMessage>(), Replier.Create(data));
            });

            //语音消息
            handlerList.Add(MessageType.Voice, ReceiveEventType.None, (data) =>
            {
                ReceiveVoiceMessage?.Invoke(data.ConvertBodyTo <VoiceMessage>(), Replier.Create(data));
            });

            //视频消息
            handlerList.Add(MessageType.Video, ReceiveEventType.None, (data) =>
            {
                ReceiveVideoMessage?.Invoke(data.ConvertBodyTo <VideoMessage>(), Replier.Create(data));
            });

            //小视频消息
            handlerList.Add(MessageType.ShortVideo, ReceiveEventType.None, (data) =>
            {
                ReceiveShortVideoMessage?.Invoke(data.ConvertBodyTo <ShortVideoMessage>(), Replier.Create(data));
            });

            //地理位置消息
            handlerList.Add(MessageType.Location, ReceiveEventType.None, (data) =>
            {
                ReceiveLocationMessage?.Invoke(data.ConvertBodyTo <LocationMessage>(), Replier.Create(data));
            });

            //链接消息
            handlerList.Add(MessageType.Link, ReceiveEventType.None, (data) =>
            {
                ReceiveLinkMessage?.Invoke(data.ConvertBodyTo <LinkMessage>(), Replier.Create(data));
            });
            #endregion

            #region 事件消息
            //关注事件
            handlerList.Add(MessageType.Event, ReceiveEventType.Subscribe, (data) =>
            {
                var _event = data.ConvertBodyTo <ScanEventArgs>();
                if (string.IsNullOrEmpty(_event.EventKey))
                {
                    SubscribeEvent?.Invoke(_event, Replier.Create(data));
                }
                else
                {
                    _event.EventKey = _event.EventKey.Substring("qrscene_".Length);
                    ScanEvent?.Invoke(_event, Replier.Create(data));
                }
            });

            //取消关注事件
            handlerList.Add(MessageType.Event, ReceiveEventType.UnSubscribe, (data) =>
            {
                PassReply(data);
                UnSubscribeEvent?.Invoke(data.ConvertBodyTo <EventArgsBase>());
            });

            //扫描带参数二维码事件
            handlerList.Add(MessageType.Event, ReceiveEventType.Scan, (data) =>
            {
                ScanEvent?.Invoke(data.ConvertBodyTo <ScanEventArgs>(), Replier.Create(data));
            });

            //上报地理位置事件
            handlerList.Add(MessageType.Event, ReceiveEventType.Location, (data) =>
            {
                PassReply(data);
                LocationEvent?.Invoke(data.ConvertBodyTo <LocationEventArgs>());
            });

            //点击菜单拉取消息事件
            handlerList.Add(MessageType.Event, ReceiveEventType.Click, (data) =>
            {
                MenuClickEvent?.Invoke(data.ConvertBodyTo <WithKeyEventArgs>(), Replier.Create(data));
            });

            //点击菜单跳转链接事件
            handlerList.Add(MessageType.Event, ReceiveEventType.View, (data) =>
            {
                PassReply(data);
                ViewEvent?.Invoke(data.ConvertBodyTo <WithKeyEventArgs>());
            });

            //群发任务完成事件
            handlerList.Add(MessageType.Event, ReceiveEventType.MessageEndJobFinish, (data) =>
            {
                PassReply(data);
                MessageEndJobFinishEvent?.Invoke(data.ConvertBodyTo <MessageEndJobFinishEventArgs>());
            });

            //模板消息发送完成事件
            handlerList.Add(MessageType.Event, ReceiveEventType.TemplateSendJobFinish, (data) =>
            {
                PassReply(data);
                TemplateSendJobFinishEvent?.Invoke(data.ConvertBodyTo <TemplateSendJobFinishEventArgs>());
            });

            //买单事件推送
            handlerList.Add(MessageType.Event, ReceiveEventType.user_pay_from_pay_cell, (data) =>
            {
                PassReply(data);
                UserPayFromPayCellEvent?.Invoke(data.ConvertBodyTo <UserPayFromPayCellEventArgs>(), Replier.Create(data));
            });

            //卡券审核事件
            handlerList.Add(MessageType.Event, ReceiveEventType.card_pass_check, (data) =>
            {
                PassReply(data);
                CardPassCheckEvent?.Invoke(data.ConvertBodyTo <CardPassCheckEventArgs>(), Replier.Create(data));
            });

            //卡券领取事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_get_card, (data) =>
            {
                PassReply(data);
                UserGetCardEvent?.Invoke(data.ConvertBodyTo <UserGetCardEventArgs>(), Replier.Create(data));
            });

            //卡券转赠事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_gifting_card, (data) =>
            {
                PassReply(data);
                UserGiftingCardEvent?.Invoke(data.ConvertBodyTo <UserGiftingCardEventArgs>(), Replier.Create(data));
            });

            //卡券删除事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_del_card, (data) =>
            {
                PassReply(data);
                UserDelCardEvent?.Invoke(data.ConvertBodyTo <UserDelCardEventArgs>(), Replier.Create(data));
            });

            //卡券核销事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_consume_card, (data) =>
            {
                PassReply(data);
                UserConsumeCardEvent?.Invoke(data.ConvertBodyTo <UserConsumeCardEventArgs>(), Replier.Create(data));
            });

            //进入会员卡事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_view_card, (data) =>
            {
                PassReply(data);
                UserViewCardEvent?.Invoke(data.ConvertBodyTo <UserViewCardEventArgs>(), Replier.Create(data));
            });

            //从卡券进入公众号会话事件
            handlerList.Add(MessageType.Event, ReceiveEventType.user_enter_session_from_card, (data) =>
            {
                PassReply(data);
                UserEnterSessionFromCardEvent?.Invoke(data.ConvertBodyTo <UserEnterSessionFromCardEventArgs>(), Replier.Create(data));
            });

            //会员卡内容更新事件
            handlerList.Add(MessageType.Event, ReceiveEventType.update_member_card, (data) =>
            {
                PassReply(data);
                UpdateMemberCardEvent?.Invoke(data.ConvertBodyTo <UpdateMemberCardEventArgs>(), Replier.Create(data));
            });

            //会员卡激活事件推送
            handlerList.Add(MessageType.Event, ReceiveEventType.submit_membercard_user_info, (data) =>
            {
                PassReply(data);
                SubmitMemberCardUserInfoEvent?.Invoke(data.ConvertBodyTo <SubmitMemberCardUserInfoEventArgs>(), Replier.Create(data));
            });

            //库存报警事件
            handlerList.Add(MessageType.Event, ReceiveEventType.card_sku_remind, (data) =>
            {
                PassReply(data);
                CardSkuRemindEvent?.Invoke(data.ConvertBodyTo <CardSkuRemindEventArgs>(), Replier.Create(data));
            });

            //券点流水详情事件
            handlerList.Add(MessageType.Event, ReceiveEventType.card_pay_order, (data) =>
            {
                PassReply(data);
                CardPayOrderEvent?.Invoke(data.ConvertBodyTo <CardPayOrderEventArgs>(), Replier.Create(data));
            });

            #endregion
        }
 protected virtual void OnScanEvent(ScanEventArgs e)
 {
     ScanEvent?.Invoke(this, e);
 }
Exemple #23
0
 internal void InvokeScanEvent(ScanEvent arg)
 {
     ScanEvent?.Invoke(this, arg);
 }
Exemple #24
0
        private void AssertEvent(ScanEvent @event)
        {
            Assert.NotNull(@event);
            Assert.Equal(DateTime.Parse("2018-02-02T10:43:05Z"), @event.Timestamp);
            Assert.Equal(EventName, @event.Event);
            Assert.Equal(DiscoveryScanType.NavBeaconDetail, @event.ScanType);
            Assert.Equal("Procyon B 3 a", @event.BodyName);
            Assert.Equal(12, @event.BodyId);
            Assert.Equal(10048.152344, @event.DistanceFromArrivalLs, 6);
            Assert.True(@event.TidalLock);
            Assert.Equal(TerraformState.NotTerraformable, @event.TerraformState);
            Assert.Equal("Rocky body", @event.PlanetClass);
            Assert.Equal(string.Empty, @event.Atmosphere);
            Assert.Equal("None", @event.AtmosphereType);
            Assert.Equal(2, @event.AtmosphereComposition.Length);
            Assert.Equal("Hydrogen", @event.AtmosphereComposition[0].Name);
            Assert.Equal(74.043083, @event.AtmosphereComposition[0].Percent, 6);
            Assert.Equal(string.Empty, @event.Volcanism);
            Assert.Equal(0.025342, @event.MassEm, 6);
            Assert.Equal(2011975.250000, @event.Radius, 6);
            Assert.Equal(2.495225, @event.SurfaceGravity, 6);
            Assert.Equal(318.448792, @event.SurfaceTemperature, 6);
            Assert.Equal(0.000000, @event.SurfacePressure, 6);
            Assert.True(@event.Landable);
            Assert.Equal(11, @event.Materials.Length);
            Assert.Equal("iron", @event.Materials[0].Name);
            Assert.Equal(19.315084, @event.Materials[0].Percent, 6);
            Assert.Equal(0.000000, @event.Composition.Ice, 6);
            Assert.Equal(0.861282, @event.Composition.Rock, 6);
            Assert.Equal(0.138718, @event.Composition.Metal, 6);
            Assert.Equal(89655728.000000, @event.SemiMajorAxis, 6);
            Assert.Equal(0.000000, @event.Eccentricity, 6);
            Assert.Equal(4.566576, @event.OrbitalInclination, 6);
            Assert.Equal(309.656799, @event.Periapsis, 6);
            Assert.Equal(344902.937500, @event.OrbitalPeriod, 6);
            Assert.Equal(352425.468750, @event.RotationPeriod, 6);
            Assert.Equal(0.479157, @event.AxialTilt, 6);
            Assert.True(@event.WasMapped);
            Assert.True(@event.WasDiscovered);

            Assert.Equal(11, @event.Parents[0].Planet.Value);
            Assert.Null(@event.Parents[0].Star);
            Assert.Null(@event.Parents[0].Null);

            Assert.Equal(2, @event.Parents[1].Star.Value);
            Assert.Null(@event.Parents[1].Planet);
            Assert.Null(@event.Parents[1].Null);

            Assert.Equal(0, @event.Parents[2].Null.Value);
            Assert.Null(@event.Parents[2].Planet);
            Assert.Null(@event.Parents[2].Star);

            Assert.Equal(2, @event.Rings.Length);
            Assert.Equal("Imeut AB 2 A Ring", @event.Rings[0].Name);
            Assert.Equal(RingClass.MetalRich, @event.Rings[0].RingClass);
            Assert.Equal(2.1371e+09, @event.Rings[0].MassMt);
            Assert.Equal(5.7442e+07, @event.Rings[0].InnerRad);
            Assert.Equal(6.0438e+07, @event.Rings[0].OuterRad);

            Assert.Equal(BodyType.Planet, @event.BodyType);
        }
Exemple #25
0
 internal void InvokeScanEvent(ScanEvent arg) => ScanEvent?.Invoke(null, arg);