Ejemplo n.º 1
0
            public void OnReceivedRequest(INodeEndpointRequest request)
            {
                DateTime time = DateTime.Now;

                lock (this.tracers)
                {
                    foreach (var tracer in this.tracers)
                    {
                        tracer.OnReceivedRequest(time, request);
                    }
                }
            }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
 public virtual void QueueRequest(INodeEndpointRequest request)
 {
     if (this.EnableAsynchronization)
     {
         ThreadPool.QueueUserWorkItem(state =>
         {
             OnQueueRequest((INodeEndpointRequest)state);
         }, request);
     }
     else
     {
         OnQueueRequest(request);
     }
 }
Ejemplo n.º 4
0
 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."));
     }
 }
Ejemplo n.º 5
0
 void INodeEndpointProtocolRequestListenerTracer.OnReceivedRequest(DateTime time, INodeEndpointRequest request)
 {
     if (this.isTracing)
     {
         lock (this.tracingResults)
         {
             this.tracingResults.Add(new XElement(
                                         "Request",
                                         new XElement("Date", time.ToLongDateString()),
                                         new XElement("Time", time.ToLongTimeString()),
                                         new XElement("EndpointName", request.EndpointName),
                                         new XElement("Method", request.Method),
                                         new XElement("PeerAddress", request.PeerAddress),
                                         new XElement("Body", request.Body)
                                         ));
         }
     }
 }
Ejemplo n.º 6
0
 public void Div(INodeEndpointRequest request, int a, int b)
 {
     Respond(request, a / b);
 }
Ejemplo n.º 7
0
 public void Mul(INodeEndpointRequest request, int a, int b)
 {
     Respond(request, a * b);
 }
Ejemplo n.º 8
0
 protected abstract void OnQueueRequest(INodeEndpointRequest request);