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); }
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)); } }
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); }
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)); }