/// <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); }
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); }
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); }
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); } }