コード例 #1
0
        private static IList <ArraySegment <byte> > SerializeResponse <TResponse>(TResponse protocolResponse)
            where TResponse : IProtocolResponse, new()
        {
            ProtocolEncoder encoder = new ProtocolEncoder();

            MessageHeadersDictionary responseHeaders = new MessageHeadersDictionary();

            byte[] identifier     = encoder.Encode(protocolResponse.GetIdentifier());
            byte[] headers        = ProtocolMessageHeaderSerializer.Serialize(responseHeaders);
            byte[] serializedBody = ProtocolBodySerializer.Serialize(protocolResponse);

            return(ProtocolSerializer.Serialize(identifier, headers, serializedBody));
        }
コード例 #2
0
        private static IList <ArraySegment <byte> > Execute <TRequest, TResponse>(ArraySegment <byte> body)
            where TRequest : IProtocolRequest <TResponse>
            where TResponse : class, IProtocolResponse, new()
        {
            IList <ArraySegment <byte> > serializedResponse = null;

            try
            {
                TRequest request = ProtocolBodySerializer.Deserialize <TRequest>(body);
                serializedResponse = SerializeResponse(executor.Execute(request));
            }
            catch (AuthorizationException e)
            {
                serializedResponse = SerializeResponse(new ErrorResponse
                {
                    Code    = 403,
                    Message = "Unauthorized."
                });

                Console.WriteLine("AuthorizationException: " + e.Message + e.StackTrace);
            }
            catch (CustomException e)
            {
                serializedResponse = SerializeResponse(new ErrorResponse
                {
                    Code    = 400,
                    Message = e.Message
                });

                Console.WriteLine("CustomException: " + e.Message + e.StackTrace);
            }
            catch (Exception e)
            {
                serializedResponse = SerializeResponse(new ErrorResponse
                {
                    Code    = 500,
                    Message = "Internal server error."
                });

                Console.WriteLine("UnhandledException: " + e.Message + e.StackTrace);
            }

            return(serializedResponse);
        }
        public TResponse Execute <TResponse>(IProtocolRequest <TResponse> request)
            where TResponse : class, IProtocolResponse, new()
        {
            if (_connection == null)
            {
                throw new ConnectionRequiredException();
            }

            MessageHeadersDictionary headers = new MessageHeadersDictionary();

            byte[] requestHeaders    = ProtocolMessageHeaderSerializer.Serialize(headers);
            byte[] requestBody       = ProtocolBodySerializer.Serialize(request);
            byte[] requestIdentifier = _encoder.Encode(request.GetIdentifier());
            IList <ArraySegment <byte> > serializedRequest = ProtocolSerializer.Serialize(requestIdentifier, requestHeaders, requestBody);

            byte[] responseEncoded = _connection.Send(serializedRequest);

            var    deserializedObject = ProtocolSerializer.Deserialize(responseEncoded);
            string expectedIdentifier = new TResponse().GetIdentifier();
            string identifier         = _encoder.Decode(deserializedObject.ControlCommand);

            if (identifier != expectedIdentifier)
            {
                if (identifier == ErrorResponse.Identifier)
                {
                    ErrorResponse errorResponse = ProtocolBodySerializer.Deserialize <ErrorResponse>(deserializedObject.Body);
                    throw new CustomException(errorResponse.Message);
                }

                throw new InvalidResponseException();
            }

            TResponse response = ProtocolBodySerializer.Deserialize <TResponse>(deserializedObject.Body);

            return(response);
        }