Ejemplo n.º 1
0
        protected object[] UnpackParameters <TMessage>(IWampFormatter <TMessage> formatter,
                                                       TMessage[] arguments,
                                                       IDictionary <string, TMessage> argumentsKeywords)
        {
            ArgumentUnpacker unpacker = new ArgumentUnpacker(Parameters);

            object[] result =
                unpacker.UnpackParameters(formatter, arguments, argumentsKeywords);

            return(result);
        }
Ejemplo n.º 2
0
        private void Receive(object sender, EventReceivedArgs args)
        {
            Channel ch = OpenChannel(args.Event);

            bool isFirst = true;

            void Reply(ErrorInformation error, object value, bool more)
            {
                if (error != null)
                {
                    SendError(ch, error);
                }
                else
                {
                    if (isFirst && !more)
                    {
                        ch.Send("OK", new object[] { new[] { value } }); // Wrap into an array for backwards compatibility
                    }
                    else if (value != null)
                    {
                        ch.Send("STREAM", value);
                    }

                    if (!more)
                    {
                        if (!isFirst)
                        {
                            ch.Send("STREAM_DONE");
                        }
                        CloseChannel(ch);
                    }
                }

                isFirst = false;
            }

            ch.Error += (o, errorArgs) => RaiseError(errorArgs.Info);

            try
            {
                if (CoreServices.HasEvent(args.Event.Name))
                {
                    CoreServices.Invoke(this, args.Event.Name, ArgumentUnpacker.Unpack(args.Event.Args), Reply);
                }
                else
                {
                    Service.Invoke(args.Event.Name, ArgumentUnpacker.Unpack(args.Event.Args), Reply);
                }
            }
            catch (Exception e)
            {
                SendError(ch, new ErrorInformation(e.GetType().Name, e.Message, e.StackTrace));
            }
        }
Ejemplo n.º 3
0
        protected WampEventValueTupleConverter()
        {
            Type tupleType = typeof(TTuple);

            if (!tupleType.IsValueTuple())
            {
                throw new ArgumentException("Expected TTuple to be a ValueTuple");
            }

            if (!tupleType.IsValidTupleType())
            {
                throw new ArgumentException("TTuple is an invalid ValueTuple. Expected TRest to be a ValueTuple.");
            }

            mArrayConverter = ValueTupleArrayConverter <TTuple> .Value;

            Type converterType = GetConverterType();

            ValidateConverterType(converterType);

            IList <string> transformNames = GetTransformNames(converterType);

            int tupleLength = tupleType.GetValueTupleLength();

            ValidateTransformNames(transformNames, tupleLength);

            if (transformNames != null)
            {
                if (transformNames.Take(tupleLength).All(x => x != null))
                {
                    mDictionaryConverter =
                        ValueTupleDictionaryConverterBuilder.Build(tupleType, transformNames);
                }
            }

            mArgumentUnpacker =
                ArgumentUnpackerHelper.GetValueTupleArgumentUnpacker
                    (tupleType, transformNames);
        }
Ejemplo n.º 4
0
 public ValueTupleValueExtractor(ArgumentUnpacker unpacker)
 {
     mUnpacker  = unpacker;
     mConverter = ValueTupleArrayConverter <T> .Value;
 }
        private static IOperationResultExtractor <T> GetValueTupleOperationResultExtractor <T>(MethodInfo method)
        {
            ArgumentUnpacker unpacker = GetTupleArgumentUnpacker(method);

            return(new ValueTupleValueExtractor <T>(unpacker));
        }