示例#1
0
        /// <summary>
        /// Produces the request.
        /// </summary>
        /// <returns>The request.</returns>
        /// <param name="parameters">Parameters.</param>
        /// <param name="uriString">URI string.</param>
        HttpWebRequest ProduceRequest(IInteraction parameters, string uriString)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uriString);

            request.Method      = this.Method;
            request.ContentType = GetContentType();
            request.Expect      = "200";

            if (this.UseAuthentication)
            {
                request.Credentials = Credentials.Recover(parameters);
            }

            if (this.Body != null)
            {
                SimpleOutgoingInteraction bodyBuilder = new SimpleOutgoingInteraction(
                    request.GetRequestStream(), parameters);

                if (this.Body.TryProcess(bodyBuilder))
                {
                    throw new Exception("Failed to compose body");
                }

                bodyBuilder.Done();
            }

            return(request);
        }
示例#2
0
        protected bool TryGetImage(IInteraction parameters, ImageProcessor imageCallback)
        {
            bool success = false;

            IInteraction candidateImageOut;

            if (parameters.TryGetClosest(typeof(IOutgoingBodiedInteraction), out candidateImageOut))
            {
                IOutgoingBodiedInteraction imageOut = (IOutgoingBodiedInteraction)candidateImageOut;

                if (imageOut is IHttpInteraction)
                {
                    if (this.UseJpgInsteadOfPng)
                    {
                        ((IHttpInteraction)imageOut).ResponseHeaders["Content-Type"] = "image/jpg";
                    }
                    else
                    {
                        ((IHttpInteraction)imageOut).ResponseHeaders["Content-Type"] = "image/png";
                    }
                }

                MemoryStream imageData = new MemoryStream();
                SimpleOutgoingInteraction imageSourcer = new SimpleOutgoingInteraction(
                    imageData, Encoding.Default, parameters);

                if (WithBranch.TryProcess(imageSourcer))
                {
                    Image inImage = Bitmap.FromStream(imageData);

                    Bitmap outImage = imageCallback(inImage);

                    inImage.Dispose();

                    if (outImage != emptyBitmap)
                    {
                        outImage.Save(imageOut.OutgoingBody, selectedImageformat);

                        outImage.Dispose();
                    }

                    success = true;
                }
                else
                {
                    Secretary.Report(5, "Image source failure");
                }
            }
            else
            {
                Secretary.Report(5, "No outgoing body found to write result image to.");
            }

            return(success);
        }
        public bool TryGetDatareader(IInteraction parameters, IInteraction until, out TextReader reader)
        {
            IInteraction candidate;
            bool         success;

            if (IsForwardSourcing)
            {
                MemoryStream dataTarget = new MemoryStream();
                SimpleOutgoingInteraction dataTargetInteraction;
                dataTargetInteraction = new SimpleOutgoingInteraction(
                    dataTarget, this.Encoding, parameters);

                success = ForwardSource.TryProcess(dataTargetInteraction);

                dataTargetInteraction.Done();
                dataTarget.Position = 0;

                reader = new StreamReader(dataTarget, this.Encoding);
            }
            else if (IsVariableSourcing)
            {
                string value;

                success = parameters.TryGetFallbackString(this.Variable, out value);

                if (success)
                {
                    reader = new StringReader(value);
                }
                else
                {
                    reader = null;
                }
            }
            else if (parameters.TryGetClosest(typeof(IIncomingBodiedInteraction), until, out candidate))
            {
                IIncomingBodiedInteraction source = (IIncomingBodiedInteraction)candidate;

                success = CheckMimetype(source.ContentType);
                reader  = source.GetIncomingBodyReader();
            }
            else
            {
                success = false;
                reader  = null;
            }

            return(success);
        }
示例#4
0
        protected override bool Process(IInteraction parameters)
        {
            bool success = true;
            IOutgoingBodiedInteraction upstreamTarget;

            upstreamTarget = (IOutgoingBodiedInteraction)parameters.GetClosest(
                typeof(IOutgoingBodiedInteraction));

            if (timeUntilCacheDrop != TimeSpan.MaxValue)
            {
                if (DateTime.Now - lastUpdate > timeUntilCacheDrop)
                {
                    Data = null;
                }
            }

            if (Data == null)
            {
                MemoryStream targetStream = new MemoryStream();
                SimpleOutgoingInteraction downstreamTarget = new SimpleOutgoingInteraction(
                    targetStream, upstreamTarget.Encoding, parameters);

                success = WithBranch.TryProcess(downstreamTarget);
                downstreamTarget.Done();

                targetStream.Position = 0;

                if (downstreamTarget.HasWriter())
                {
                    using (StreamReader reader = new StreamReader(targetStream))
                        Data = downstreamTarget.Encoding.GetBytes(reader.ReadToEnd());
                }
                else
                {
                    Data = new byte[targetStream.Length];
                    targetStream.Read(Data, 0, Data.Length);
                    targetStream.Dispose();
                }

                lastUpdate = DateTime.Now;
            }

            upstreamTarget.OutgoingBody.Write(Data, 0, Data.Length);

            return(success);
        }
示例#5
0
        protected override bool Process(IInteraction parameters)
        {
            if (parameters is INosyInteraction)
            {
                return(WithBranch.TryProcess(parameters));
            }
            else
            {
                IOutgoingBodiedInteraction upstreamTarget;
                SimpleOutgoingInteraction  downstreamTarget;
                MemoryStream formattables;
                bool         success;
                string       text;

                upstreamTarget   = (IOutgoingBodiedInteraction)parameters.GetClosest(typeof(IOutgoingBodiedInteraction));
                downstreamTarget = new SimpleOutgoingInteraction(
                    formattables = new MemoryStream(), upstreamTarget.Encoding, parameters);

                success = WithBranch.TryProcess(downstreamTarget);
                downstreamTarget.Done();

                formattables.Position = 0;

                using (StreamReader reader = new StreamReader(formattables))
                    text = reader.ReadToEnd();

                foreach (Format format in formats)
                {
                    text = format.Apply(text);
                }


                byte[] data = Encoding.Unicode.GetBytes(text);

                upstreamTarget.OutgoingBody.Write(data, 0, data.Length);

                return(success);
            }
        }