Exemple #1
0
 /// <summary>
 /// Converts provided procedure call arguments into destinated types.
 /// </summary>
 /// <param name="context"></param>
 protected virtual void ResolveProcedureArgumentsTypes(ProcedureContext context)
 {
     for (int i = 0; i < context.Arguments.Length; i++)
     {
         var argType           = context.ProcedureDefinition.ArgumentTypes[i];
         var destinationObject = TypeResolver.Resolve(context.Arguments[i], argType);
         context.Arguments[i] = destinationObject;
     }
 }
 /// <summary>
 /// Creates na new <see cref="ProcedureContext"/> object used to schedule remote procedure call.
 /// </summary>
 /// <param name="message">Call message used for RPC request</param>
 /// <param name="definition">Definition of procedure to be called</param>
 /// <param name="session">WAMP message sender session object</param>
 /// <returns></returns>
 public virtual ProcedureContext CreateProcedureContext(CallMessage message, ProcedureDefinition definition, IWampSession session)
 {
     var procedureContext = new ProcedureContext
                                {
                                    Arguments = message.Arguments,
                                    CallId = message.CallId,
                                    ProcedureDefinition =  definition,
                                    RequesterSession = session
                                };
     return procedureContext;
 }
        /// <summary>
        /// Schedules new RPC request.
        /// </summary>
        /// <param name="context"></param>
        public void Schedule(ProcedureContext context)
        {
            ResolveProcedureArgumentsTypes(context);

            var callId = context.CallId;
            var handler = CreateProcedureHandler(context);
            var task = new Task(handler);

            if (Tasks.TryAdd(callId, task))
            {
                task.Start();
                task.ContinueWith(t =>
                {
                    Task outTask;
                    Tasks.TryRemove(callId, out outTask);
                });
            }
        }
Exemple #4
0
        /// <summary>
        /// Schedules new RPC request.
        /// </summary>
        /// <param name="context"></param>
        public void Schedule(ProcedureContext context)
        {
            ResolveProcedureArgumentsTypes(context);

            var callId  = context.CallId;
            var handler = CreateProcedureHandler(context);
            var task    = new Task(handler);

            if (Tasks.TryAdd(callId, task))
            {
                task.Start();
                task.ContinueWith(t =>
                {
                    Task outTask;
                    Tasks.TryRemove(callId, out outTask);
                });
            }
        }
Exemple #5
0
        /// <summary>
        /// Returns a delegate used for handling RPC invoke flow,
        /// including handling exception and returning WAMP result messages.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual Action CreateProcedureHandler(ProcedureContext context)
        {
            Action action = () =>
            {
                IMessage message;
                try
                {
                    var func   = context.ProcedureDefinition.ProcedureCall;
                    var args   = context.Arguments;
                    var result = func(args);

                    message = CreateResultMessage(context, result);
                }
                catch (Exception e)
                {
                    message = CreateErrorMessage(context, e);
                }
                Response.Send(context.RequesterSession.SessionId, message);
            };

            return(action);
        }
        /// <summary>
        /// Returns a delegate used for handling RPC invoke flow, 
        /// including handling exception and returning WAMP result messages.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected virtual Action CreateProcedureHandler(ProcedureContext context)
        {
            Action action = () =>
                {
                    IMessage message;
                    try
                    {
                        var func = context.ProcedureDefinition.ProcedureCall;
                        var args = context.Arguments;
                        var result = func(args);

                        message = CreateResultMessage(context, result);
                    }
                    catch (Exception e)
                    {
                        message = CreateErrorMessage(context, e);
                    }
                    Response.Send(context.RequesterSession.SessionId, message);
                };

            return action;
        }
 /// <summary>
 /// Creates a new instance of <see cref="CallErrorMessage"/> class.
 /// </summary>
 /// <param name="context">Context of RPC request</param>
 /// <param name="exception">Exception, which ocurred during RPC exection</param>
 /// <returns></returns>
 protected virtual CallErrorMessage CreateErrorMessage(ProcedureContext context, Exception exception)
 {
     return new CallErrorMessage(context.CallId, string.Empty, exception.Message);
 }
 /// <summary>
 /// Converts provided procedure call arguments into destinated types.
 /// </summary>
 /// <param name="context"></param>
 protected virtual void ResolveProcedureArgumentsTypes(ProcedureContext context)
 {
     for (int i = 0; i < context.Arguments.Length; i++)
     {
         var argType = context.ProcedureDefinition.ArgumentTypes[i];
         var destinationObject = TypeResolver.Resolve(context.Arguments[i], argType);
         context.Arguments[i] = destinationObject;
     }
 }
 /// <summary>
 /// Creates a new instance of <see cref="CallResultMessage"/> class.
 /// </summary>
 /// <param name="context">Context of RPC request</param>
 /// <param name="result">Result of successfull RPC exection</param>
 /// <returns></returns>
 protected virtual CallResultMessage CreateResultMessage(ProcedureContext context, object result)
 {
     return new CallResultMessage(context.CallId, result);
 }
Exemple #10
0
 /// <summary>
 /// Creates a new instance of <see cref="CallResultMessage"/> class.
 /// </summary>
 /// <param name="context">Context of RPC request</param>
 /// <param name="result">Result of successfull RPC exection</param>
 /// <returns></returns>
 protected virtual CallResultMessage CreateResultMessage(ProcedureContext context, object result)
 {
     return(new CallResultMessage(context.CallId, result));
 }
Exemple #11
0
 /// <summary>
 /// Creates a new instance of <see cref="CallErrorMessage"/> class.
 /// </summary>
 /// <param name="context">Context of RPC request</param>
 /// <param name="exception">Exception, which ocurred during RPC exection</param>
 /// <returns></returns>
 protected virtual CallErrorMessage CreateErrorMessage(ProcedureContext context, Exception exception)
 {
     return(new CallErrorMessage(context.CallId, string.Empty, exception.Message));
 }