예제 #1
0
        //$ALL

        private void OnGetAllBefore(HttpEntity entity, UriTemplateMatch match)
        {
            var p = match.BoundVariables["pos"];
            var c = match.BoundVariables["count"];

            TFPos position;
            int   count;

            if (!string.IsNullOrEmpty(p))
            {
                if (!TFPos.TryParse(p, out position))
                {
                    SendBadRequest(entity, string.Format("Invalid position argument : {0}", p));
                }
            }
            else
            {
                position = TFPos.Invalid;
            }

            if (!string.IsNullOrEmpty(c))
            {
                if (!int.TryParse(c, out count))
                {
                    SendBadRequest(entity, string.Format("Invalid count argument : {0}", c));
                }
            }
            else
            {
                count = AtomSpecs.FeedPageSize;
            }

            _allEventsController.GetAllBefore(entity, position, count);
        }
예제 #2
0
        private RequestParams GetAllEventsForward(HttpEntityManager manager, UriTemplateMatch match)
        {
            var pos = match.BoundVariables["position"];
            var cnt = match.BoundVariables["count"];

            TFPos position;
            int   count;
            var   embed = GetEmbedLevel(manager, match);

            if (!TFPos.TryParse(pos, out position) || position.PreparePosition < 0 || position.CommitPosition < 0)
            {
                return(SendBadRequest(manager, string.Format("Invalid position argument: {0}", pos)));
            }
            if (!int.TryParse(cnt, out count) || count <= 0)
            {
                return(SendBadRequest(manager, string.Format("Invalid count argument: {0}", cnt)));
            }
            bool requireMaster;

            if (!GetRequireMaster(manager, out requireMaster))
            {
                return(SendBadRequest(manager,
                                      string.Format("{0} header in wrong format.", SystemHeaders.RequireMaster)));
            }
            TimeSpan?longPollTimeout;

            if (!GetLongPoll(manager, out longPollTimeout))
            {
                return(SendBadRequest(manager, string.Format("{0} header in wrong format.", SystemHeaders.LongPoll)));
            }

            var envelope = new SendToHttpEnvelope(_networkSendQueue,
                                                  manager,
                                                  (args, msg) => Format.ReadAllEventsForwardCompleted(args, msg, embed),
                                                  (args, msg) => Configure.ReadAllEventsForwardCompleted(args, msg, headOfTf: false));
            var corrId = Guid.NewGuid();

            Publish(new ClientMessage.ReadAllEventsForward(corrId, corrId, envelope,
                                                           position.CommitPosition, position.PreparePosition, count,
                                                           requireMaster, true, GetETagTFPosition(manager), manager.User,
                                                           longPollTimeout));
            return(new RequestParams((longPollTimeout ?? TimeSpan.Zero) + ESConsts.HttpTimeout));
        }
예제 #3
0
        // $ALL
        private void GetAllEventsBackward(HttpEntityManager manager, UriTemplateMatch match)
        {
            var pos = match.BoundVariables["position"];
            var cnt = match.BoundVariables["count"];

            TFPos position = TFPos.HeadOfTf;
            int   count    = AtomSpecs.FeedPageSize;
            var   embed    = GetEmbedLevel(manager, match);

            if (pos != null && pos != "head" &&
                (!TFPos.TryParse(pos, out position) || position.PreparePosition < 0 ||
                 position.CommitPosition < 0))
            {
                SendBadRequest(manager, string.Format("Invalid position argument: {0}", pos));
                return;
            }

            if (cnt.IsNotEmptyString() && (!int.TryParse(cnt, out count) || count <= 0))
            {
                SendBadRequest(manager, string.Format("Invalid count argument: {0}", cnt));
                return;
            }

            bool requireMaster;

            if (!GetRequireMaster(manager, out requireMaster))
            {
                SendBadRequest(manager, string.Format("{0} header in wrong format.", SystemHeaders.RequireMaster));
                return;
            }

            var envelope = new SendToHttpEnvelope(_networkSendQueue,
                                                  manager,
                                                  (args, msg) => Format.ReadAllEventsBackwardCompleted(args, msg, embed),
                                                  (args, msg) => Configure.ReadAllEventsBackwardCompleted(args, msg, position == TFPos.HeadOfTf));
            var corrId = Guid.NewGuid();

            Publish(new ClientMessage.ReadAllEventsBackward(corrId, corrId, envelope,
                                                            position.CommitPosition, position.PreparePosition, count,
                                                            requireMaster, true, GetETagTFPosition(manager), manager.User));
        }
예제 #4
0
        private void OnGetAllAfter(HttpEntity entity, UriTemplateMatch match)
        {
            var p = match.BoundVariables["pos"];
            var c = match.BoundVariables["count"];

            TFPos position;
            int   count;

            if (string.IsNullOrEmpty(p) || !TFPos.TryParse(p, out position))
            {
                SendBadRequest(entity, string.Format("Invalid position argument : {0}", p));
                return;
            }
            if (string.IsNullOrEmpty(c) || !int.TryParse(c, out count))
            {
                SendBadRequest(entity, string.Format("Invalid count argument : {0}", c));
                return;
            }

            _allEventsController.GetAllAfter(entity, position, count);
        }