Example #1
0
 public Member_Action Create(CoreHelper.Enum.MemberActionType MemberActionType, string description)
 {
     var MemberID = Convert.ToInt32(CookieHelper.UID);
     Member_Action member_Action = new Member_Action()
     {
         MemberID = MemberID,
         ActionType = (int)MemberActionType,
         AddTime = DateTime.Now,
         Description = description,
         IP = HttpHelper.IP
     };
     DB_Service.Add<Member_Action>(member_Action);
     DB_Service.Commit();
     return member_Action;
 }
Example #2
0
        /// <summary>
        /// Reads the configuration from the config file and converts it to custom
        /// config objects which the end developer will use to get or set the properties.
        /// </summary>
        /// <returns>The custom config object.</returns>
        public IppConfiguration GetConfiguration()
        {
            IppConfiguration ippConfig = new IppConfiguration();

#if !NETSTANDARD2_0
            IppConfigurationSection ippConfigurationSection = IppConfigurationSection.Instance;
            if (ippConfigurationSection == null)
            {
                ippConfig.Logger = new Logger
                {
                    CustomLogger = new TraceLogger(),
                    RequestLog   = new RequestLog
                    {
                        EnableRequestResponseLogging  = false,
                        ServiceRequestLoggingLocation = System.IO.Path.GetTempPath()
                    }
                };

                ippConfig.Message = new Message
                {
                    Request = new Request
                    {
                        CompressionFormat   = CompressionFormat.GZip,
                        SerializationFormat = SerializationFormat.Xml//do not change this as it will break code for devs
                    },
                    Response = new Response
                    {
                        CompressionFormat   = CompressionFormat.GZip,
                        SerializationFormat = SerializationFormat.Json
                    }
                };

                ippConfig.BaseUrl = new BaseUrl
                {
                    Qbo = null,
                    Ips = null,
                    OAuthAccessTokenUrl    = null,
                    UserNameAuthentication = null
                };

                ippConfig.MinorVersion = new MinorVersion
                {
                    Qbo = null
                };

                ippConfig.VerifierToken = new VerifierToken
                {
                    Value = null
                };

                return(ippConfig);
            }

            ippConfig.Logger            = new Logger();
            ippConfig.Logger.RequestLog = new RequestLog();
            ippConfig.Logger.RequestLog.EnableRequestResponseLogging = ippConfigurationSection.Logger.RequestLog.EnableRequestResponseLogging;
            if (string.IsNullOrEmpty(ippConfigurationSection.Logger.RequestLog.RequestResponseLoggingDirectory))
            {
                ippConfig.Logger.RequestLog.ServiceRequestLoggingLocation = Path.GetTempPath();
            }
            else
            {
                string location = ippConfigurationSection.Logger.RequestLog.RequestResponseLoggingDirectory;
                if (!Directory.Exists(location))
                {
                    IdsException exception = new IdsException(Properties.Resources.ValidDirectoryPathMessage, new DirectoryNotFoundException());
                    IdsExceptionManager.HandleException(exception);
                }

                ippConfig.Logger.RequestLog.ServiceRequestLoggingLocation = ippConfigurationSection.Logger.RequestLog.RequestResponseLoggingDirectory;
            }

            if (!string.IsNullOrEmpty(ippConfigurationSection.Logger.CustomLogger.Name) && !string.IsNullOrEmpty(ippConfigurationSection.Logger.CustomLogger.Type) && ippConfigurationSection.Logger.CustomLogger.Enable)
            {
                Type customerLoggerType = Type.GetType(ippConfigurationSection.Logger.CustomLogger.Type);
                ippConfig.Logger.CustomLogger = Activator.CreateInstance(customerLoggerType) as ILogger;
            }
            else
            {
                ippConfig.Logger.CustomLogger = new TraceLogger();
            }

            switch (ippConfigurationSection.Security.Mode)
            {
            case SecurityMode.OAuth:
                OAuth2RequestValidator validator = new OAuth2RequestValidator(
                    ippConfigurationSection.Security.OAuth.AccessToken);
                ippConfig.Security = validator;
                break;

            case SecurityMode.Custom:
                if (!string.IsNullOrEmpty(ippConfigurationSection.Security.CustomSecurity.Name) && !string.IsNullOrEmpty(ippConfigurationSection.Security.CustomSecurity.Type) && ippConfigurationSection.Security.CustomSecurity.Enable)
                {
                    Type     customSecurityType = Type.GetType(ippConfigurationSection.Security.CustomSecurity.Type);
                    string[] paramateres        = ippConfigurationSection.Security.CustomSecurity.Params.Split(',');
                    ippConfig.Security = Activator.CreateInstance(customSecurityType, paramateres) as IRequestValidator;
                }

                break;
            }

            //// TODO : This will not be used now.
            ////if (!string.IsNullOrEmpty(ippConfigurationSection.Message.CustomSerializer.Name) && !string.IsNullOrEmpty(ippConfigurationSection.Message.CustomSerializer.Type) && ippConfigurationSection.Message.CustomSerializer.Enable)
            ////{
            ////    Type customSerializerType = Type.GetType(ippConfigurationSection.Message.CustomSerializer.Type);
            ////    IEntitySerializer entitySerializer = Activator.CreateInstance(customSerializerType) as IEntitySerializer;
            ////    if (ippConfigurationSection.Message.Request.SerializationFormat == SerializationFormat.Custom)
            ////    {
            ////        ippConfig.Message.Request.Serializer = entitySerializer;
            ////    }

            ////    if (ippConfigurationSection.Message.Response.SerializationFormat == SerializationFormat.Custom)
            ////    {

            ////        ippConfig.Message.Response.Serializer = entitySerializer;
            ////    }
            ////}

            ippConfig.Message          = new Message();
            ippConfig.Message.Request  = new Request();
            ippConfig.Message.Response = new Response();

            switch (ippConfigurationSection.Message.Request.CompressionFormat)
            {
            case Intuit.Ipp.Utility.CompressionFormat.None:
                ippConfig.Message.Request.CompressionFormat = CompressionFormat.None;
                break;

            case Intuit.Ipp.Utility.CompressionFormat.DEFAULT:
            case Intuit.Ipp.Utility.CompressionFormat.GZip:
                ippConfig.Message.Request.CompressionFormat = CompressionFormat.GZip;
                break;

            case Intuit.Ipp.Utility.CompressionFormat.Deflate:
                ippConfig.Message.Request.CompressionFormat = CompressionFormat.Deflate;
                break;

            default:
                break;
            }



            switch (ippConfigurationSection.Message.Response.CompressionFormat)
            {
            case Intuit.Ipp.Utility.CompressionFormat.None:
                ippConfig.Message.Response.CompressionFormat = CompressionFormat.None;
                break;

            case Intuit.Ipp.Utility.CompressionFormat.DEFAULT:
            case Intuit.Ipp.Utility.CompressionFormat.GZip:
                ippConfig.Message.Response.CompressionFormat = CompressionFormat.GZip;
                break;

            case Intuit.Ipp.Utility.CompressionFormat.Deflate:
                ippConfig.Message.Response.CompressionFormat = CompressionFormat.Deflate;
                break;
            }

            switch (ippConfigurationSection.Message.Request.SerializationFormat)
            {
            case Intuit.Ipp.Utility.SerializationFormat.DEFAULT:
            case Intuit.Ipp.Utility.SerializationFormat.Xml:
                ippConfig.Message.Request.SerializationFormat = SerializationFormat.Xml;    //do not change this as it will break code for devs
                break;

            case Intuit.Ipp.Utility.SerializationFormat.Json:
                ippConfig.Message.Request.SerializationFormat = SerializationFormat.Json;
                break;

            case Intuit.Ipp.Utility.SerializationFormat.Custom:
                ippConfig.Message.Request.SerializationFormat = SerializationFormat.Custom;
                break;
            }

            switch (ippConfigurationSection.Message.Response.SerializationFormat)
            {
            case Intuit.Ipp.Utility.SerializationFormat.Xml:
                ippConfig.Message.Response.SerializationFormat = SerializationFormat.Xml;
                break;

            case Intuit.Ipp.Utility.SerializationFormat.DEFAULT:
            case Intuit.Ipp.Utility.SerializationFormat.Json:
                ippConfig.Message.Response.SerializationFormat = SerializationFormat.Json;
                break;

            case Intuit.Ipp.Utility.SerializationFormat.Custom:
                ippConfig.Message.Response.SerializationFormat = SerializationFormat.Custom;
                break;
            }


            switch (ippConfigurationSection.Retry.Mode)
            {
            case RetryMode.Linear:
                if (!CoreHelper.IsInvalidaLinearRetryMode(
                        ippConfigurationSection.Retry.LinearRetry.RetryCount,
                        ippConfigurationSection.Retry.LinearRetry.RetryInterval))
                {
                    ippConfig.RetryPolicy = new IntuitRetryPolicy(
                        ippConfigurationSection.Retry.LinearRetry.RetryCount,
                        ippConfigurationSection.Retry.LinearRetry.RetryInterval);
                }

                break;

            case RetryMode.Incremental:
                if (!CoreHelper.IsInvalidaIncrementalRetryMode(
                        ippConfigurationSection.Retry.IncrementatlRetry.RetryCount,
                        ippConfigurationSection.Retry.IncrementatlRetry.InitialInterval,
                        ippConfigurationSection.Retry.IncrementatlRetry.Increment))
                {
                    ippConfig.RetryPolicy = new IntuitRetryPolicy(
                        ippConfigurationSection.Retry.IncrementatlRetry.RetryCount,
                        ippConfigurationSection.Retry.IncrementatlRetry.InitialInterval,
                        ippConfigurationSection.Retry.IncrementatlRetry.Increment);
                }

                break;

            case RetryMode.Exponential:
                if (!CoreHelper.IsInvalidaExponentialRetryMode(
                        ippConfigurationSection.Retry.ExponentialRetry.RetryCount,
                        ippConfigurationSection.Retry.ExponentialRetry.MinBackoff,
                        ippConfigurationSection.Retry.ExponentialRetry.MaxBackoff,
                        ippConfigurationSection.Retry.ExponentialRetry.DeltaBackoff))
                {
                    ippConfig.RetryPolicy = new IntuitRetryPolicy(
                        ippConfigurationSection.Retry.ExponentialRetry.RetryCount,
                        ippConfigurationSection.Retry.ExponentialRetry.MinBackoff,
                        ippConfigurationSection.Retry.ExponentialRetry.MaxBackoff,
                        ippConfigurationSection.Retry.ExponentialRetry.DeltaBackoff);
                }

                break;
            }

            ippConfig.BaseUrl = new BaseUrl();

            ippConfig.BaseUrl.Qbo = ippConfigurationSection.Service.BaseUrl.Qbo;
            ippConfig.BaseUrl.Ips = ippConfigurationSection.Service.BaseUrl.Ips;
            ippConfig.BaseUrl.OAuthAccessTokenUrl    = ippConfigurationSection.Service.BaseUrl.OAuthAccessTokenUrl;
            ippConfig.BaseUrl.UserNameAuthentication = ippConfigurationSection.Service.BaseUrl.UserNameAuthentication;

            ippConfig.MinorVersion = new MinorVersion();

            ippConfig.MinorVersion.Qbo = ippConfigurationSection.Service.MinorVersion.Qbo;



            ippConfig.VerifierToken       = new VerifierToken();
            ippConfig.VerifierToken.Value = ippConfigurationSection.WebhooksService.WebhooksVerifier.Value;
#endif
#if NETSTANDARD2_0
            //Setting defaults for configurations
            #region defaults
            ippConfig.Logger = new Logger
            {
                CustomLogger = new TraceLogger(),
                RequestLog   = new RequestLog
                {
                    EnableRequestResponseLogging  = false,
                    ServiceRequestLoggingLocation = System.IO.Path.GetTempPath()
                }
            };

            ippConfig.Message = new Message
            {
                Request = new Request
                {
                    CompressionFormat   = CompressionFormat.GZip,
                    SerializationFormat = SerializationFormat.Json
                },
                Response = new Response
                {
                    CompressionFormat   = CompressionFormat.GZip,
                    SerializationFormat = SerializationFormat.Json
                }
            };

            ippConfig.BaseUrl = new BaseUrl
            {
                Qbo = null,
                Ips = null,
                OAuthAccessTokenUrl    = null,
                UserNameAuthentication = null
            };

            ippConfig.MinorVersion = new MinorVersion
            {
                Qbo = null
            };

            ippConfig.VerifierToken = new VerifierToken
            {
                Value = null
            };


            #endregion

            //ippConfig.Logger = new Logger();
            //ippConfig.Logger.RequestLog = new RequestLog();

            //Read all appsettings.json sections
            var loggerSettings                = builder.GetSection("Logger").GetSection("RequestLog");
            var customLoggerSettings          = builder.GetSection("CustomLogger").GetSection("RequestLog");
            var securitySettings              = builder.GetSection("Security").GetSection("Mode");
            var securityOauthSettings         = builder.GetSection("Security").GetSection("Mode").GetSection("OAuth");
            var securityCustomSettings        = builder.GetSection("Security").GetSection("Mode").GetSection("Custom");
            var messageRequestSettings        = builder.GetSection("Message").GetSection("Request");
            var messageResponseSettings       = builder.GetSection("Message").GetSection("Response");
            var retrySettings                 = builder.GetSection("Retry").GetSection("Mode");
            var retrySettingsLinear           = builder.GetSection("Retry").GetSection("Mode").GetSection("LinearRetry");
            var retrySettingsIncremental      = builder.GetSection("Retry").GetSection("Mode").GetSection("IncrementalRetry");
            var retrySettingsExponential      = builder.GetSection("Retry").GetSection("Mode").GetSection("ExponentialRetry");
            var serviceSettings               = builder.GetSection("Service");
            var serviceBaseUrlSettings        = builder.GetSection("Service").GetSection("BaseUrl");
            var serviceMinorversionSettings   = builder.GetSection("Service").GetSection("Minorversion");
            var webhooksVerifierTokenSettings = builder.GetSection("WebhooksService").GetSection("VerifierToken");



            if (!string.IsNullOrEmpty(loggerSettings["LogDirectory"]) && Convert.ToBoolean(loggerSettings["Enablelogs"]) == true)
            {
                ippConfig.Logger.RequestLog.EnableRequestResponseLogging = Convert.ToBoolean(loggerSettings["Enablelogs"]);


                string location = loggerSettings["LogDirectory"];
                if (!Directory.Exists(location))
                {
                    IdsException exception = new IdsException(Properties.Resources.ValidDirectoryPathMessage, new DirectoryNotFoundException());
                    IdsExceptionManager.HandleException(exception);
                }

                ippConfig.Logger.RequestLog.ServiceRequestLoggingLocation = loggerSettings["LogDirectory"];
            }

            if (!string.IsNullOrEmpty(customLoggerSettings["Name"]) && !string.IsNullOrEmpty(customLoggerSettings["Type"]) && Convert.ToBoolean(customLoggerSettings["Enable"]) == true)
            {
                Type customerLoggerType = Type.GetType(customLoggerSettings["Type"]);
                ippConfig.Logger.CustomLogger = Activator.CreateInstance(customerLoggerType) as ILogger;
            }
            else
            {
                ippConfig.Logger.CustomLogger = new TraceLogger();
            }

            if (!string.IsNullOrEmpty(securityOauthSettings["AccessToken"]) && Convert.ToBoolean(securityOauthSettings["Enable"]) == true)
            {
                OAuth2RequestValidator validator = new OAuth2RequestValidator(
                    securityOauthSettings["AccessToken"]);
                ippConfig.Security = validator;
            }
            else if (securityCustomSettings["Enable"] == "true")
            {
                if (!string.IsNullOrEmpty(securityCustomSettings["Name"]) && !string.IsNullOrEmpty(securityCustomSettings["Type"]))
                {
                    Type customSecurityType = Type.GetType(securityCustomSettings["Type"]);
                    if (!string.IsNullOrEmpty(securityCustomSettings["Params"]))
                    {
                        string[] paramateres = securityCustomSettings["Params"].Split(',');
                        ippConfig.Security = Activator.CreateInstance(customSecurityType, paramateres) as IRequestValidator;
                    }
                }
            }

            ippConfig.Message          = new Message();
            ippConfig.Message.Request  = new Request();
            ippConfig.Message.Response = new Response();

            if (!string.IsNullOrEmpty(messageRequestSettings["CompressionFormat"]))
            {
                switch (Enum.Parse(typeof(Utility.CompressionFormat), messageRequestSettings["CompressionFormat"]))
                {
                case Intuit.Ipp.Utility.CompressionFormat.None:
                    ippConfig.Message.Request.CompressionFormat = CompressionFormat.None;
                    break;

                case Intuit.Ipp.Utility.CompressionFormat.DEFAULT:
                case Intuit.Ipp.Utility.CompressionFormat.GZip:
                    ippConfig.Message.Request.CompressionFormat = CompressionFormat.GZip;
                    break;

                case Intuit.Ipp.Utility.CompressionFormat.Deflate:
                    ippConfig.Message.Request.CompressionFormat = CompressionFormat.Deflate;
                    break;

                default:
                    break;
                }
            }


            if (!string.IsNullOrEmpty(messageResponseSettings["CompressionFormat"]))
            {
                switch (Enum.Parse(typeof(Utility.CompressionFormat), messageResponseSettings["CompressionFormat"]))
                {
                case Intuit.Ipp.Utility.CompressionFormat.None:
                    ippConfig.Message.Response.CompressionFormat = CompressionFormat.None;
                    break;

                case Intuit.Ipp.Utility.CompressionFormat.DEFAULT:
                case Intuit.Ipp.Utility.CompressionFormat.GZip:
                    ippConfig.Message.Response.CompressionFormat = CompressionFormat.GZip;
                    break;

                case Intuit.Ipp.Utility.CompressionFormat.Deflate:
                    ippConfig.Message.Response.CompressionFormat = CompressionFormat.Deflate;
                    break;
                }
            }

            if (!string.IsNullOrEmpty(messageRequestSettings["SerializationFormat"]))
            {
                switch (Enum.Parse(typeof(Utility.SerializationFormat), messageRequestSettings["SerializationFormat"]))
                {
                case Intuit.Ipp.Utility.SerializationFormat.DEFAULT:
                case Intuit.Ipp.Utility.SerializationFormat.Xml:
                    ippConfig.Message.Request.SerializationFormat = SerializationFormat.Xml;
                    break;

                case Intuit.Ipp.Utility.SerializationFormat.Json:
                    ippConfig.Message.Request.SerializationFormat = SerializationFormat.Json;
                    break;

                case Intuit.Ipp.Utility.SerializationFormat.Custom:
                    ippConfig.Message.Request.SerializationFormat = SerializationFormat.Custom;
                    break;
                }
            }


            if (!string.IsNullOrEmpty(messageResponseSettings["SerializationFormat"]))
            {
                switch (Enum.Parse(typeof(Utility.SerializationFormat), messageResponseSettings["SerializationFormat"]))
                {
                case Intuit.Ipp.Utility.SerializationFormat.Xml:
                    ippConfig.Message.Response.SerializationFormat = SerializationFormat.Xml;
                    break;

                case Intuit.Ipp.Utility.SerializationFormat.DEFAULT:
                case Intuit.Ipp.Utility.SerializationFormat.Json:
                    ippConfig.Message.Response.SerializationFormat = SerializationFormat.Json;
                    break;

                case Intuit.Ipp.Utility.SerializationFormat.Custom:
                    ippConfig.Message.Response.SerializationFormat = SerializationFormat.Custom;
                    break;
                }
            }


            if ((!string.IsNullOrEmpty(retrySettingsLinear["Enable"])) && Convert.ToBoolean(retrySettingsLinear["Enable"]) == true)
            {
                if (!string.IsNullOrEmpty(retrySettingsLinear["RetryCount"]) && !string.IsNullOrEmpty(retrySettingsLinear["RetryInterval"]))
                {
                    if (!CoreHelper.IsInvalidaLinearRetryMode(
                            Convert.ToInt32(retrySettingsLinear["RetryCount"]),
                            TimeSpan.Parse(retrySettingsLinear["RetryInterval"])))
                    {
                        ippConfig.RetryPolicy = new IntuitRetryPolicy(
                            Convert.ToInt32(retrySettingsLinear["RetryCount"]),
                            TimeSpan.Parse(retrySettingsLinear["RetryInterval"]));
                    }
                }
            }
            else if ((!string.IsNullOrEmpty(retrySettingsIncremental["Enable"])) && Convert.ToBoolean(retrySettingsIncremental["Enable"]) == true)
            {
                if (!string.IsNullOrEmpty(retrySettingsIncremental["RetryCount"]) && !string.IsNullOrEmpty(retrySettingsIncremental["InitialInterval"]) && !string.IsNullOrEmpty(retrySettingsIncremental["Increment"]))
                {
                    if (!CoreHelper.IsInvalidaIncrementalRetryMode(
                            Convert.ToInt32(retrySettingsIncremental["RetryCount"]),
                            TimeSpan.Parse(retrySettingsIncremental["InitialInterval"]),
                            TimeSpan.Parse(retrySettingsIncremental["Increment"])))
                    {
                        ippConfig.RetryPolicy = new IntuitRetryPolicy(
                            Convert.ToInt32(retrySettingsIncremental["RetryCount"]),
                            TimeSpan.Parse(retrySettingsIncremental["InitialInterval"]),
                            TimeSpan.Parse(retrySettingsIncremental["Increment"]));
                    }
                }
            }
            else if ((!string.IsNullOrEmpty(retrySettingsExponential["Enable"])) && Convert.ToBoolean(retrySettingsExponential["Enable"]) == true)
            {
                if (!string.IsNullOrEmpty(retrySettingsExponential["RetryCount"]) && !string.IsNullOrEmpty(retrySettingsExponential["MinBackoff"]) && !string.IsNullOrEmpty(retrySettingsExponential["MaxBackoff"]) && !string.IsNullOrEmpty(retrySettingsExponential["DeltaBackoff"]))
                {
                    if (!CoreHelper.IsInvalidaExponentialRetryMode(
                            Convert.ToInt32(retrySettingsExponential["RetryCount"]),
                            TimeSpan.Parse(retrySettingsExponential["MinBackoff"]),
                            TimeSpan.Parse(retrySettingsExponential["MaxBackoff"]),
                            TimeSpan.Parse(retrySettingsExponential["DeltaBackoff"])))
                    {
                        ippConfig.RetryPolicy = new IntuitRetryPolicy(
                            Convert.ToInt32(retrySettingsExponential["RetryCount"]),
                            TimeSpan.Parse(retrySettingsExponential["MinBackoff"]),
                            TimeSpan.Parse(retrySettingsExponential["MaxBackoff"]),
                            TimeSpan.Parse(retrySettingsExponential["DeltaBackoff"]));
                    }
                }
            }


            //ippConfig.BaseUrl = new BaseUrl();

            ippConfig.BaseUrl.Qbo = serviceBaseUrlSettings["Qbo"];
            ippConfig.BaseUrl.Ips = serviceBaseUrlSettings["Ips"];
            ippConfig.BaseUrl.OAuthAccessTokenUrl    = serviceBaseUrlSettings["OAuthAccessTokenUrl"];
            ippConfig.BaseUrl.UserNameAuthentication = serviceBaseUrlSettings["UserNameAuthentication"];

            //ippConfig.MinorVersion = new MinorVersion();

            ippConfig.MinorVersion.Qbo = serviceMinorversionSettings["Qbo"];



            //ippConfig.VerifierToken = new VerifierToken();
            ippConfig.VerifierToken.Value = webhooksVerifierTokenSettings["Value"];
#endif
            //#if NETSTANDARD2_0
            //            //IppConfiguration ippConfig = new IppConfiguration();
            //            string temppath = Path.Combine(this.logPath, "Request-" + DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture) + ".txt");
            //            ippConfig.Logger = new Logger
            //            {

            //                RequestLog = new RequestLog
            //                {
            //                    EnableRequestResponseLogging = true,//test
            //                    ServiceRequestLoggingLocation = temppath
            //                }
            //            };


            //#endif

            return(ippConfig);
        }
