private QueryBehavior SetQueryLimitsBasedOnToken(string token, IRavenQueryable <Post> postsQuery)
        {
            var behavior = new QueryBehavior
            {
                AddExpiredNote = false,
                Title          = BlogConfig.Title,
                Take           = 20
            };

            if (string.IsNullOrEmpty(token))
            {
                behavior.PostsQuery = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AsMinutes());
                return(behavior);
            }

            int    numberOfDays;
            string user;

            if (GetNumberOfDays(token, out numberOfDays, out user))
            {
                behavior.Take       = Math.Max(numberOfDays, behavior.Take);
                behavior.Title      = behavior.Title + " for " + user;
                behavior.PostsQuery = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AddDays(numberOfDays).AsMinutes());
            }
            else
            {
                behavior.Title          = behavior.Title + " for " + user + " EXPIRED TOKEN";
                behavior.PostsQuery     = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AsMinutes());
                behavior.AddExpiredNote = true;
            }
            return(behavior);
        }
        /// <summary>
        /// Instantiates a Target.
        /// </summary>
        /// <remarks>
        /// Used to specify the query method and selection of targets and the corresponding action to be performed.
        /// </remarks>
        ///
        /// <param name="name">Unique name of the Target type</param>
        /// <param name="validator">Delegate method used to verify items fit this target's selection</param>
        /// <param name="condition">Delegate method used to confirm whether target should be found</param>
        /// <param name="action">Delegate method called when target is found and navigated to by the Bot</param>
        /// <param name="callOrder">Order by which the bot finds and focuses on targets. Within call order types, order by which the targets are passed into the Bot is upheld</param>
        /// <param name="query">Method by which targets should be found</param>
        /// <param name="selectors">Post query selectors. Used to select tiles spacially related to the target</param>
        /// <param name="actionableRange">Range by which target should perform action</param>
        /// <param name="doForClosestLimit">Only applies to <see cref="QueryBehavior.DoForClosest">QueryBehavior.DoForClosest</see>. Used to extend functionality to: Do for closest {{doForClosestLimit}}</param>
        /// <param name="withinRangeLimit">Only applies to <see cref="QueryBehavior.WithinRange">QueryBehavior.WithinRange</see>. Clarifies what range to search for targets</param>
        public Target(
            string name,
            Validator <T> validator,
            Condition <T> condition,
            Action <T> action,
            CallOrder callOrder = CallOrder.AtLocationStart,
            QueryBehavior query = QueryBehavior.DoForAll,
            IList <PostQuerySelector> selectors = null,
            int actionableRange   = 1,
            int doForClosestLimit = 1,
            int withinRangeLimit  = 1
            )
        {
            this._index = numTargets;
            numTargets  = numTargets + 1;

            this._name              = name;
            this._validator         = validator;
            this._condition         = condition;
            this._action            = action;
            this._callOrder         = callOrder;
            this._query             = query;
            this._selectors         = selectors;
            this._actionableRange   = actionableRange;
            this._doForClosestLimit = doForClosestLimit;
            this._withinRangeLimit  = withinRangeLimit;

            if (this._selectors == null)
            {
                this._selectors = new List <PostQuerySelector>();
                this._selectors.Add(PostQuerySelector.TileOf);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Instantiates an ObjectTarget, used to specify the query method and selection of objects and the corresponding action to be performed.
 /// </summary>
 ///
 /// <param name="name">Unique name of the Target type</param>
 /// <param name="validator">Delegate method used to verify items fit this target's selection</param>
 /// <param name="action">Delegate method called when target is found and navigated to by the Bot</param>
 /// <param name="callOrder">Order by which the bot finds and focuses on targets. Within call order types, order by which the targets are passed into the Bot is upheld.</param>
 /// <param name="query">Method by which targets should be found.</param>
 /// <param name="selectors"></param>
 public TargetObject(
     string name,
     Validator <StardewValley.Object> validator,
     Condition <StardewValley.Object> condition,
     Action <StardewValley.Object> action,
     CallOrder callOrder = CallOrder.AtLocationStart,
     QueryBehavior query = QueryBehavior.DoForAll,
     IList <PostQuerySelector> selectors = null,
     int actionableRange   = 1,
     int doForClosestLimit = 1,
     int withinRangeLimit  = 1
     ) : base(
         name,
         validator,
         condition,
         action,
         callOrder,
         query,
         selectors,
         actionableRange,
         doForClosestLimit,
         withinRangeLimit
         )
 {
 }
Exemplo n.º 4
0
        public QueryBehaviorScope(QueryBehavior queryBehavior, string messageHeaderKey)
        {
            _Old             = CurQueryBehavior;
            CurQueryBehavior = queryBehavior;

            _OldMessageHeaderKey = MessageHeaderKey;
            MessageHeaderKey     = messageHeaderKey;
        }
 /// <summary>
 /// 为SQL语句设定动态列
 /// </summary>
 /// <param name="cmd"></param>
 /// <param name="qh"></param>
 private void resetDynamicColumns(DbCommand cmd, QueryBehavior qh)
 {
     if (qh != null && qh.Columns != null && qh.Columns.Length > 0)
     {
         string[] cols   = qh.Columns.Split(',');
         string   strSql = cmd.CommandText;
         cmd.CommandText = "SELECT " + qh.Columns + " FROM (" + strSql + ") ";
         MB.Util.TraceEx.Write("发现动态列: " + cmd.CommandText);
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// 追加当前查询的行为信息
        /// </summary>
        /// <param name="queryBehavior"></param>
        public static void AppendQueryBehavior(QueryBehavior queryBehavior, string messageKey)
        {
            EntityXmlSerializer <QueryBehavior> se = new EntityXmlSerializer <QueryBehavior>();
            string dstr = se.SingleSerializer(queryBehavior, string.Empty);
            string queryBehavuorMessageHeader = SOD.QUERY_BEHAVIOR_MESSAGE_HEADER;

            if (!string.IsNullOrEmpty(messageKey))
            {
                queryBehavuorMessageHeader = queryBehavuorMessageHeader + "_" + messageKey;
            }

            AppendMessageHeader(queryBehavuorMessageHeader, dstr);
        }
Exemplo n.º 7
0
 private void Dispose(bool disposing)
 {
     if (!this.disposed)
     {
         if (disposing)
         {
             CurQueryBehavior = _Old;
             MessageHeaderKey = _OldMessageHeaderKey;
             ResponseInfo     = null;
         }
         disposed = true;
     }
 }
        public static void SetupQuery <TContext, TRequest, TResponse>(this Mock <IMediator> mockMediator, TContext context, IRequestHandler <TRequest, TResponse> interactor, IValidator <TRequest> validator)
            where TRequest : IQuery <TResponse>
            where TContext : DbContext
        {
            ValidatorBehavior <TRequest, TResponse> validatorBehavior = GetValidatorBehavior <TRequest, TResponse>(validator);

            var queryBehavior = new QueryBehavior <TContext, TRequest, TResponse>(context);

            mockMediator.Setup(m => m.Send(It.IsAny <TRequest>(), default))
            .Returns <TRequest, CancellationToken>(async(request, cancellationToken) =>
            {
                return(await validatorBehavior.Handle(request, cancellationToken,
                                                      async() => await queryBehavior.Handle(request, cancellationToken, async() => await interactor.Handle(request, cancellationToken))));
            });
        }
Exemplo n.º 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        protected virtual IDbQueryResult ExecuteImpl(SqlCommand command)
        {
            var _queryBehavior = QueryBehavior.GetValueOrDefault(DbQueryBehaviors.Default);
            var _queryExecutor = _queryExecutorFactory.CreateDbQueryExecutor(_queryBehavior);

            if (!_queryBehavior.HasFlag(DbQueryBehaviors.Parameterized))
            {
                command.CommandType = CommandType.StoredProcedure;
            }

            if (ExecutionTimeout.HasValue)
            {
                command.CommandTimeout = ExecutionTimeout.Value;
            }

            return(_queryExecutor.Execute(command));
        }
Exemplo n.º 10
0
 /// <summary>
 /// 获取扩展地点信息
 /// </summary>
 /// <param name="pPoints"></param>
 /// <param name="pQBehavior"></param>
 /// <param name="Distance"></param>
 /// <param name="action"></param>
 private void GetAroundStationArea(List <MapPointEx> pPoints, QueryBehavior pQBehavior, double Distance, Action <Point[], Point, Point> action)
 {
     int Re = ShowMap.MainMap.GeometryBuffer(pPoints, pQBehavior, Distance, new Action <List <MapPointEx> >((points) =>
     {
         if (points != null && points.Count > 0)
         {
             Point[] list = new Point[points.Count - 1];
             double x1    = 0, y1 = 0, x2 = 0, y2 = 0;
             for (int i = 0; i < points.Count; i++)
             {
                 if (x1 == 0)
                 {
                     x1 = x2 = points[i].X;
                     y1 = y2 = points[i].Y;
                 }
                 x1 = x1 < points[i].X ? x1 : points[i].X;
                 x2 = x2 < points[i].X ? points[i].X : x2;
                 y1 = y1 < points[i].Y ? points[i].Y : y1;
                 y2 = y2 < points[i].Y ? y2 : points[i].Y;
                 if (i == points.Count - 1)
                 {
                     break;
                 }
                 list[i] = new Point(points[i].X, points[i].Y);
             }
             if (action != null)
             {
                 action(list, new Point(x1, y1), new Point(x2, y2));
             }
         }
         else//xgh
         {
             if (action != null)
             {
                 action(null, new Point(0, 0), new Point(0, 0));
             }
         }
     }), RiasPortal.GetMapGeometryServerUrl());  ////获得几何服务地址
 }
Exemplo n.º 11
0
        /// <summary>
        /// 由于动态列的情况下,某些列并不是从数据库取出来的,
        /// 需要中间层开发人员自己定义哪些列一定要在SQL中而哪些列不能包括在SQL中
        /// 该方法用于重新设定当前WCF上下文中InComingMessage中的消息头QueryBehavior的Columns中的值
        /// </summary>
        /// <returns></returns>
        public static void SetQueryBehaviorColoums(string messageHeaderKey, string columns)
        {
            if (OperationContext.Current == null ||
                OperationContext.Current.IncomingMessageVersion == MessageVersion.None ||
                OperationContext.Current.IncomingMessageVersion.Envelope == EnvelopeVersion.None)
            {
                return;
            }

            string headerKey = SOD.QUERY_BEHAVIOR_MESSAGE_HEADER;

            if (!string.IsNullOrEmpty(messageHeaderKey))
            {
                headerKey += "_" + messageHeaderKey;
            }

            QueryBehavior queryBehavior = GetQueryBehavior(messageHeaderKey);

            if (queryBehavior != null)
            {
                queryBehavior.Columns = columns;
                EntityXmlSerializer <QueryBehavior> se = new EntityXmlSerializer <QueryBehavior>();
                string dstr = se.SingleSerializer(queryBehavior, string.Empty);

                MessageHeader <string> mh     = new MessageHeader <string>(dstr);
                MessageHeader          header = mh.GetUntypedHeader(headerKey, SOD.MESSAGE_HEADER_NAME_SPACE);

                int re = OperationContext.Current.IncomingMessageHeaders.FindHeader(headerKey, SOD.MESSAGE_HEADER_NAME_SPACE);
                if (re < 0)
                {
                    OperationContext.Current.IncomingMessageHeaders.Add(header);
                }
                else
                {
                    OperationContext.Current.IncomingMessageHeaders.RemoveAt(re);
                    OperationContext.Current.IncomingMessageHeaders.Add(header);
                }
            }
        }
        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
        {
            QueryBehavior queryBehavior = QueryBehaviorScope.CurQueryBehavior;

            if (queryBehavior != null)
            {
                EntityXmlSerializer <QueryBehavior> se = new EntityXmlSerializer <QueryBehavior>();
                string dstr = se.SingleSerializer(queryBehavior, string.Empty);
                MessageHeader <string> mh = new MessageHeader <string>(dstr);
                string name = SOD.QUERY_BEHAVIOR_MESSAGE_HEADER;
                if (!string.IsNullOrEmpty(QueryBehaviorScope.MessageHeaderKey))
                {
                    name += "_" + QueryBehaviorScope.MessageHeaderKey;
                }
                MessageHeader header = mh.GetUntypedHeader(name, SOD.MESSAGE_HEADER_NAME_SPACE);

                int ret = request.Headers.FindHeader(name, SOD.MESSAGE_HEADER_NAME_SPACE);
                if (ret < 0)
                {
                    request.Headers.Add(header);
                }
            }
            return(null);
        }
Exemplo n.º 13
0
 public QueryBehaviorScope(QueryBehavior queryBehavior)
 {
     _Old             = CurQueryBehavior;
     CurQueryBehavior = queryBehavior;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="queryBehavior"></param>
 public DatabaseExcuteByXmlHelper(QueryBehavior queryBehavior)
 {
     _QueryBehavior = queryBehavior;
 }
Exemplo n.º 15
0
 /// <summary>
 /// 追加当前查询的行为信息
 /// </summary>
 /// <param name="queryBehavior"></param>
 public static void AppendQueryBehavior(QueryBehavior queryBehavior)
 {
     AppendQueryBehavior(queryBehavior, string.Empty);
 }
Exemplo n.º 16
0
		private QueryBehavior SetQueryLimitsBasedOnToken(string token, IRavenQueryable<Post> postsQuery)
		{
			var behavior = new QueryBehavior
			{
				AddExpiredNote = false,
				Title = BlogConfig.Title,
				Take = 20
			};
			if (string.IsNullOrEmpty(token))
			{
				behavior.PostsQuery = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AsMinutes());
				return behavior;
			}

			int numberOfDays;
			string user;
			if (GetNumberOfDays(token, out numberOfDays , out user))
			{
				behavior.Take = Math.Max(numberOfDays, behavior.Take);
				behavior.Title = behavior.Title + " for " + user;
				behavior.PostsQuery = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AddDays(numberOfDays).AsMinutes());
			}
			else
			{
				behavior.Title = behavior.Title + " for " + user + " EXPIRED TOKEN";
				behavior.PostsQuery = postsQuery.Where(x => x.PublishAt < DateTimeOffset.Now.AsMinutes());
				behavior.AddExpiredNote = true;
			}
			return behavior;
		}
 /// <summary>
 /// 客户端查询RULE的抽象
 /// </summary>
 public AbstractClientRuleQuery()
 {
     _QueryBehavior = new QueryBehavior(0, SOD.DEFAULT_MAX_SHOT_COUNT);
 }
Exemplo n.º 18
0
 /// <summary>
 /// DatabaseExecuteHelper
 /// </summary>
 /// <param name="queryBehavior"></param>
 public DatabaseExecuteHelper(QueryBehavior queryBehavior) : this()
 {
     _QueryBehavior = queryBehavior;
 }
Exemplo n.º 19
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="queryBehavior"></param>
 public ObjectEditHelper(QueryBehavior queryBehavior)
 {
     _QueryBehavior = queryBehavior;
 }