protected void Respond(INodeEndpointRequest request, object response) { Stream streamResponse = response as Stream; if (streamResponse != null) { request.Respond(streamResponse); } else { request.Respond(this.Serializer.Serialize(response)); } }
protected override void OnQueueRequest(INodeEndpointRequest request) { try { MethodInfo method = null; if (this.methods.TryGetValue(request.Method, out method)) { ParameterInfo firstParameter = method.GetParameters().FirstOrDefault(); if (firstParameter != null && firstParameter.ParameterType == typeof(INodeEndpointRequest)) { method.Invoke(this, new object[] { request } .Concat(Translate(method.GetParameters().Skip(1), request.Body)) .ToArray() ); } else { object result = method.Invoke(this, Translate(method.GetParameters(), request.Body)); if (method.ReturnType == typeof(void)) { request.Respond(); } else { Respond(request, result); } } } else { request.Respond(new InvalidOperationException("Method \"" + request.Method + "\" not exists.")); } } catch (TargetInvocationException exception) { request.Respond(exception.InnerException); } catch (Exception) { request.Respond(new InvalidOperationException("Cannot parse parameters.")); } }