Example #3
0
        /// <inheritdoc/>
        public void Resume()
        {
            if (_isPaused)
            {
                // Register keyboard hook
                _keyboardHookHandle = NativeMethods.SetWindowsHookEx(HookType.KeyboardLl, _keyboardHookProcHandle, CoreHelper.GetCurrentModuleHandle(), 0);
                _isPaused           = false;

                // If returned handle is equal to 0, throw exception
                if ((int)_keyboardHookHandle == 0)
                {
                    Logger.Instance.Fatal(new Exception("Keyboard hooking failed to start : returned keyboard hook handle is null"));
                }
                else
                {
                    Logger.Instance.Information("Keyboard hooking started.");
                }
            }
        }
        public override void Invoke(IHandlerContext context)
        {
            try
            {
                QunarUploadPolicyRequest qunarRequest = CoreHelper.ChangeToChild <UpLoadPolicyRequest, QunarUploadPolicyRequest>(context.Request);

                Dictionary <UploadTypeDetail, PolicyRecord> dicRec = new Dictionary <UploadTypeDetail, PolicyRecord>();

                List <SeatDiscountDto> seatDiscountList = new List <SeatDiscountDto>();
                if (qunarRequest.PolicyType != QunarPolicyType.COMMON)
                {
                    SeatDiscountListResponse seatRep = JsonConvert.DeserializeObject <SeatDiscountListResponse>(CoreHelper.DoPost(System.Configuration.ConfigurationManager.AppSettings["SeatDiscountListUrl"], ""));//获取舱位折扣列表
                    seatDiscountList = seatRep.SeatDiscountList;
                }
                Dictionary <string, string> lstUploadedId = new Dictionary <string, string>();
                #region  择要封装哪个节点
                foreach (KeyValuePair <UploadTypeDetail, List <Policies> > item in qunarRequest.PolicyData)
                {
                    if (item.Value.Count > 0)
                    {
                        Policies ps = item.Value.LastOrDefault();
                        //if (item.Key != UploadTypeDetail.IncrementalDelete)
                        //{

                        item.Value.ForEach(x =>
                        {
                            if (!lstUploadedId.ContainsKey(x.Id.ToString()))
                            {
                                lstUploadedId.Add(x.Id.ToString(), x.PartnerPolicyId);
                            }
                        });
                        // }
                        dicRec.Add(item.Key, new PolicyRecord {
                            LastPolicyId = ps.Id, LastUpdateTime = ps.UpdateTime
                        });
                        DivideTask(item.Key, item.Value, qunarRequest, seatDiscountList, ChangeToQunarAddPolicy, ChangeToQunarDelPolicy);//开始多任务处理
                    }
                }
                #endregion
                string logPath = qunarRequest.FormatFilePath + "\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\" + DateTime.Now.Hour + "\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xml";
                string zipPath = qunarRequest.FormatZipFilePath + "\\" + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\" + DateTime.Now.Hour + "\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".zip";

                if (qunarAddPolicy.ToList().Count <= 0 && qunarDelPolicy.ToList().Count <= 0)
                {
                    OnMiddlewareWorking(new EventMsg {
                        Status = RunStatus.Normal, Msg = "经过去哪儿格式化组件筛选完后没有要上传的政策"
                    });
                    return;
                }

                #region 保存上传记录
                PolicyNotifyRequest notifyRequest = new PolicyNotifyRequest();
                SaveNotifyResponse  notifyRes     = new SaveNotifyResponse();

                notifyRequest = new PolicyNotifyRequest()
                {
                    // DicRec = dicRec,
                    UploadType      = qunarRequest.UploadType,
                    PolicyRec       = context.UploadResponse.PolicyRec[qunarRequest.UploadType],//最后一条政策记录
                    Purchaser       = PurchaserType.Qunar,
                    NotifyResult    = 0,
                    FileNamePath    = zipPath,
                    ResponseParams  = "",
                    RequestParams   = qunarRequest.SqlWhere,
                    Remark          = IPAddressHelper.GetInternalIP(),
                    OperName        = qunarRequest.OperName,
                    UploadCount     = qunarRequest.UploadCount,
                    BeforePolicyRec = context.UploadResponse.BeforePolicyRecord == null ? new PolicyRecord() : context.UploadResponse.BeforePolicyRecord,
                    CommisionMoney  = qunarRequest.CommisionMoney,
                    CommisionPoint  = qunarRequest.CommsionPoint,
                    UploadPolicyIds = lstUploadedId,
                    PolicyType      = (PoliciesType)Enum.Parse(typeof(PoliciesType), qunarRequest.PolicyType.ToString())
                };
                string notifyContent = CoreHelper.DoPost(System.Configuration.ConfigurationManager.AppSettings["SavePolicyNotifyUrl"].ToString(), notifyRequest);
                notifyRes = JsonConvert.DeserializeObject <SaveNotifyResponse>(notifyContent);//先查询一遍,获取要上传的政策
                if (notifyRes.ErrCode == ResultType.Failed)
                {
                    context.UploadResponse = new UploadPolicyResponse {
                        ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "保存上传记录失败"
                    };
                    return;
                }
                #endregion

                #region 封装去哪儿政策类
                QunarPolicy policyBase = new QunarPolicy()
                {
                    username     = ConfigurationManager.AppSettings["QunarUsername"].ToString(),
                    password     = ConfigurationManager.AppSettings["QunarPassword"].ToString(),
                    type         = qunarRequest.PolicyType,
                    execType     = qunarRequest.UploadType == UploadType.FullUpload ? ExecType.FULL : ExecType.ADD,
                    addPolicy    = qunarAddPolicy.ToList(),                              //添加政策节点
                    deletePolicy = qunarDelPolicy.ToList(),                              //删除政策节点
                    ext          = JsonConvert.SerializeObject(notifyRes.UploadStatusId) //保存xml文件路径
                };
                #endregion

                OnMiddlewareWorking(new EventMsg {
                    Status = RunStatus.Normal, Msg = "封装去哪儿政策类成功,扩展信息:" + JsonConvert.SerializeObject(notifyRes.UploadStatusId) + ",开始序列化成功xml..."
                });
                string xmlContent = XmlHelper.Serializer(typeof(QunarPolicy), policyBase); //序列化成xml
                CoreHelper.CreateFile(logPath, xmlContent);                                //创建文件
                OnMiddlewareWorking(new EventMsg {
                    Status = RunStatus.Normal, Msg = "序列化xml并创建文件成功,生成的xml文件路径:" + logPath + ",开始压缩并上传..."
                });
                context.UploadResponse.FormatPolicyFilePath    = logPath;//保存xml文件路径
                context.UploadResponse.FormatPolicyZipFilePath = zipPath;
                context.UploadResponse.UploadStatusId          = notifyRes.UploadStatusId;
                Next.Invoke(context);
            }catch (Exception ex)
            {
                OnMiddlewareWorking(new EventMsg {
                    Status = RunStatus.Exception, Msg = "格式化去哪儿数据失败!" + JsonConvert.SerializeObject(ex)
                });
                context.UploadResponse = new UploadPolicyResponse {
                    ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "格式化去哪儿数据失败!", Excption = ex
                };
                return;
            }
        }
