public override void SetUp() { base.SetUp(); stream = new MemoryStream(); serializer = Mocks.CreateMock <IActionScriptSerializer>(); output = new AMFDataOutput(stream, serializer); }
private byte[] ToAMF(object nativeValue) { IActionScriptSerializer serializer = serializerFactory.CreateSerializer(); IASValue asValue = serializer.ToASValue(nativeValue); MemoryStream stream = new MemoryStream(); AMFDataOutput dataOutput = new AMFDataOutput(stream, serializer); dataOutput.ObjectEncoding = AMFObjectEncoding.AMF3; dataOutput.BeginObjectStream(); dataOutput.WriteObject(asValue); dataOutput.EndObjectStream(); return(stream.ToArray()); }
protected override IEnumerable <Step> GetSteps() { // Set properties from context. context.Request.IsSecureConnection = context.HttpContext.Request.IsSecureConnection; // Read the AMF message and prepare the response context. AMFDataInput dataInput = new AMFDataInput(context.HttpContext.Request.InputStream, context.Serializer); AMFMessage amfRequestMessage = AMFMessageReader.ReadAMFMessage(dataInput); context.Request.SetMessage(amfRequestMessage); context.Response.PrepareResponseMessage(amfRequestMessage); // Process all message bodies. foreach (AMFBody requestBody in amfRequestMessage.Bodies) { object nativeContent; try { nativeContent = context.Serializer.ToNative(requestBody.Content, null); } catch (Exception ex) { context.Response.AddErrorResponse(requestBody.ResponseTarget, "An error occurred while deserializing the request body.", ex); continue; } if (requestBody.RequestTarget == "null") { IMessage requestMessage = nativeContent as IMessage; if (requestMessage == null) { object[] array = nativeContent as object[]; if (array != null) { requestMessage = array[0] as IMessage; } if (requestMessage != null) { IAsyncResult result; try { result = messageBroker.BeginProcessRequest(context, requestMessage, OnAsyncResultCallbackResume, null); } catch (Exception ex) { ErrorMessage errorMessage = ErrorMessage.CreateErrorResponse(requestMessage, "An error occurred while the message broker was processing the message.", "Gateway.MessageBroker.BeginProcessRequestFailed", ex); context.Response.AddErrorResponse(requestBody.ResponseTarget, errorMessage); continue; } yield return(new Step("Waiting for message broker.")); try { IMessage responseMessage = messageBroker.EndProcessRequest(result); context.Response.AddResultResponse(requestBody.ResponseTarget, responseMessage); } catch (Exception ex) { ErrorMessage errorMessage = ErrorMessage.CreateErrorResponse(requestMessage, "An error occurred while the message broker was processing the message.", "Gateway.MessageBroker.EndProcessRequestFailed", ex); context.Response.AddErrorResponse(requestBody.ResponseTarget, errorMessage); } continue; } } } // Don't know what to do with this message. context.Response.AddErrorResponse(requestBody.ResponseTarget, String.Format(CultureInfo.CurrentCulture, "Received a message for unsupported request target '{0}'.", requestBody.RequestTarget), null); } // Generate the response. AMFDataOutput dataOutput = new AMFDataOutput(context.HttpContext.Response.OutputStream, context.Serializer); AMFMessageWriter.WriteAMFMessage(dataOutput, context.Response.Message); context.HttpContext.Response.ContentType = AMFContentType; context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); yield break; }