Exemple #1
0
        /// <summary>
        /// Extracts an <see cref="ModelResponse"/> from the given <see cref="IOResponse"/> content.
        /// </summary>
        /// <param name="ioResponse"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        ModelResponse ReadIOResponseFromContent(IOResponse ioResponse, ModelRequest request)
        {
            Contract.Requires <ArgumentNullException>(ioResponse != null);
            Contract.Requires <ArgumentNullException>(request != null);

            // deserialize if possible
            if (ioResponse.Content != null &&
                ioResponse.ContentType != null)
            {
                // obtain serializer
                var deserializer = GetDeserializer(ioResponse.ContentType);
                if (deserializer == null)
                {
                    throw new UnsupportedMediaTypeException();
                }

                // generate new response
                return(new ModelResponse(
                           request,
                           ReadRequestStatus(ioResponse),
                           deserializer.Deserialize(
                               new StreamReader(ioResponse.Content),
                               ioResponse.ContentType)));
            }
            else
            {
                return(new ModelResponse(
                           request,
                           ReadRequestStatus(ioResponse),
                           null));
            }
        }
Exemple #2
0
        /// <summary>
        /// Deserializes the <see cref="WebResponse"/> into a <see cref="ModelResponse"/>.
        /// </summary>
        /// <param name="ioResponse"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        protected virtual ModelResponse ReadIOResponse(IOResponse ioResponse, ModelRequest request)
        {
            Contract.Requires <ArgumentNullException>(ioResponse != null);
            Contract.Requires <ArgumentNullException>(request != null);

            var response = ReadIOResponseFromContent(ioResponse, request);

            response.Headers.Add(ioResponse.Headers);
            return(response);
        }
Exemple #3
0
        public bool Process(HttpServer server, HttpRequest request, HttpResponse response)
        {
            SystemLogger.Log(SystemLogger.Module.CORE, " ############## " + this.GetType() + " -> " + request.Url);
            if (request.Url.StartsWith(REMOTE_RESOURCE_URI))
            {
                SystemLogger.Log(SystemLogger.Module.CORE, "Remote resource protocol.");
                try {
                    string   commandParams      = request.Url.Substring(REMOTE_RESOURCE_URI.Length);
                    string[] commandParamsArray = commandParams.Split(new char[] { '/' });
                    if (commandParamsArray.Length > 0)
                    {
                        string ioServiceName = commandParamsArray [0];

                        Object unityIOService = serviceLocator.GetService(UNITY_IO_SERVICE_NAME);
                        if (unityIOService != null && ioServiceName != null)
                        {
                            IIo    io         = (IIo)unityIOService;
                            string parameters = commandParams.Substring(ioServiceName.Length + 1);

                            IORequest ioRequest = new IORequest();
                            ioRequest.Content = parameters;
                            IOResponse ioResponse = io.InvokeService(ioRequest, ioServiceName);
                            if (ioResponse != null)
                            {
                                response.ContentType = ioResponse.ContentType;
                                response.RawContent  = ioResponse.ContentBinary;
                            }
                        }
                    }

                    if (response.RawContent == null)
                    {
                        response.Content = "No content available.";
                        SystemLogger.Log(SystemLogger.Module.CORE, "No content available for request [" + request.Url + "," + request.Method + "]. Continue to next handler...");
                        return(false);
                    }

                    return(true);
                } catch (Exception e) {
                    SystemLogger.Log(SystemLogger.Module.CORE, "Exception when parsing request [" + request.Url + "]", e);
                    response.Content = "Malformed request.";
                    return(false);
                }
            }
            else
            {
                SystemLogger.Log(SystemLogger.Module.CORE, "Non remote resource protocol. Continue to next handler...");
                return(false);
            }
        }
Exemple #4
0
        private string GetCacheControlHeaderFromObject(object retObj)
        {
            if (retObj != null && typeof(IOResponse).IsAssignableFrom(retObj.GetType()))
            {
                IOResponse ioResponse = (IOResponse)retObj;
                if (ioResponse.Headers != null && ioResponse.Headers.Length > 0)
                {
                    foreach (IOHeader header in ioResponse.Headers)
                    {
                        if (header.Name.Equals("Cache-Control"))
                        {
                            SystemLogger.Log(SystemLogger.Module.CORE, "Found cache control header on IOResponse object: " + header.Value);
                            return(header.Value);
                        }
                    }
                }
            }

            return(null);
        }
Exemple #5
0
        /// <summary>
        /// Method overrided, to start activity notification while invoking external service.
        /// </summary>
        /// <param name="request">
        /// A <see cref="IORequest"/>
        /// </param>
        /// <param name="service">
        /// A <see cref="IOService"/>
        /// </param>
        /// <returns>
        /// A <see cref="IOResponse"/>
        /// </returns>
        public override IOResponse InvokeService(IORequest request, IOService service)
        {
            this.IOUserAgent = IPhoneUtils.GetInstance().GetUserAgent();
            INotification notificationService = (INotification)IPhoneServiceLocator.GetInstance().GetService("notify");

            try {
                notificationService.StartNotifyActivity();
            } catch (Exception e) {
                SystemLogger.Log(SystemLogger.Module.PLATFORM, "Cannot StartNotifyActivity. Message: " + e.Message);
            }
            IOResponse response = base.InvokeService(request, service);

            try {
                notificationService.StopNotifyActivity();
            } catch (Exception e) {
                SystemLogger.Log(SystemLogger.Module.PLATFORM, "Cannot StopNotifyActivity. Message: " + e.Message);
            }

            return(response);
        }
        private async void Reader()
        {
            var reader = _responseChannel.Reader;

            while (await reader.WaitToReadAsync())
            {
                while (reader.TryRead(out ValueTuple <IORequest, TaskCompletionSource <IOResponse> > tuple))
                {
                    var        item = tuple.Item1;
                    IOResponse ioResponse;
                    if (item.RequestDirection == IORequestDirection.Read)
                    {
                        ioResponse = await _fileSystemService.Read(item).ConfigureAwait(false);
                    }
                    else
                    {
                        await _fileSystemService.Write(item).ConfigureAwait(false);

                        ioResponse = new IOResponse(item.Id, item.Address, Array.Empty <byte>());
                    }
                    tuple.Item2.SetResult(ioResponse);
                }
            }
        }
Exemple #7
0
 protected BaseBlock(IOResponse ioResponse)
 {
     _ioResponse = ioResponse;
     _memory     = ioResponse.Payload;
 }
Exemple #8
0
 public DataBlock(IOResponse response) : base(response)
 {
     _pageManager = new DataPageManager(_memory);
 }
Exemple #9
0
        /// <summary>
        /// Gets the <see cref="ModelResponseStatus"/> for the response.
        /// </summary>
        /// <param name="response"></param>
        /// <returns></returns>
        protected virtual ModelResponseStatus ReadRequestStatus(IOResponse response)
        {
            Contract.Requires <ArgumentNullException>(response != null);

            return(response.Status == IOStatus.Success ? ModelResponseStatus.Success : ModelResponseStatus.Error);
        }