Example #5
0
        public void ReceiveCallback(IAsyncResult ar)
        {
            var state   = (SocketState)ar.AsyncState;
            var handler = state.Socket;

            SocketError socketError;
            var         bytesRead = handler.EndReceive(ar, out socketError);

            if (socketError != SocketError.Success)
            {
                _logger.ErrorFormat("client [{0}]{1} error: {2}", state.Loginid, handler.RemoteEndPoint, socketError);
                handler.Close();
                _states.Remove(state.Loginid);
                return;
            }
            if (bytesRead > 0)
            {
                state.Content.Write(state.Buffer, 0, bytesRead);

                if (!state.Buffer.EndWith(Message.EndTag, bytesRead))
                {
                    handler.BeginReceive(state.Buffer, 0, SocketState.BUFFER_SIZE, 0, out socketError, new AsyncCallback(ReceiveCallback), state);
                    if (socketError != SocketError.Success)
                    {
                        _logger.ErrorFormat("client [{0}]{1} error: {2}", state.Loginid, handler.RemoteEndPoint, socketError);
                        handler.Close();
                        _states.Remove(state.Loginid);
                        return;
                    }
                    return;
                }

                Exception exception = null;
                var       messages  = CoreHelper.Try(() => Message.ParseData(state.Content.ToArray()), out exception, _logger);
                state.Content.SetLength(0);

                try
                {
                    foreach (var message in messages)
                    {
                        _logger.DebugFormat("receive from {0}: {1}", handler.RemoteEndPoint, message);
                        if (exception != null)
                        {
                            Send(state, new Message {
                                MsgType = MsgType.Exception, Content = exception.Message
                            });
                        }

                        CoreHelper.Try(() => DealMessage(state, message), out exception, _logger);
                        if (exception != null)
                        {
                            Send(state, new Message {
                                MsgType = MsgType.Exception, Content = exception.Message
                            });
                        }
                    }

                    handler.BeginReceive(state.Buffer, 0, SocketState.BUFFER_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                }
                catch (SocketException ex)
                {
                    _logger.ErrorFormat("client [{0}]{1} error: {2}", state.Loginid, handler.RemoteEndPoint, ex.Message);
                    handler.Close();
                    _states.Remove(state.Loginid);
                    return;
                }
            }
        }
Example #6
0
        public object UpdateTour(int tourInfoId, int tourId, [FromBody] object requestBody)
        {
            var responseModel = new ResponseModel();

            try
            {
                do
                {
                    var body = requestBody != null
                        ? JObject.Parse(requestBody.ToString() ?? "{}")
                        : null;

                    if (!CoreHelper.GetParameter(out var jsonStartDate, body, "StartDay",
                                                 JTokenType.Date, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonEndDate, body, "EndDay",
                                                 JTokenType.Date, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonMaxMember, body, "MaxMember",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTotalDay, body, "TotalDay",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTotalNight, body, "TotalNight",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonPrice, body, "Price",
                                                 JTokenType.Float, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonName, body, "Name",
                                                 JTokenType.String, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTimelines, body, "Timelines",
                                                 JTokenType.Array, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonServices, body, "Services",
                                                 JTokenType.Array, ref responseModel, isNullable: true))
                    {
                        break;
                    }

                    if (_tourInfoService.TryGetTourInfoById(tourInfoId, out var tourInfo) != ErrorCode.Success ||
                        tourInfo == null)
                    {
                        throw new ExceptionWithMessage("Tour info not found.");
                    }

                    var userId = CoreHelper.GetUserId(HttpContext, ref responseModel);

                    // User dont have permission
                    if (tourInfo.CreateById != userId)
                    {
                        Response.StatusCode = 403;
                        break;
                    }

                    var name               = jsonName?.ToString();
                    var isStartDayParse    = DateTime.TryParse(jsonStartDate?.ToString(), out var startDate);
                    var isEndDayParse      = DateTime.TryParse(jsonEndDate?.ToString(), out var endDate);
                    var isMaxMemberParse   = int.TryParse(jsonMaxMember?.ToString(), out var maxMember);
                    var isTotalDayParsed   = int.TryParse(jsonTotalDay?.ToString(), out var totalDay);
                    var isTotalNightParsed = int.TryParse(jsonTotalNight?.ToString(), out var totalNight);
                    var isPriceParsed      = float.TryParse(jsonPrice?.ToString(), out var price);
                    var services           = jsonServices != null
                        ? JsonConvert.DeserializeObject <string[]>(jsonServices.ToString())
                        : null;

                    var timelines = jsonTimelines?.ToObject <List <TimeLine> >();

                    if (!_tourService.TryGetTour(userId, tourId, out var tour) || tour == null)
                    {
                        throw new ExceptionWithMessage("Tour not found.");
                    }

                    tour.Update(
                        name: name !,
                        timelines: timelines,
                        startDay: isStartDayParse ? startDate : (DateTime?)null,
                        endDay: isEndDayParse ? endDate : (DateTime?)null,
                        totalDay: isTotalDayParsed ? totalDay : (int?)null,
                        totalNight: isTotalNightParsed ? totalNight: (int?)null,
                        maxMember: isMaxMemberParse ? maxMember : (int?)null,
                        price: isPriceParsed ? price : (float?)null,
                        services: services
                        );

                    if (!_tourService.TryUpdateTour(tour))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    responseModel.FromErrorCode(ErrorCode.Success);
                    responseModel.Data = new JArray {
                        JObject.FromObject(tour)
                    };
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }
Example #7
0
        public object UpdateTourInfo(int id, [FromBody] object requestBody)
        {
            var responseModel = new ResponseModel();

            try
            {
                do
                {
                    var errorCode = _tourInfoService.TryGetTourInfoById(id, out var tourInfo);
                    if (errorCode != ErrorCode.Success)
                    {
                        responseModel.FromErrorCode(errorCode);
                        break;
                    }

                    if (tourInfo == null)
                    {
                        responseModel.FromErrorCode(ErrorCode.TourNotFound);
                        break;
                    }

                    var body = requestBody != null
                        ? JObject.Parse(requestBody.ToString() ?? "{}")
                        : null;

                    if (!CoreHelper.GetParameter(out var jsonDestinationPlaceId, body, "DestinationPlaceId",
                                                 JTokenType.Integer, ref responseModel, true) ||
                        !CoreHelper.GetParameter(out var jsonStartPlaceId, body, "StartPlaceId",
                                                 JTokenType.Integer, ref responseModel, true) ||
                        !CoreHelper.GetParameter(out var jsonImages, body, "Images", JTokenType.Array,
                                                 ref responseModel, true) ||
                        !CoreHelper.GetParameter(out var jsonName, body, "Name", JTokenType.String,
                                                 ref responseModel, true))
                    {
                        break;
                    }

                    var isDestinationPlaceId =
                        int.TryParse(jsonDestinationPlaceId?.ToString(), out var destinationPlaceId);
                    var isStartPlaceId = int.TryParse(jsonStartPlaceId?.ToString(), out var startPlaceId);
                    var images         = jsonImages != null
                        ? JsonConvert.DeserializeObject <string[]>(jsonImages.ToString())
                        : null;

                    tourInfo.Update(
                        createById: null,
                        name: jsonName?.ToString(),
                        images: images !,
                        startPlaceId: isStartPlaceId ? startPlaceId : (int?)null,
                        destinatePlaceId: isDestinationPlaceId ? destinationPlaceId : (int?)null
                        );

                    if (!_tourInfoService.TryUpdateTourInfo(tourInfo))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    var userId = CoreHelper.GetUserId(HttpContext, ref responseModel);

                    responseModel.FromErrorCode(ErrorCode.Success);
                    responseModel.Data = new JArray {
                        AddTourFullInfo(tourInfo, userId)
                    };
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }
Example #8
0
 public void OnBeforeActivate()
 {
     CoreHelper.SetSipButton(true);
 }
        /// <summary>
        /// 保存回调结果
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public SaveNotifyResponse SaveNotify(PolicyNotifyRequest request)
        {
            UpLoadRecordLib       recLib    = new UpLoadRecordLib();
            UploadPolicyRecordLib policyLib = new UploadPolicyRecordLib();


            UpLoadRecord rec = new UpLoadRecord();

            rec.UploadFilePath       = request.FileNamePath;
            rec.LastPolicyId         = request.PolicyRec.LastPolicyId.ToString();
            rec.LastUpdateTime       = request.PolicyRec.LastUpdateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
            rec.UploadType           = request.UploadType.ToString();
            rec.PurchaserType        = request.Purchaser.ToString();
            rec.ResponseParams       = request.ResponseParams;
            rec.NotifyResult         = request.NotifyResult;
            rec.CreateTime           = DateTime.Now;
            rec.IsEnabled            = 1;
            rec.Remark               = request.Remark;
            rec.RequestParams        = request.RequestParams;
            rec.OperName             = request.OperName;
            rec.UploadCount          = request.UploadCount;
            rec.BeforeLastPolicyId   = request.BeforePolicyRec.LastPolicyId.ToString();
            rec.BeforeLastUpdateTime = request.BeforePolicyRec.LastUpdateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
            rec.PolicyType           = (int)request.PolicyType;
            long r = recLib.Add(rec);

            if (r <= 0)
            {
                string name = "Qunar\\NotifyQunarPolicyIdsRecLog";
                CoreHelper.SaveLastUpTimeAndId(string.Join(",", request.UploadPolicyIds.ToArray()), name);
                return(new SaveNotifyResponse {
                    ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "保存回调结果失败:保存数据:" + JsonConvert.SerializeObject(rec)
                });
            }

            List <string> lstSql = new List <string>();

            foreach (KeyValuePair <string, string> item in request.UploadPolicyIds)
            {
                UploadPolicyRecord uPolicy = new UploadPolicyRecord();
                uPolicy.CommisionMoney   = request.CommisionMoney;
                uPolicy.CommsionPoint    = request.CommisionPoint;
                uPolicy.Id               = System.Guid.NewGuid();
                uPolicy.UId              = r;
                uPolicy.PolicyId         = item.Key;
                uPolicy.PartenerPolicyId = item.Value;
                uPolicy.CreateTime       = DateTime.Now;
                uPolicy.PolicyType       = request.PolicyType.ToString();
                lstSql.Add(policyLib.Add(uPolicy, false));
            }

            if (lstSql.Count > 0)
            {
                int r2 = DbHelperSQL.ExecuteSqlTran(lstSql);
                if (r2 <= 0)
                {
                    string name = "Qunar\\NotifyQunarPolicyIdsRecLog";
                    CoreHelper.SaveLastUpTimeAndId(DateTime.Now + ":保存上传政策id失败:" + string.Join(",", request.UploadPolicyIds.ToArray()), name);
                    return(new SaveNotifyResponse {
                        ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "保存回调结果失败:保存数据:" + JsonConvert.SerializeObject(rec)
                    });
                }
            }
            return(new SaveNotifyResponse {
                ErrCode = PolicyService.Enums.ResultType.Sucess, ErrMsg = "", UploadStatusId = r.ToString()
            });
        }
        public EmptyResponse UpdateNotify(UpdateNotifyRequest request)
        {
            try
            {
                UpLoadRecordLib       recLib       = new UpLoadRecordLib();
                UploadPolicyRecordLib recPolicyLib = new UploadPolicyRecordLib();
                PolicySyncRecLib      syncLib      = new PolicySyncRecLib();


                request.UpdateStatusId = request.UpdateStatusId.Replace("\"", "").Replace("\\", "");
                UpLoadRecord rec = recLib.GetModel(int.Parse(request.UpdateStatusId));
                if (rec == null)
                {
                    return(new EmptyResponse {
                        ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "未找到此上传的记录!"
                    });
                }
                if (rec.OperName.ToLower() == "system")
                {
                    if ((SuccessStatus)request.NotifyResult == SuccessStatus.Success)
                    {
                        recPolicyLib.BlukyUpdatePolicy(rec.Id.ToString(), true);
                        recLib.Delete(rec.Id);//删除
                    }
                    else
                    {
                        recPolicyLib.BlukyUpdatePolicy(rec.Id.ToString(), false);
                        recLib.Delete(rec.Id);//删除
                    }
                    return(new EmptyResponse {
                        ErrCode = PolicyService.Enums.ResultType.Sucess
                    });
                }


                PurchaserType Purchaser = (PurchaserType)Enum.Parse(typeof(PurchaserType), rec.PurchaserType);
                UploadType    uType     = (UploadType)Enum.Parse(typeof(UploadType), rec.UploadType);

                #region 1.保存文件记录
                if (request.IsSucess)
                {
                    string timeAndId = Convert.ToDateTime(rec.LastUpdateTime).ToString("yyyy-MM-dd HH:mm:ss.fff") + "|" + rec.LastPolicyId.ToString();
                    // CoreHelper.CreateFile(System.Configuration.ConfigurationManager.AppSettings["NotifyErrLogPath"] + "\\" + System.Guid.NewGuid() + ".txt", "读取最后记录"+timeAndId);//创建文件
                    // File.WriteAllText("e://1.txt", timeAndId);
                    string name = uType == UploadType.FullUpload ? rec.PurchaserType + "\\" + rec.PurchaserType + "FullPolicyRecLog" : rec.PurchaserType + "\\" + rec.PurchaserType + "IncrementPolicyRecLog";
                    CoreHelper.SaveLastUpTimeAndId(timeAndId, name);
                    // CoreHelper.CreateFile(System.Configuration.ConfigurationManager.AppSettings["NotifyErrLogPath"] + "\\" + System.Guid.NewGuid() + ".txt", "保存最后记录成功");//创建文件
                }

                #endregion

                #region 2.更新表中记录

                rec.ResponseParams = request.ResponseParams;
                rec.NotifyResult   = (int)request.NotifyResult;
                rec.FailedCount    = request.NotifyResult == SuccessStatus.Failed ? rec.FailedCount + 1 : rec.FailedCount;
                rec.CompleteTime   = DateTime.Now;
                rec.LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd") + " 0:00:00";
                rec.LastPolicyId   = "0";
                bool r = recLib.Update(rec);
                if (!r)
                {
                    return(new EmptyResponse {
                        ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "更新记录失败!"
                    });
                }
                bool flag = false;
                if (request.NotifyResult == SuccessStatus.Failed || request.NotifyResult == SuccessStatus.Other)
                {
                    flag = false;
                }
                else
                {
                    flag = true;
                }
                recPolicyLib.BlukyUpdatePolicy(rec.Id.ToString(), flag);
                #endregion


                #region 3.批量更新已经上传完成的政策
                if (request.IsSucess)
                {
                    string selectSql  = "";
                    int    totalCount = 0;
                    List <UploadPolicyRecord> lstUploadIds   = recPolicyLib.GetModelList(" UId='" + rec.Id + "'");
                    List <string>             lstAddPolicies = new List <string>();
                    lstUploadIds.ForEach(x =>
                    {
                        lstAddPolicies.Add(x.PolicyId);
                    });
                    //List<string> lstAddPolicies = rec.Remark.Split(',').ToList();
                    if (lstAddPolicies.Count > 0)
                    {
                        bool r2 = syncLib.BlukyUpdatePolicyUploaded(lstAddPolicies);
                        if (!r)
                        {
                            return(new EmptyResponse {
                                ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = "批量把政策置为已上传失败!"
                            });
                        }
                    }
                }
                #endregion

                return(new EmptyResponse {
                    ErrCode = PolicyService.Enums.ResultType.Sucess
                });
            }
            catch (Exception ex)
            {
                return(new EmptyResponse {
                    ErrCode = PolicyService.Enums.ResultType.Failed, ErrMsg = JsonConvert.SerializeObject(ex)
                });
            }
        }
Example #11
0
        /// <summary>
        /// Entity Service supports multiple queries within a request. Use this method to perform multiple entity query operation.
        /// </summary>
        /// <param name="queryOperationValues">The simple query language string collection.</param>
        /// <typeparam name="TSource">Where TSource is IEntity.</typeparam>
        /// <returns>Returns a collection of entities for individual simple query.</returns>
        /// <exception cref="InvalidParameterException">If the parameter is null or empty or exceeds a maximum of five(5) queries.</exception>
        /// <exception cref="ValidationException">If the query syntax is incorrect.</exception>
        /// <exception cref="SerializationException">If there were serialization issues with the response from the service.</exception>
        /// <exception cref="IdsException">When service returned with an error information.</exception>
        /// <example>
        /// Usage:
        /// Use the query service created and invoke the ToIdsQuery method to obtain the simple query as string.
        /// <code>
        /// string customerQueryValue = customerContext.Where(c => c.MetaData.CreateTime > this.dateTime).ToIdsQuery();
        /// string invoiceQueryValue = invoiceContext.Select(i => new { i.Id, i.status }).ToIdsQuery();
        /// </code>
        /// Invoke the ExecuteMultipleEntityQueries method with the read only collection of the queries. This method can throw exception so surround the method with a try catch block.
        /// <code>
        /// <![CDATA[List<string> values = new List<string> { customerQueryValue, invoiceQueryValue };]]>
        /// try
        /// {
        ///     <![CDATA[ReadOnlyCollection<ReadOnlyCollection<IEntity>> results = customerContext.ExecuteMultipleEntityQueries<IEntity>(values.AsReadOnly());]]>
        ///     Iterate through the values obtained:
        ///     foreach (var item in results)
        ///     {
        ///         // Read the values
        ///     }
        /// }
        /// catch(IdsException)
        /// {
        ///     // Perform logic here
        /// }
        /// </code>
        /// </example>
        public System.Collections.ObjectModel.ReadOnlyCollection <System.Collections.ObjectModel.ReadOnlyCollection <TSource> > ExecuteMultipleEntityQueries <TSource>(System.Collections.ObjectModel.ReadOnlyCollection <string> queryOperationValues) where TSource : IEntity
        {
            if (queryOperationValues == null || queryOperationValues.Count == 0)
            {
                throw new InvalidParameterException(string.Format(CultureInfo.InvariantCulture, "The parameter queryOperationValues cannot be null or empty."));
            }

            if (queryOperationValues.Count > 5)
            {
                throw new InvalidParameterException(string.Format(CultureInfo.InvariantCulture, "Query Count exceeded. A maximum of 5 queries can be provided at a time."));
            }

            string idsQuery = string.Empty;

            foreach (var item in queryOperationValues)
            {
                if (!string.IsNullOrWhiteSpace(item))
                {
                    idsQuery += item + ";";
                }
            }

            // Buid the service uri
            string uri = string.Format(CultureInfo.InvariantCulture, "{0}/company/{1}/query", CoreConstants.VERSION, this.serviceContext.RealmId);

            // Creates request parameters
            RequestParameters parameters = null;

            parameters = new RequestParameters(uri, HttpVerbType.POST, CoreConstants.CONTENTTYPE_APPLICATIONTEXT);


            // Prepares request
            HttpWebRequest request  = this.restHandler.PrepareRequest(parameters, idsQuery);
            string         response = string.Empty;

            try
            {
                // Gets response
                response = this.restHandler.GetResponse(request);
            }
            catch (IdsException ex)
            {
                IdsExceptionManager.HandleException(ex);
            }

            // Check whether the response is null or empty and throw communication exception.
            CoreHelper.CheckNullResponseAndThrowException(response);

            // Deserialize object
            IntuitResponse restResponse = (IntuitResponse)this.responseSerializer.Deserialize <IntuitResponse>(response);

            QueryResponse[] queryResponses = restResponse.AnyIntuitObjects as QueryResponse[];

            List <System.Collections.ObjectModel.ReadOnlyCollection <TSource> > returnValues = new List <System.Collections.ObjectModel.ReadOnlyCollection <TSource> >();

            foreach (var queryResponse in queryResponses)
            {
                Type           type     = queryResponse.GetType();
                List <TSource> entities = new List <TSource>();

                PropertyInfo[] propertyInfoArray = type.GetProperties();

                foreach (PropertyInfo propertyInfo in propertyInfoArray)
                {
                    if (true == propertyInfo.PropertyType.IsArray)
                    {
                        object tempEntities = propertyInfo.GetValue(queryResponse, null);
                        if (tempEntities != null)
                        {
                            object[] tempEntityArray = (object[])tempEntities;

                            if (tempEntityArray.Length > 0)
                            {
                                foreach (object item in tempEntityArray)
                                {
                                    entities.Add((TSource)item);
                                }
                            }
                        }

                        break;
                    }
                }

                returnValues.Add(entities.AsReadOnly());
            }

            this.serviceContext.IppConfiguration.Logger.CustomLogger.Log(Diagnostics.TraceLevel.Info, "Finished Executing Method FindAll.");
            return(returnValues.AsReadOnly());
        }
Example #12
0
        /// <summary>
        /// Executes the Ids Query and returns the response.
        /// </summary>
        /// <param name="idsQuery">The string representation of ids query.</param>
        /// <param name="queryOperationType">Query Operation Type. Default value is query.</param>
        /// <returns>ReadOnly Collection fo items of type T.</returns>
        public System.Collections.ObjectModel.ReadOnlyCollection <T> ExecuteIdsQuery(string idsQuery, QueryOperationType queryOperationType = QueryOperationType.query)
        {
            // Validate Parameter
            if (string.IsNullOrWhiteSpace(idsQuery))
            {
                throw new InvalidParameterException(string.Format(CultureInfo.InvariantCulture, "The parameter idsQuery cannot be null or empty."));
            }

            // Buid the service uri
            string uri = string.Format(CultureInfo.InvariantCulture, "{0}/company/{1}/{2}", CoreConstants.VERSION, this.serviceContext.RealmId, queryOperationType);

            // Creates request parameters
            RequestParameters parameters = null;

            parameters = new RequestParameters(uri, HttpVerbType.POST, CoreConstants.CONTENTTYPE_APPLICATIONTEXT);


            // Prepares request
            HttpWebRequest request  = this.restHandler.PrepareRequest(parameters, idsQuery);
            string         response = string.Empty;

            try
            {
                // Gets response
                response = this.restHandler.GetResponse(request);
            }
            catch (IdsException ex)
            {
                IdsExceptionManager.HandleException(ex);
            }

            // Check whether the response is null or empty and throw communication exception.
            CoreHelper.CheckNullResponseAndThrowException(response);

            // Deserialize object
            IntuitResponse restResponse  = (IntuitResponse)this.responseSerializer.Deserialize <IntuitResponse>(response);
            QueryResponse  queryResponse = restResponse.AnyIntuitObject as QueryResponse;

            if (idsQuery.ToLower().Contains("count(*)"))
            {
                int      totalCount           = queryResponse.totalCount;
                List <T> dummyCountCollection = new List <T>();
                for (int i = 0; i < totalCount; i++)
                {
                    dummyCountCollection.Add((T)Activator.CreateInstance(typeof(T)));
                }

                System.Collections.ObjectModel.ReadOnlyCollection <T> countCollection = new System.Collections.ObjectModel.ReadOnlyCollection <T>(dummyCountCollection);
                return(countCollection);
            }

            List <T> entities = new List <T>();


            if (queryResponse.maxResults > 0)

            {
                object tempEntities = queryResponse.AnyIntuitObjects;
                if (tempEntities != null)
                {
                    object[] tempEntityArray = (object[])tempEntities;

                    if (tempEntityArray.Length > 0)
                    {
                        foreach (object item in tempEntityArray)
                        {
                            entities.Add((T)item);
                        }
                    }
                }
            }

            /* Type type = queryResponse.GetType();
             * List<T> entities = new List<T>();
             *
             * PropertyInfo[] propertyInfoArray = type.GetProperties();
             *
             * foreach (PropertyInfo propertyInfo in propertyInfoArray)
             * {
             *   if (true == propertyInfo.PropertyType.)
             *   {
             *       object tempEntities = propertyInfo.GetValue(queryResponse, null);
             *       if (tempEntities != null)
             *       {
             *           object[] tempEntityArray = (object[])tempEntities;
             *
             *           if (tempEntityArray.Length > 0)
             *           {
             *               foreach (object item in tempEntityArray)
             *               {
             *                   entities.Add((T)item);
             *               }
             *           }
             *       }
             *
             *       break;
             *   }
             * }*/

            this.serviceContext.IppConfiguration.Logger.CustomLogger.Log(Diagnostics.TraceLevel.Info, "Finished Executing Method FindAll.");
            System.Collections.ObjectModel.ReadOnlyCollection <T> readOnlyCollection = new System.Collections.ObjectModel.ReadOnlyCollection <T>(entities);
            return(readOnlyCollection);
        }
        public override void Invoke(IHandlerContext context)
        {
            try
            {
                QunarUploadPolicyRequest qunarRequest  = CoreHelper.ChangeToChild <UpLoadPolicyRequest, QunarUploadPolicyRequest>(context.Request);
                PolicyRecord             lastPolicyRec = new PolicyRecord()
                {
                    LastPolicyId = 0, LastUpdateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"))
                };
                context.UploadResponse.PolicyRec[UploadType.Incremental] = lastPolicyRec;//保存上次更新记录
                #region 判断是否分批并交由下个中间件处理
                int upLoadCount = System.Configuration.ConfigurationManager.AppSettings["MaxUploadCount"] == null ? 1000 : int.Parse(System.Configuration.ConfigurationManager.AppSettings["MaxUploadCount"].ToString());
                if (qunarRequest.PolicyDataOrgin.Count < upLoadCount)//小于10000,自动上传
                {
                    OnMiddlewareWorking(new EventMsg {
                        Status = RunStatus.Normal, Msg = "当前政策为" + qunarRequest.PolicyDataOrgin.Count + "条,小于最高限制条数:" + upLoadCount + "条,不用分批上传"
                    });
                    List <Policies> lstAddPolicies = qunarRequest.PolicyDataOrgin.Where(x => x.DelDegree == 1).ToList();
                    List <Policies> lstDelPolicies = qunarRequest.PolicyDataOrgin.Where(x => x.DelDegree == 0).ToList();
                    qunarRequest.PolicyData.Add(UploadTypeDetail.IncrementalAdd, lstAddPolicies);
                    qunarRequest.PolicyData.Add(UploadTypeDetail.IncrementalDelete, lstDelPolicies);
                    context.SetRequest(qunarRequest);
                    Next.Invoke(context);
                }
                else
                {
                    OnMiddlewareWorking(new EventMsg {
                        Status = RunStatus.Normal, Msg = "当前政策为" + qunarRequest.PolicyDataOrgin.Count + "条,大于最高限制条数:" + upLoadCount + "条,开始分批上传.."
                    });
                    int index = 1;
                    while (qunarRequest.PolicyDataOrgin.Count > 0)
                    {
                        List <Policies> lstPolicies = new List <Policies>();
                        lstPolicies = qunarRequest.PolicyDataOrgin.Take(upLoadCount).ToList();//取一万条先上传
                        qunarRequest.UploadCount = lstPolicies.Count;
                        if (lstPolicies.Count > 0)
                        {
                            qunarRequest.PolicyDataOrgin.RemoveRange(0, lstPolicies.Count);
                        }
                        OnMiddlewareWorking(new EventMsg {
                            Status = RunStatus.Normal, Msg = "收到政策数量:" + lstPolicies.Count + "条,开始第" + index + "次分批上传"
                        });
                        List <Policies> lstAddPolicies = lstPolicies.Where(x => x.DelDegree == 1).ToList();
                        List <Policies> lstDelPolicies = lstPolicies.Where(x => x.DelDegree == 0).ToList();
                        PolicyRecord    rec            = new PolicyRecord()
                        {
                            LastPolicyId = lstPolicies.LastOrDefault().Id, LastUpdateTime = lstPolicies.LastOrDefault().UpdateTime
                        };
                        context.UploadResponse.BeforePolicyRecord = rec;                 //每次都保留上回更新的记录
                        qunarRequest.PolicyData.Remove(UploadTypeDetail.IncrementalAdd); //先移除后添加,防止key冲突
                        qunarRequest.PolicyData.Remove(UploadTypeDetail.IncrementalDelete);
                        qunarRequest.PolicyData.Add(UploadTypeDetail.IncrementalAdd, lstAddPolicies);
                        qunarRequest.PolicyData.Add(UploadTypeDetail.IncrementalDelete, lstDelPolicies);
                        context.SetRequest(qunarRequest);
                        if (index <= 1)
                        {
                            Next.Invoke(context);
                        }
                        else
                        {
                            //先判断是否上传成功
                            OnMiddlewareWorking(new EventMsg {
                                Status = RunStatus.Normal, Msg = "查询是否上传成功..."
                            });
                            bool flag = SearchNotifyStatus(context.UploadResponse.UploadStatusId);
                            if (flag)
                            {
                                OnMiddlewareWorking(new EventMsg {
                                    Status = RunStatus.Normal, Msg = "上传成功,自动进入下次上传..."
                                });
                                Next.Invoke(context);
                            }
                            else
                            {
                                while (!flag)
                                {
                                    Thread.Sleep(2000);//休息俩秒继续查询
                                    OnMiddlewareWorking(new EventMsg {
                                        Status = RunStatus.Normal, Msg = "上传中,继续查询是否上传成功..."
                                    });
                                    flag = SearchNotifyStatus(context.UploadResponse.UploadStatusId);
                                    if (flag)
                                    {
                                        flag = false;
                                        OnMiddlewareWorking(new EventMsg {
                                            Status = RunStatus.Normal, Msg = "上传成功,自动进入下次上传..."
                                        });
                                    }
                                }
                                Next.Invoke(context);
                            }
                        }

                        index++;
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                OnMiddlewareWorking(new EventMsg()
                {
                    Status = Enums.RunStatus.Exception, Msg = "QunarIncrementalDispatcherMiddleware:" + ex.Message, Exception = ex, PurchaserType = Enums.PurchaserType.Qunar
                });
                context.UploadResponse = new UploadPolicyResponse()
                {
                    ErrCode = ResultType.Failed, ErrMsg = "QunarIncrementalDispatcherMiddleware:" + ex.Message, Excption = ex
                };
                return;
            }
        }
Example #14
0
        /// <summary>
        /// Force to synchronize that data with the cloud.
        /// </summary>
        /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
        internal async Task SynchronizeAsync()
        {
            if (IsSynchronizing)
            {
                return;
            }

            Logger.Instance.Information("Synchronization with the cloud started.");
            IsSynchronizing = true;

            if (CurrentCloudStorageProvider == null)
            {
                Logger.Instance.Warning("The user is not logged to any cloud storage provider. The synchronization stopped.");
                IsSynchronizing = false;
                return;
            }

            if (!CoreHelper.IsUnitTesting() && !SystemInfoHelper.CheckForInternetConnection())
            {
                Logger.Instance.Warning("There is no internet connection. The synchronization stopped.");
                IsSynchronizing = false;
                return;
            }

            SynchronizationStarted?.Invoke(this, new EventArgs());

            try
            {
                if (!await CurrentCloudStorageProvider.TryAuthenticateAsync())
                {
                    Logger.Instance.Warning("The user is not authenticated correctly. Consider unlink the app and connect again. The synchronization stopped.");
                    IsSynchronizing = false;
                    SynchronizationEnded?.Invoke(this, new EventArgs());
                    return;
                }

                var userId = SecurityHelper.ToSecureString(await CurrentCloudStorageProvider.GetUserIdAsync());

                if (string.IsNullOrWhiteSpace(SecurityHelper.ToUnsecureString(userId)))
                {
                    Logger.Instance.Warning("The user's id from the cloud storage provider has not been found. The synchronization stopped.");
                    IsSynchronizing = false;
                    SynchronizationEnded?.Invoke(this, new EventArgs());
                    SynchronizationFailed?.Invoke(this, new EventArgs());
                    return;
                }

                Logger.Instance.Information("Freezing the data before synchronize.");
                var dataService = ServiceLocator.GetService <DataService>();
                var cloudDataEntryFromServer = new List <CloudDataEntry>();
                var cloudAppFolder           = await CurrentCloudStorageProvider.GetAppFolderAsync();

                var cloudDataEntryFilePath = Path.Combine(cloudAppFolder.FullPath, Consts.DataEntryFileName);
                var cloudDataPassword      = SecurityHelper.ToSecureString(SecurityHelper.EncryptString(userId, SecurityHelper.ToSecureString(await CurrentCloudStorageProvider.GetUserNameAsync())));
                var localFrozenDataEntries = DataHelper.FromByteArray <AsyncObservableCollection <DataEntry> >(DataHelper.ToByteArray(dataService.DataEntries));
                var localFrozenCache       = DataHelper.FromByteArray <List <DataEntryCache> >(DataHelper.ToByteArray(dataService.Cache));

                // Download data from server.
                if (cloudAppFolder.Files.Any(file => file.FullPath == cloudDataEntryFilePath))
                {
                    Logger.Instance.Information("Downloading the data entry file from the server.");
                    try
                    {
                        using (var memoryStream = new MemoryStream())
                        {
                            await CurrentCloudStorageProvider.DownloadFileAsync(cloudDataEntryFilePath, memoryStream);

                            memoryStream.Position = 0;
                            using (var aesStream = new AesStream(memoryStream, cloudDataPassword, SecurityHelper.GetSaltKeys(cloudDataPassword).GetBytes(16)))
                            {
                                var data = new byte[aesStream.Length];
                                aesStream.Read(data, 0, data.Length);
                                cloudDataEntryFromServer = JsonConvert.DeserializeObject <List <CloudDataEntry> >(Encoding.UTF8.GetString(data));
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        Logger.Instance.Warning($"Unable to download or read the data file entry from the cloud for the following reason : {exception.Message}");
                        IsSynchronizing = false;
                        SynchronizationEnded?.Invoke(this, new EventArgs());
                        SynchronizationFailed?.Invoke(this, new EventArgs());
                        return;
                    }
                }
                else
                {
                    Logger.Instance.Information("There is no data entry file on the server yet.");
                }

                // Synchronize locally the data. The result must corresponds to what we will have locally and on the server at the end of the synchronization process.
                var cloudDataEntryToServer = dataService.DifferenceLocalAndCloudDataEntries(cloudDataEntryFromServer);

                // Download the needed data from the server to the local machine.
                Logger.Instance.Information("Downloading the needed data from the server to the local machine.");
                var dataToDownload = cloudDataEntryFromServer.Cast <DataEntryBase>().Except(localFrozenDataEntries, (item1, item2) => item1.Identifier == item2.Identifier).ToList();
                var taskList       = new List <Task>();
                foreach (var cloudDataEntry in dataToDownload)
                {
                    if (dataToDownload.Any(data => localFrozenCache.Any(item => data.Identifier == item.Identifier && item.Status == DataEntryStatus.Deleted)))
                    {
                        continue;
                    }

                    foreach (var dataEntryDataIdentifier in cloudDataEntry.DataIdentifiers)
                    {
                        var task = DownloadDataFileAsync(dataService.ClipboardDataPath, cloudAppFolder, cloudDataPassword, dataEntryDataIdentifier);
                        taskList.Add(task);
                    }
                }
                await Task.WhenAll(taskList);

                // Delete the needed data from the server
                Logger.Instance.Information("Deleting the needed data from the server.");
                taskList = new List <Task>();
                foreach (var dataServiceDataEntry in localFrozenDataEntries.Where(item => !item.CanSynchronize))
                {
                    foreach (var dataEntryDataIdentifier in dataServiceDataEntry.DataIdentifiers)
                    {
                        var task = DeleteFileAsync(cloudAppFolder, dataEntryDataIdentifier);
                        taskList.Add(task);
                    }
                }
                await Task.WhenAll(taskList);

                taskList = new List <Task>();
                foreach (var cacheEntry in localFrozenCache.Where(item => item.Status == DataEntryStatus.Deleted))
                {
                    var dataEntry = cloudDataEntryFromServer.SingleOrDefault(item => item.Identifier == cacheEntry.Identifier);
                    if (dataEntry != null)
                    {
                        foreach (var dataEntryDataIdentifier in dataEntry.DataIdentifiers)
                        {
                            var task = DeleteFileAsync(cloudAppFolder, dataEntryDataIdentifier);
                            taskList.Add(task);
                        }
                    }
                }
                await Task.WhenAll(taskList);

                await dataService.MakeCacheSynchronized(cloudDataEntryToServer, true, localFrozenCache);

                localFrozenDataEntries = DataHelper.FromByteArray <AsyncObservableCollection <DataEntry> >(DataHelper.ToByteArray(dataService.DataEntries));
                localFrozenCache       = DataHelper.FromByteArray <List <DataEntryCache> >(DataHelper.ToByteArray(dataService.Cache));

                // Upload the needed data from the server to the local machine
                Logger.Instance.Information("Uploading the needed data from the server to the local machine.");
                var dataToUpload = localFrozenDataEntries.Cast <DataEntryBase>().Except(cloudDataEntryFromServer, (item1, item2) => item1.Identifier == item2.Identifier);
                taskList = new List <Task>();
                foreach (var dataEntry in dataToUpload)
                {
                    var localDataEntry = localFrozenDataEntries.Single(item => item.Identifier == dataEntry.Identifier);
                    if (!localDataEntry.CanSynchronize || localDataEntry.Thumbnail.Type == ThumbnailDataType.Files)
                    {
                        continue;
                    }

                    foreach (var dataEntryDataIdentifier in dataEntry.DataIdentifiers)
                    {
                        var task = UploadDataFileAsync(dataService.ClipboardDataPath, cloudAppFolder, cloudDataPassword, dataEntryDataIdentifier);
                        taskList.Add(task);
                    }
                }
                await Task.WhenAll(taskList);

                // Upload the new data to the server.
                Logger.Instance.Information("Uploading the data entry file to the server.");

                using (var memoryStream = new MemoryStream())
                    using (var aesStream = new AesStream(memoryStream, cloudDataPassword, SecurityHelper.GetSaltKeys(cloudDataPassword).GetBytes(16)))
                    {
                        var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(cloudDataEntryToServer));
                        aesStream.Write(data, 0, data.Length);
                        aesStream.Position = 0;
                        await CurrentCloudStorageProvider.UploadFileAsync(memoryStream, cloudDataEntryFilePath);
                    }

                await dataService.MakeCacheSynchronized(cloudDataEntryToServer, false, localFrozenCache);
            }
            catch (Exception exception)
            {
                Logger.Instance.Warning($"Unable to synchronize for the following reason : {exception.Message}. {exception.InnerException?.Message}");
                SynchronizationFailed?.Invoke(this, new EventArgs());
            }

            _synchronizeTimer.Stop();
            _synchronizeTimer.Start();

            IsSynchronizing = false;
            SynchronizationEnded?.Invoke(this, new EventArgs());
        }
Example #15
0
        private async Task SynchronizeAsync(CancellationToken cancellationToken)
        {
            // The semaphore acts like queue.
            using (await _sempahore.WaitAsync(cancellationToken).ConfigureAwait(false))
            {
                var synchronizationStarted = false;
                var succeeded = false;
                var requiresReloadLocalData = false;

                try
                {
                    if (!_settingsProvider.GetSetting(SettingsDefinitions.SyncDataWithCloud))
                    {
                        return;
                    }

                    string targetterProviderName = _settingsProvider.GetSetting(SettingsDefinitions.RemoteStorageProviderName);
                    IRemoteStorageProvider remoteStorageProvider = _remoteStorageProviders.SingleOrDefault(m => string.Equals(m.Metadata.ProviderName, targetterProviderName, StringComparison.Ordinal))?.Value;

                    if (remoteStorageProvider == null)
                    {
                        return;
                    }

                    if (!CoreHelper.IsInternetAccess())
                    {
                        return;
                    }

                    SynchronizationStarted?.Invoke(this, EventArgs.Empty);
                    synchronizationStarted = true;

                    if (!await remoteStorageProvider.SignInAsync(interactive: false, cancellationToken).ConfigureAwait(false))
                    {
                        // If fails to authenticate, disables synchronization and sign out.
                        _settingsProvider.SetSetting(SettingsDefinitions.SyncDataWithCloud, false);
                        await remoteStorageProvider.SignOutAsync().ConfigureAwait(false);

                        // TODO: Add a log to notify to let the user know it signed out and he should re-authenticate.

                        // returning here will still trigger the Finally block.
                        return;
                    }

                    // Retrieve the list of online files.
                    IReadOnlyList <RemoteFileInfo> roamingFiles =
                        await remoteStorageProvider.GetFilesAsync(Constants.DataFileCountLimit, cancellationToken).ConfigureAwait(false);

                    RemoteFileInfo roamingUserDataBundleFile = roamingFiles.FirstOrDefault(file
                                                                                           => string.Equals(Path.GetFileName(file.FullPath), Constants.UserDataBundleFileName, StringComparison.Ordinal));

                    IEnumerable <RemoteFileInfo> allOtherRoamingFiles = roamingFiles.Where(file
                                                                                           => !string.Equals(Path.GetFileName(file.FullPath), Constants.UserDataBundleFileName, StringComparison.Ordinal));

                    // Retrieve the list of local files.
                    var localUserDataFolder = await CoreHelper.GetOrCreateUserDataStorageFolderAsync().ConfigureAwait(false);

                    StorageFile localUserDataBundleFile = await localUserDataFolder.TryGetItemAsync(Constants.UserDataBundleFileName) as StorageFile;

                    IEnumerable <StorageFile> allOtherLocalFiles = (await localUserDataFolder.GetFilesAsync())
                                                                   .Where(file => !string.Equals(file.Name, Constants.UserDataBundleFileName, StringComparison.Ordinal));

                    if (localUserDataBundleFile == null && roamingUserDataBundleFile == RemoteFileInfo.Empty)
                    {
                        // Nothing locally and remotely?

                        succeeded = true;
                        return;
                    }

                    if (localUserDataBundleFile == null ||
                        (roamingUserDataBundleFile != RemoteFileInfo.Empty &&
                         roamingUserDataBundleFile.CreatedDateTime.ToUniversalTime()
                         > (await localUserDataBundleFile.GetBasicPropertiesAsync()).DateModified.ToUniversalTime()))
                    {
                        // If there is no local user data file, or that the file on the server is more recent than the local one,
                        // then we want to merge by taking the version from the server.

                        await DownloadRoamingDataFromServerAsync(
                            remoteStorageProvider,
                            allOtherRoamingFiles,
                            allOtherLocalFiles,
                            cancellationToken).ConfigureAwait(false);

                        // The local file changed, since we downloaded the one from the server, so let's indicate
                        // that we want to reload (and merge) the local data.
                        requiresReloadLocalData = true;
                    }
                    else
                    {
                        // Else, then it means the local file is more recent than the one on the server,
                        // or that there is simply no file on the server,
                        // so we want to merge by taking the version from the local file.

                        await UploadLocalDataToServerAsync(
                            remoteStorageProvider,
                            localUserDataBundleFile,
                            allOtherRoamingFiles,
                            allOtherLocalFiles,
                            cancellationToken).ConfigureAwait(false);
                    }

                    succeeded = true;
                }
                catch (OperationCanceledException)
                {
                    _logger.LogEvent(SynchronizeCanceledEvent, "The synchronization with the cloud has been canceled.");
                }
                catch (Exception ex)
                {
                    _logger.LogFault(SynchronizeFaultEvent, "Failed to synchronize the data with the cloud.", ex);
                }
                finally
                {
                    if (synchronizationStarted)
                    {
                        RaiseSynchronizationCompleted(succeeded, requiresReloadLocalData);
                    }
                }
            }
        }
Example #16
0
 private void TimerOnTick(object sender, EventArgs eventArgs)
 {
     CoreHelper.MinimizeFootprint();
 }
Example #17
0
 public override void Invoke(IHandlerContext context)
 {
     try
     {
         QunarUploadPolicyRequest qunarIncrementRequest = CoreHelper.ChangeToChild <UpLoadPolicyRequest, QunarUploadPolicyRequest>(context.Request);
         //获取所有在去哪儿上传过的政策
         string responseContent = CoreHelper.DoPost(System.Configuration.ConfigurationManager.AppSettings["SearchCompleteUploadPolicyUrl"].ToString(), null);
         if (string.IsNullOrEmpty(responseContent))
         {
             OnMiddlewareWorking(new EventMsg()
             {
                 PurchaserType = Enums.PurchaserType.Qunar, Status = Enums.RunStatus.Normal, Msg = "暂未上传过任何政策,不用更新!"
             });
             context.UploadResponse = new UploadPolicyResponse()
             {
                 ErrCode = Enums.ResultType.Sucess
             };
             return;
         }
         CompleteUploadPolicyResponse rep = JsonConvert.DeserializeObject <CompleteUploadPolicyResponse>(responseContent);
         if (rep.ErrCode == Enums.ResultType.Failed || rep.CompleteUploadPolicyCollection == null || rep.CompleteUploadPolicyCollection.Count <= 0)
         {
             OnMiddlewareWorking(new EventMsg()
             {
                 Status = Enums.RunStatus.Normal, Msg = "暂未上传过任何政策,不用更新!"
             });
             context.UploadResponse = new UploadPolicyResponse()
             {
                 ErrCode = Enums.ResultType.Sucess
             };
             return;
         }
         Dictionary <QunarPolicyType, List <Policies> > dic = CoreHelper.ReserveHaveUploadPolicy(qunarIncrementRequest.PolicyDataOrgin, rep.CompleteUploadPolicyCollection);
         if (dic.Count <= 0)
         {
             OnMiddlewareWorking(new EventMsg()
             {
                 Status = Enums.RunStatus.Normal, Msg = "此次更新包不在上传政策列表中,不用更新!"
             });
             context.UploadResponse = new UploadPolicyResponse()
             {
                 ErrCode = Enums.ResultType.Sucess
             };
             return;
         }
         foreach (KeyValuePair <QunarPolicyType, List <Policies> > item in dic)//分批上传不同类型的政策
         {
             qunarIncrementRequest.PolicyType      = item.Key;
             qunarIncrementRequest.PolicyDataOrgin = item.Value;
             context.SetRequest(qunarIncrementRequest);
             Next.Invoke(context);
         }
     }
     catch (Exception ex)
     {
         OnMiddlewareWorking(new EventMsg()
         {
             Status = Enums.RunStatus.Exception, Msg = "QunarFilterRepeatUploadMiddleware:" + ex.Message, Exception = ex, PurchaserType = Enums.PurchaserType.Qunar
         });
         context.UploadResponse = new UploadPolicyResponse()
         {
             ErrCode = Enums.ResultType.Failed, ErrMsg = ex.Message, Excption = ex
         };
         return;
     }
 }
Example #18
0
        public object CreateTourInfo([FromBody] object requestBody)
        {
            var responseModel = new ResponseModel();

            try
            {
                do
                {
                    var identity = HttpContext.User.Identity as ClaimsIdentity;
                    if (identity == null)
                    {
                        break;
                    }

                    var userId = CoreHelper.GetUserId(HttpContext, ref responseModel);

                    var body = requestBody != null
                        ? JObject.Parse(requestBody.ToString() ?? "{}")
                        : null;

                    if (!CoreHelper.GetParameter(out var jsonDestinationPlaceId, body, "DestinatePlaceId",
                                                 JTokenType.Integer, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonStartPlaceId, body, "StartPlaceId",
                                                 JTokenType.Integer, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonImages, body, "Images", JTokenType.Array,
                                                 ref responseModel, true) ||
                        !CoreHelper.GetParameter(out var jsonName, body, "Name", JTokenType.String,
                                                 ref responseModel))
                    {
                        break;
                    }

                    var isDestinationParsed =
                        int.TryParse(jsonDestinationPlaceId?.ToString(), out var destinationPlaceId);
                    var isStartPlaced = int.TryParse(jsonStartPlaceId?.ToString(), out var startPlaceId);

                    if (!isDestinationParsed || !isStartPlaced)
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    var name   = jsonName?.ToString();
                    var images = jsonImages != null
                        ? JsonConvert.DeserializeObject <string[]>(jsonImages.ToString())
                        : null;

                    var tourInfo = new TourInfo(
                        createById: userId,
                        name: name !,
                        images: images !,
                        startPlaceId: startPlaceId,
                        destinatePlaceId: destinationPlaceId
                        );

                    if (!_tourInfoService.TryAddTourInfo(tourInfo))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    responseModel.FromErrorCode(ErrorCode.Success);
                    responseModel.Data = new JArray {
                        AddTourFullInfo(tourInfo, userId)
                    };
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }
        public void GetApplicationName()
        {
            var hash = CoreHelper.GetApplicationName();

            Assert.AreEqual(hash, "UnitTestApp");
        }
Example #20
0
        public object AddNewTour(int id, [FromBody] object requestBody)
        {
            var responseModel = new ResponseModel();

            try
            {
                do
                {
                    var body = requestBody != null
                        ? JObject.Parse(requestBody.ToString() ?? "{}")
                        : null;

                    if (!CoreHelper.GetParameter(out var jsonStartDate, body, "StartDay",
                                                 JTokenType.Date, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonEndDate, body, "EndDay",
                                                 JTokenType.Date, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonTotalDay, body, "TotalDay",
                                                 JTokenType.Integer, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonTotalNight, body, "TotalNight",
                                                 JTokenType.Integer, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonMaxMember, body, "MaxMember",
                                                 JTokenType.Integer, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonTimelines, body, "Timelines",
                                                 JTokenType.Array, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonName, body, "Name",
                                                 JTokenType.String, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonPrice, body, "Price",
                                                 JTokenType.Float, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonServices, body, "Services",
                                                 JTokenType.Array, ref responseModel, isNullable: true))
                    {
                        break;
                    }

                    if (_tourInfoService.TryGetTourInfoById(id, out var tourInfo) != ErrorCode.Success ||
                        tourInfo == null)
                    {
                        throw new ExceptionWithMessage("Tour info not found.");
                    }

                    // var timelines = jsonTimelines.ToObject<List<TimeLine>>();
                    var timelines = JsonConvert.DeserializeObject <List <TimeLine> >(jsonTimelines.ToString());

                    var name = jsonName?.ToString();
                    _ = DateTime.TryParse(jsonStartDate?.ToString(), out var startDate);
                    _ = DateTime.TryParse(jsonEndDate?.ToString(), out var endDate);
                    _ = int.TryParse(jsonMaxMember?.ToString(), out var maxMember);
                    _ = int.TryParse(jsonTotalDay?.ToString(), out var totalDay);
                    _ = int.TryParse(jsonTotalNight?.ToString(), out var totalNight);
                    _ = float.TryParse(jsonPrice?.ToString(), out var price);
                    var serviceIds = jsonServices != null
                        ? JsonConvert.DeserializeObject <string[]>(jsonServices.ToString())
                        : null;

                    // Get user id
                    var userId = CoreHelper.GetUserId(HttpContext, ref responseModel);

                    // Check user is exist
                    if (!_userService.TryGetUsers(userId, out var _))
                    {
                        responseModel.FromErrorCode(ErrorCode.UserNotFound);
                        break;
                    }

                    var tour = new Tour(
                        tourInfo: tourInfo,
                        timelines: timelines,
                        name: name,
                        startDay: startDate,
                        endDay: endDate,
                        totalDay: totalDay,
                        totalNight: totalNight,
                        createById: userId,
                        maxMember: maxMember,
                        tourInfoId: id,
                        services: serviceIds ?? new string[0],
                        price: price
                        );

                    // Add tour to tour info
                    if (!_tourService.TryAddTour(tour, timelines))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }
                    var post = new Post(
                        content: string.Empty,
                        images: new string[0],
                        authorId: userId,
                        createAt: DateTime.Now,
                        tourId: tour.Id,
                        rating: null
                        );

                    //Add post for tour
                    if (!_postService.AddNewPost(post))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    responseModel.FromErrorCode(ErrorCode.Success);
                    responseModel.Data = new JArray {
                        JObject.FromObject(tour)
                    };
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }
Example #21
0
        /// <summary>
        /// Запускает процесс работы с LongPoll-сервером ВКонтакте.
        /// </summary>
        public async void StartLongPolling(bool trace = false)
        {
            if (IsWorking)
            {
                return;
            }
            IsWorking = true;
#if DEBUG
            Debug.WriteLine("LongPoll service started.");
#endif
            _timer.Tick += Timer_Tick;
            _timer.Start();
            CheckCounters();

            _cts = new CancellationTokenSource();

            try
            {
                if (_serverData == null)
                {
                    try
                    {
                        if (!await GetServerData(trace))
                        {
                            return;
                        }
                    }
                    catch (Exception) { }
                }

                if (trace)
                {
                    CoreHelper.SendInAppPush(
                        "Сервис мгновенных сообщений готов",
                        "Сервис успешно запущен", PopupMessageType.Info);
                }

                while (IsWorking)
                {
#if DEBUG
                    Debug.WriteLine("LongPoll request sent. Waiting for data...");
#endif
                    var response = await VKHelper.GetLongPollResponse(_serverData.Server, _serverData.Key,
                                                                      _serverData.Ts, 2, _cts.Token);

                    if (response.Error == VKLongPollErrors.ConnectionError)
                    {
                        if (_numberOfRetries == 5)
                        {
#if DEBUG
                            Debug.WriteLine("LongPoll connection failed. Stopping the service...");
#endif
                            Stop(LongPollStopReason.ConnectionError);
                            return;
                        }
                        _numberOfRetries++;
#if DEBUG
                        Debug.WriteLine(String.Format("LongPoll connecton error. Attempt number: {0}. Attempt after {1} seconds.",
                                                      _numberOfRetries, 5 * _numberOfRetries));
#endif
                        CoreHelper.SendInAppPush(
                            "Повтор через " + 5 * _numberOfRetries + " секунд",
                            "Ошибка соединения", PopupMessageType.Warning);

                        await Task.Delay(TimeSpan.FromSeconds(5 * _numberOfRetries), _cts.Token);

                        continue;
                    }
                    else if (response.Error == VKLongPollErrors.DataIsOutdated)
                    {
                        _serverData.Ts = response.NewTs;
                        await Task.Delay(500);

                        continue;
                    }
                    else if (response.Error == VKLongPollErrors.DataIsCorrupted ||
                             response.Error == VKLongPollErrors.KeyIsExpired)
                    {
                        if (!await GetServerData())
                        {
                            return;
                        }
                    }

#if DEBUG
                    Debug.WriteLine("LongPoll data received.");
#endif

                    _numberOfRetries = 0;
                    _serverData.Ts   = response.NewTs;
                    var messages = new List <MessageInfo>();

                    for (int i = 0; i < response.Updates.Count; i++)
                    {
                        switch (response.Updates[i].Type)
                        {
                        case VKLongPollUpdateType.MessageDeleted:
                            break;

                        case VKLongPollUpdateType.MessageFlagsReplaced:
                            break;

                        case VKLongPollUpdateType.MessageFlagsSetted:
                            break;

                        case VKLongPollUpdateType.MessageFlagsResetted:
                            break;

                        case VKLongPollUpdateType.NewMessage:
                            messages.Add((MessageInfo)response.Updates[i].GetInfo());
                            break;

                        case VKLongPollUpdateType.ReceivedMessagesReaded:
                            break;

                        case VKLongPollUpdateType.SentMessagesReaded:
                            break;

                        case VKLongPollUpdateType.UserOnline:
                            break;

                        case VKLongPollUpdateType.UserOffline:
                            break;

                        case VKLongPollUpdateType.ChatParametersChanged:
                            break;

                        case VKLongPollUpdateType.UserIsTypingInDialog:
                            UserIsTyping(this, new UserIsTypingEventArgs((UserIsTypingInfo)response.Updates[i].GetInfo()));
                            break;

                        case VKLongPollUpdateType.UserIsTypingInChat:
                            UserIsTyping(this, new UserIsTypingEventArgs((UserIsTypingInfo)response.Updates[i].GetInfo()));
                            break;

                        case VKLongPollUpdateType.UserMakesACall:
                            break;

                        case VKLongPollUpdateType.MessageCounterChanged:
                            MessagesCounterChanged(this, new MessagesCounterChangedEventArgs(
                                                       ((MessagesCounterInfo)response.Updates[i].GetInfo()).Count));
                            break;
                        }
                    }

                    OnMessagesReceived(messages);

                    await Task.Delay(500);
                }
            }
            catch (OperationCanceledException) { }
        }
Example #22
0
        public async Task MergingAfterSynchronization()
        {
            Guid categoryFoo;
            Guid categoryBar;
            Guid categoryBoo;

            using (DataManager dataManager = await CreateDataManagerAsync().ConfigureAwait(false))
            {
                await dataManager.LoadOrCreateLocalUserDataBundleAsync(CancellationToken.None).ConfigureAwait(false);

                categoryFoo = (await dataManager.AddNewCategoryAsync("foo", CancellationToken.None).ConfigureAwait(false)).Id;
                categoryBar = (await dataManager.AddNewCategoryAsync("bar", CancellationToken.None).ConfigureAwait(false)).Id;
                categoryBoo = (await dataManager.AddNewCategoryAsync("boo", CancellationToken.None).ConfigureAwait(false)).Id;

                await dataManager.SaveLocalUserDataBundleAsync(true, CancellationToken.None).ConfigureAwait(false);

                // backup data file
                var localUserDataFolder = await CoreHelper.GetOrCreateUserDataStorageFolderAsync().ConfigureAwait(false);

                var dataFile = await localUserDataFolder.GetFileAsync(Constants.UserDataBundleFileName);

                await dataFile.CopyAsync(localUserDataFolder, "backup");

                await dataManager.DeleteCategoryAsync(categoryFoo, CancellationToken.None).ConfigureAwait(false);

                await dataManager.DeleteCategoryAsync(categoryBar, CancellationToken.None).ConfigureAwait(false);

                await dataManager.RenameCategoryAsync(categoryBoo, "HelloThere", CancellationToken.None).ConfigureAwait(false); // local change is more recent, so "hellothere" should persist after merge.

                await dataManager.SaveLocalUserDataBundleAsync(true, CancellationToken.None).ConfigureAwait(false);

                Assert.AreEqual(6, dataManager.Categories.Count);
            }

            using (DataManager dataManager = await CreateDataManagerAsync(clearExistingLocalData: false).ConfigureAwait(false))
            {
                await dataManager.LoadOrCreateLocalUserDataBundleAsync(CancellationToken.None).ConfigureAwait(false);

                Assert.AreEqual(6, dataManager.Categories.Count);

                // restore data file
                var localUserDataFolder = await CoreHelper.GetOrCreateUserDataStorageFolderAsync().ConfigureAwait(false);

                var dataFile = await localUserDataFolder.GetFileAsync("backup");

                await dataFile.RenameAsync(Constants.UserDataBundleFileName, Windows.Storage.NameCollisionOption.ReplaceExisting);

                // Load and do the merge.
                await dataManager.LoadOrCreateLocalUserDataBundleAsync(CancellationToken.None).ConfigureAwait(false);

                Assert.AreEqual(8, dataManager.Categories.Count);

                // Check they're well sorted.
                Assert.AreEqual(LanguageManager.Instance.Core.CategoryAll, dataManager.Categories[0].Name); // Category "All" is always the first.
                Assert.AreEqual("bar", dataManager.Categories[1].Name);
                Assert.AreEqual(LanguageManager.Instance.Core.CategoryFinancial, dataManager.Categories[2].Name);
                Assert.AreEqual("foo", dataManager.Categories[3].Name);
                Assert.AreEqual("HelloThere", dataManager.Categories[4].Name);
                Assert.AreEqual(LanguageManager.Instance.Core.CategoryPersonal, dataManager.Categories[5].Name);
                Assert.AreEqual(LanguageManager.Instance.Core.CategoryProfessional, dataManager.Categories[6].Name);
                Assert.AreEqual(LanguageManager.Instance.Core.CategorySocial, dataManager.Categories[7].Name);
            }
        }
 private static void TimerKeepAwakeTick(object sender, EventArgs eventArgs)
 {
     CoreHelper.KeepDeviceAwake();
     DebugHelper.WriteLogEntry("TimerKeepAwakeTick");
 }
        /// <summary>
        /// Load the value of <see cref="StartWithWindows"/>. This method must be called once the window is loaded and visible.
        /// </summary>
        internal async Task LoadStartWithWindows()
        {
            _startWithWindows = await CoreHelper.IsAppStartsAtLogin();

            RaisePropertyChanged(nameof(StartWithWindows));
        }
        public override void Invoke(IHandlerContext context)
        {
            try
            {
                QunarUploadPolicyRequest qunarRequest = CoreHelper.ChangeToChild <UpLoadPolicyRequest, QunarUploadPolicyRequest>(context.Request);

                OnMiddlewareWorking(new EventMsg {
                    Status = RunStatus.Normal, Msg = "开始获取去哪儿全量更新包..."
                });
                //PolicySyncRecLib syncLib = new PolicySyncRecLib();
                //PolicyRecord policyRec = CoreHelper.GetLastUpTimeAndId("Qunar\\QunarFullPolicyRecLog");//去哪儿全量选择日志
                #region 查询政策
                SearchPolicyRequest request = new SearchPolicyRequest()
                {
                    CommisionMoney     = qunarRequest.CommisionMoney,
                    CommsionPoint      = qunarRequest.CommsionPoint,
                    IsUpload           = true,
                    OperName           = qunarRequest.OperName,
                    PageSize           = qunarRequest.PageSize,
                    PolicyType         = qunarRequest.PolicyType,
                    pType              = PurchaserType.Qunar,
                    SqlWhere           = qunarRequest.SqlWhere,
                    UType              = qunarRequest.UploadType,
                    IsSearchTotalCount = false
                };
                string searchContent           = CoreHelper.DoPost(System.Configuration.ConfigurationManager.AppSettings["SearchPolicyUrl"].ToString(), request);
                SearchPolicyResponse rep       = JsonConvert.DeserializeObject <SearchPolicyResponse>(searchContent);//先查询一遍,获取要上传的政策
                PolicyRecord         policyRec = rep.LastPolicyRecord;
                context.UploadResponse.BeforePolicyRecord = policyRec;
                OnMiddlewareWorking(new EventMsg {
                    Status = RunStatus.Normal, Msg = "载入上次更新记录,更新时间:" + policyRec.LastUpdateTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + ",上次最后一条更新id:" + policyRec.LastPolicyId.ToString() + ",收到全量政策包:" + rep.lstPolicies.Count + "条"
                });
                qunarRequest.PolicyDataOrgin = rep.lstPolicies;
                context.SetRequest(qunarRequest);
                Next.Invoke(context);
                #endregion
                #region 注释
                //bool isHaveAll = false;
                ////过滤政策
                //#region 过滤政策
                //int count = rep.lstPolicies == null ? 0 : rep.lstPolicies.Count;
                //OnMiddlewareWorking(new EventMsg { Status = RunStatus.Normal, Msg = "查询到政策数量:" + count + " 条,开始过滤..." });
                //List<Policies> lstFiltedPolicy = CoreHelper.FilterPolicy(qunarRequest.LstQunarCodes, rep.lstPolicies, ref isHaveAll);
                //if (lstFiltedPolicy.Count <= 0)
                //{
                //    OnMiddlewareWorking(new EventMsg { Status = RunStatus.Normal, Msg = "经过去哪儿三子码过滤后未筛选到要上传的政策" });
                //    return;
                //}
                ////if (isHaveAll)
                ////{
                ////  return;
                ////DialogResult dr = MessageBox.Show("当前上传的政策有全国对全国的政策,是否继续上传", "提示", MessageBoxButtons.OKCancel);
                ////if (dr == DialogResult.Cancel)
                ////{
                ////    return;
                ////}
                ////}
                //#endregion
                //List<Policies> lstAddPolicies = CoreHelper.SplitPolicy(request.pType, lstFiltedPolicy, qunarRequest.LstQunarCodes);//拆分政策
                //qunarRequest.UploadCount = lstAddPolicies.Count;
                //context.UploadResponse.BeforePolicyRecord = policyRec;
                //// List<Policies> lstAddPolicies = syncLib.LoadPolicy(context.Request.PageSize, policyRec, context.Request.SqlWhere, PurchaserType.Qunar, ref selectSql,ref totalCount, UploadType.FullUpload, context.Request.CommisionMoney, context.Request.CommsionPoint);//获取要上传的政策
                //// List<Policies> lstAddPolicies = syncLib.LoadPolicy(policyRec, context.Request.CommisionMoney, context.Request.CommsionPoint, context.Request.PageSize, context.Request.SqlWhere, ref selectSql, ref totalCount, UploadType.FullUpload);//获取要上传的政策


                ////if(!context.Request.IsPrintSql)
                ////{
                ////    selectSql = "";
                ////}
                ////selectSql = context.Request.IsPrintSql ? "\r\n筛选sql为:\r\n" + selectSql+"\r\n" : "";
                //if (lstAddPolicies.Count <= 0)
                //{
                //    OnMiddlewareWorking(new EventMsg { Status = RunStatus.Normal, Msg = "未筛选到要上传的政策,或者筛选的政策已经上传!" });
                //    context.UploadResponse = new UploadPolicyResponse() { ErrCode = ResultType.Failed, ErrMsg = "未筛选到要上传的政策,或者筛选的政策已经上传!" };
                //    return;
                //}
                #endregion
            }
            catch (Exception ex)
            {
                OnMiddlewareWorking(new EventMsg()
                {
                    Status = ND.PolicyService.Enums.RunStatus.Exception, Msg = "QunarLoadFullPolicyMiddleware:" + ex.Message, Exception = ex, PurchaserType = ND.PolicyService.Enums.PurchaserType.Qunar
                });
                context.UploadResponse = new UploadPolicyResponse()
                {
                    ErrCode = ND.PolicyService.Enums.ResultType.Failed, ErrMsg = ex.Message, Excption = ex
                };
                return;
            }
        }
        /// <summary>
        /// Executes a report against a specified realm. The realm must be set in the context.
        /// </summary>
        /// <param name="reportName">Name of Report to Run.</param>
        /// <returns>Returns an updated version of the entity with updated identifier and sync token.</returns>
        public Report ExecuteReport(string reportName)
        {
            this.serviceContext.IppConfiguration.Logger.CustomLogger.Log(Diagnostics.TraceLevel.Info, "Called Method ExecuteReport.");

            // Validate parameter
            if (string.IsNullOrEmpty(reportName))
            {
                IdsException exception = new IdsException(Resources.ParameterNotNullMessage, new ArgumentNullException(Resources.StringParameterNullOrEmpty));
                this.serviceContext.IppConfiguration.Logger.CustomLogger.Log(Diagnostics.TraceLevel.Error, string.Format(CultureInfo.InvariantCulture, Resources.ExceptionGeneratedMessage, exception.ToString()));
                IdsExceptionManager.HandleException(exception);
            }

            string resourceString = reportName;

            //Build Query Parameters

            // Builds resource Uri
            string uri = "";
            string reportsQueryParameters = GetReportQueryParameters();

            if (reportsQueryParameters.Length > 0)
            {
                uri = string.Format(CultureInfo.InvariantCulture, "{0}/company/{1}/reports/{2}?{3}", Utility.CoreConstants.VERSION, this.serviceContext.RealmId, resourceString, reportsQueryParameters);
            }
            else
            {
                uri = string.Format(CultureInfo.InvariantCulture, "{0}/company/{1}/reports/{2}", Utility.CoreConstants.VERSION, this.serviceContext.RealmId, resourceString);
            }

            // Creates request parameters
            RequestParameters parameters;

            if (this.serviceContext.IppConfiguration.Message.Request.SerializationFormat == Intuit.Ipp.Core.Configuration.SerializationFormat.Json)
            {
                parameters = new RequestParameters(uri, HttpVerbType.GET, Utility.CoreConstants.CONTENTTYPE_APPLICATIONJSON);
            }
            else
            {
                parameters = new RequestParameters(uri, HttpVerbType.GET, Utility.CoreConstants.CONTENTTYPE_APPLICATIONXML);
            }

            // Prepares request
            HttpWebRequest request = this.restHandler.PrepareRequest(parameters, null);

            string response = string.Empty;

            try
            {
                // gets response
                response = this.restHandler.GetResponse(request);
            }
            catch (IdsException ex)
            {
                IdsExceptionManager.HandleException(ex);
            }

            CoreHelper.CheckNullResponseAndThrowException(response);

            // de serialize object
            IntuitResponse restResponse = (IntuitResponse)CoreHelper.GetSerializer(this.serviceContext, false).Deserialize <IntuitResponse>(response);

            this.serviceContext.IppConfiguration.Logger.CustomLogger.Log(Diagnostics.TraceLevel.Info, "Finished Executing Method ExecuteReport.");
            return((Report)(restResponse.AnyIntuitObject as Report));
        }
Example #27
0
        public override RunTaskResult RunTask()
        {
            RunTaskResult taskResult = new RunTaskResult()
            {
                Success = true, Result = "执行完毕"
            };
            List <Policies> lstPolicies     = new List <Policies>();
            string          queueName       = CustomConfig["policyListenQueueName"];
            string          queueHost       = CustomConfig["policyListenQueueHost"];
            string          updateQueueName = CustomConfig["policyUpdateQueueName"];
            string          updateQueueHost = CustomConfig["policyUpdateQueueHost"];

            while (true)
            {
                #region 监听队列
                try
                {
                    MessageQueue             x         = new MessageQueue(".\\" + queueHost + "\\" + queueName);
                    System.Messaging.Message myMessage = x.Receive(MessageQueueTransactionType.Single);
                    myMessage.Formatter = new BinaryMessageFormatter();
                    lstPolicies         = myMessage.Body as List <Policies>;
                    if (lstPolicies == null || lstPolicies.Count <= 0)
                    {
                        ShowRunningLog("未从队列中收到任何政策更新包!");
                        continue;
                    }
                    ShowRunningLog("收到监听队列中政策更新包:" + lstPolicies.Count + "条!");
                }
                catch (Exception ex)
                {
                    ShowRunningLog("监听队列异常:" + JsonConvert.SerializeObject(ex));
                    taskResult = new RunTaskResult()
                    {
                        Success = false, Result = ex.Message
                    };
                    // return taskResult;
                    continue;
                }
                #endregion
                try
                {
                    string responseContent = CoreHelper.DoPost(System.Configuration.ConfigurationManager.AppSettings["SearchCompleteUploadPolicyUrl"].ToString(), null);
                    if (string.IsNullOrEmpty(responseContent))
                    {
                        ShowRunningLog("暂未上传过任何政策,不用更新!");
                        // return taskResult;
                        continue;
                    }

                    CompleteUploadPolicyResponse rep = JsonConvert.DeserializeObject <CompleteUploadPolicyResponse>(responseContent);
                    if (rep.ErrCode == ResultType.Failed || rep.CompleteUploadPolicyCollection == null || rep.CompleteUploadPolicyCollection.Count <= 0)
                    {
                        ShowRunningLog("暂未上传过任何政策,不用更新!");
                        //return taskResult;
                        continue;
                    }
                    Dictionary <QunarPolicyType, List <Policies> > dic = CoreHelper.ReserveHaveUploadPolicy(lstPolicies, rep.CompleteUploadPolicyCollection);
                    if (dic.Count <= 0)
                    {
                        ShowRunningLog("此次更新包不在上传政策列表中,不用更新!");
                        // return taskResult;
                        continue;
                    }
                    //在的话发送到更新队列中
                    List <Policies> lstUpdatePolicies = new List <Policies>();
                    foreach (KeyValuePair <QunarPolicyType, List <Policies> > item in dic)
                    {
                        ShowRunningLog("收到去哪儿" + item.Key.ToString() + "政策更新包:" + item.Value.Count + "条");
                        item.Value.ForEach(x =>
                        {
                            lstUpdatePolicies.Add(x);
                        });
                    }
                    new MessageQueueHelper().SendMsgToQueue(updateQueueName, lstUpdatePolicies, MessagePriority.Normal, updateQueueHost);
                    ShowRunningLog("发送更新队列成功!");
                    continue;
                }
                catch (Exception ex)
                {
                    ShowRunningLog(JsonConvert.SerializeObject(ex));
                    //return new RunTaskResult() { Success = false, Result = ex.Message };
                    continue;
                }
            }
        }
Example #28
0
        /// <summary>
        /// 返回一个值
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <returns></returns>
        public TResult ToScalar <TResult>()
        {
            object obj = this.ToScalar();

            return(CoreHelper.ConvertValue <TResult>(obj));
        }
 public static void AssemblyInitialize(TestContext context)
 {
     RestTests <TestStartup> .LoadBalancerUrl = CoreHelper.GetConfiguration <WebConfiguration>().LoadBalancerUrl;
 }
Example #30
0
 /// <summary>
 /// 数据访问上下文
 /// </summary>
 /// <param name="dbHelper"></param>
 /// <param name="dbLocation"></param>
 public DbContext(CoreHelper.DBHelper dbHelper, DBLocation dbLocation)
 {
     DBHelper = dbHelper;
     DBLocation = dbLocation;
 }
Example #31
0
 private void OpenUrl(string url)
 {
     CoreHelper.OpenBrowser(url);
 }
Example #32
0
 public Member_Action Create(CoreHelper.Enum.MemberActionType MemberActionType)
 {
     return Create(MemberActionType, string.Empty);
 }
Example #33
0
 private void ExecuteContextMenuClosedCommand()
 {
     CoreHelper.MinimizeFootprint();
 }