private T DeserializePayload <T>(BasicDeliverEventArgs message) where T : new()
        {
            Stream stream = new MemoryStream(message.Body, writable: false);

            var encoding = message.BasicProperties.ContentEncoding;

            if (!string.IsNullOrEmpty(encoding))
            {
                if ("gzip".Equals(encoding, StringComparison.OrdinalIgnoreCase))
                {
                    stream = new GZipStream(stream, CompressionMode.Decompress, leaveOpen: false);
                }
                else if ("deflate".Equals(encoding, StringComparison.OrdinalIgnoreCase))
                {
                    stream = new DeflateStream(stream, CompressionMode.Decompress, leaveOpen: false);
                }
                else
                {
                    throw new InvalidOperationException($"Unknown Content-Encoding '{encoding}'.");
                }
            }

            var serializer = _serializerProvider.GetSerializer(message.BasicProperties.ContentType);

            using (stream)
            {
                return(serializer.Deserialize <T>(stream));
            }
        }
        private EventingHttpClient CreateEventingClient(ServiceId serviceId)
        {
            var serviceRef = _serviceResolver.Resolve(serviceId);

            var configuration = _communicationModelConfiguration.GetCommandsConfiguration(serviceRef.Definition, "communication");
            var settings      = new HttpCommunicatorSettings();

            configuration.Bind(settings);

            var serializer = string.IsNullOrEmpty(settings.Serializer)
                ? _defaultSerializerProvider.DefaultSerializer
                : _serializerProvider.GetSerializer(settings.Serializer);
            var compressPayload = settings.Compress ?? false;
            var urlTemplate     = HttpCommunicationMethod.GetUrlTemplate(settings);

            var schemeDelimiterIndex = urlTemplate.IndexOf("://");
            var firstSegmentIndex    = urlTemplate.IndexOf('/', schemeDelimiterIndex > 0 ? schemeDelimiterIndex + 3 : 0);
            var address = firstSegmentIndex > 0 ? urlTemplate.Substring(0, firstSegmentIndex) : urlTemplate;

            address = address.Replace("{serviceName}", serviceRef.Definition.Name);

            var urlBase = address + "/dev/events";

            return(new EventingHttpClient(serializer, urlBase));
        }
 public void CopyValues(IValueContainer source, IValueContainer destination)
 {
     if (source is ISerializedValueContainer serializedValueContainer)
     {
         var format         = serializedValueContainer.GetFormat();
         var serializer     = _serializerProvider.GetSerializer(format);
         var serializedForm = serializedValueContainer.GetSerializedForm();
         if (serializedForm is string stringContent)
         {
             serializer.Populate(stringContent, destination);
         }
         else if (serializedForm is byte[] byteContent)
         {
             serializer.Populate(byteContent, destination);
         }
         else
         {
             throw new InvalidOperationException($"Unsupported runtime type '{serializedForm?.GetType()}' for a serialized form of '{format}'.");
         }
     }
     else
     {
         // TODO: type conversion
         source.CopyTo(destination);
     }
 }
        public IEventPublisher CreateEventPublisher(IConfiguration configuration)
        {
            var serializationFormat = configuration.GetSection("serializer").Value;
            var serializer          = string.IsNullOrWhiteSpace(serializationFormat)
                ? _defaultSerializer
                : _serializerProvider.GetSerializer(serializationFormat);

            return(new InMemoryEventPublisher(serializer, _messageHub));
        }
        public ICommunicator CreateCommunicator(IConfiguration configuration)
        {
            var serializationFormat = configuration.GetSection("serializer").Value;
            var serializer          = string.IsNullOrWhiteSpace(serializationFormat)
                ? _defaultSerializer
                : _serializerProvider.GetSerializer(serializationFormat);

            return(new InMemoryCommunicator(serializer, _messageHub, _methodStateStorageProvider));
        }
        public EventingMiddleware(
            ISerializerProvider serializerProvider,
            IEventSubscriber eventSubscriber)
        {
            _serializerProvider = serializerProvider;
            _jsonSerializer     = _serializerProvider.GetSerializer("json");
            _eventSubscriber    = eventSubscriber;

            _eventingPath = "/dev/events";
        }
Exemple #7
0
        public async Task <MethodExecutionState> ReadStateAsync(ServiceId serviceId, PersistedMethodId methodId, CancellationToken ct)
        {
            var tableName = GetTableQualifiedName(serviceId, methodId);

            var key = new StorageRecord
            {
                service   = serviceId.Name,
                method    = methodId.Name,
                intent_id = methodId.IntentId
            };

            var query = new StringBuilder("SELECT * FROM ")
                        .Append(tableName).Append(" WHERE ");

            WriteValues(query, key, delimiter: " AND ");

            var result = await ExecuteQueryAsync(serviceId, methodId, query.ToString());

            var row = result.FirstOrDefault();

            if (row == null)
            {
                throw new StateNotFoundException(serviceId, methodId);
            }

            var record = ReadValues(row);

            if (record.status.HasValue && record.status.Value != (int)Statuses.Paused)
            {
                throw new InvalidOperationException("Method is not paused");
            }

            if (!(record.execution_state?.Length > 0))
            {
                throw new InvalidOperationException("Empty state data");
            }

            var serializer = !string.IsNullOrEmpty(record.format)
                ? _serializerProvider.GetSerializer(record.format)
                : _serializer;

            return(serializer.Deserialize <MethodExecutionState>(record.execution_state));
        }
Exemple #8
0
 /// <summary>
 /// Initializes a new <see cref="V1ArchiveWorkflowInstanceCommandHandler"/>
 /// </summary>
 /// <param name="loggerFactory">The service used to create <see cref="ILogger"/>s</param>
 /// <param name="mediator">The service used to mediate calls</param>
 /// <param name="mapper">The service used to map objects</param>
 /// <param name="options">The service used to access the current <see cref="SynapseApplicationOptions"/></param>
 /// <param name="serializerProvider">The service used to provide <see cref="ISerializer"/>s</param>
 /// <param name="workflows">The <see cref="IRepository"/> used to manage <see cref="V1Workflow"/>s</param>
 /// <param name="workflowInstances">The <see cref="IRepository"/> used to manage <see cref="V1WorkflowInstance"/>s</param>
 /// <param name="workflowProcesses">The <see cref="IRepository"/> used to manage <see cref="V1WorkflowProcess"/>es</param>
 public V1ArchiveWorkflowInstanceCommandHandler(ILoggerFactory loggerFactory, IMediator mediator, IMapper mapper, IOptions <SynapseApplicationOptions> options,
                                                ISerializerProvider serializerProvider, IRepository <V1Workflow> workflows, IRepository <V1WorkflowInstance> workflowInstances, IRepository <V1WorkflowProcess> workflowProcesses)
     : base(loggerFactory, mediator, mapper)
 {
     this.Options           = options.Value;
     this.Serializer        = serializerProvider.GetSerializer(this.Options.Archiving.SerializerType);
     this.Workflows         = workflows;
     this.WorkflowInstances = workflowInstances;
     this.WorkflowProcesses = workflowProcesses;
 }
Exemple #9
0
        public async Task <object> GetAsync(string name, Type valueType)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (valueType == null)
            {
                throw new ArgumentNullException(nameof(valueType));
            }
            byte[] data = await _Database.StringGetAsync(name);

            if (data == null)
            {
                return(null);
            }
            var seralizer = _SerializerProvider.GetSerializer(valueType);
            var stream    = new MemoryStream(data);

            return(seralizer.Deserialize(stream));
        }
        public ICommunicator CreateCommunicator(IConfiguration configuration)
        {
            var settings = new HttpCommunicatorSettings();

            configuration.Bind(settings);

            var serializer = string.IsNullOrEmpty(settings.Serializer)
                ? _defaultSerializer
                : _serializerProvider.GetSerializer(settings.Serializer);
            var compressPayload = settings.Compress ?? false;
            var urlTemplate     = GetUrlTemplate(settings);

            return(new HttpCommunicator(serializer, urlTemplate, compressPayload));
        }
Exemple #11
0
        public CassandraStateStorage(
            StateStorageSettings settings,
            ICluster cluster,
            ISerializer defaultSerializer,
            ISerializerProvider serializerProvider)
        {
            _settings           = settings;
            _cluster            = cluster;
            _serializerProvider = serializerProvider;

            _serializer =
                !string.IsNullOrEmpty(settings.Serializer)
                ? serializerProvider.GetSerializer(settings.Serializer)
                : defaultSerializer;
        }
        public HttpRequestHandler(
            ISerializerProvider serializerProvider,
            IUniqueIdGenerator idGenerator,
            IRoutineCompletionNotifier routineCompletionNotifier,
            IServiceResolver serviceResolver,
            IMethodResolver methodResolver,
            ILocalMethodRunner localTransitionRunner)
        {
            _idGenerator = idGenerator;
            _routineCompletionNotifier = routineCompletionNotifier;
            _serviceResolver           = serviceResolver;
            _methodResolver            = methodResolver;
            _localTransitionRunner     = localTransitionRunner;

            _serializerProvider = serializerProvider;
            _jsonSerializer     = _serializerProvider.GetSerializer("json");
        }
        private ISerializer GetSerializer(ContentType contentType, bool isQueryRequest)
        {
            if (contentType == null ||
                string.IsNullOrEmpty(contentType.MediaType) ||
                string.Equals(contentType.MediaType, "application/json", StringComparison.OrdinalIgnoreCase) ||
                (isQueryRequest && string.Equals(contentType.MediaType, "application/octet-stream", StringComparison.OrdinalIgnoreCase)))
            {
                return(_jsonSerializer); // default serializer
            }
            else
            {
                var format =
                    contentType.MediaType.StartsWith("application/", StringComparison.OrdinalIgnoreCase)
                    ? contentType.MediaType.Substring(12)
                    : contentType.MediaType;

                return(_serializerProvider.GetSerializer(format));
            }
        }
 public SerializedValueContainer(
     string format,
     object serializedForm,
     ISerializerProvider serializerProvider)
 {
     _format             = format;
     _serializedForm     = serializedForm;
     _lazyValueContainer = new Lazy <IValueContainer>(() =>
     {
         var serializer = serializerProvider.GetSerializer(_format);
         if (_serializedForm is string text)
         {
             return(serializer.Deserialize <IValueContainer>(text));
         }
         else
         {
             return(serializer.Deserialize <IValueContainer>((byte[])_serializedForm));
         }
     });
 }
 private ISerializer SelectSerializer(string settingValue)
 {
     return(string.IsNullOrWhiteSpace(settingValue)
         ? _defaultSerializer
         : _serializerProvider.GetSerializer(settingValue));
 }
Exemple #16
0
 /// <summary>Gets serializer mapped to the key.</summary>
 /// <typeparam name="TKey">Type of the serializer key.</typeparam>
 /// <typeparam name="TSerializer">Type of the serializer.</typeparam>
 /// <param name="provider">Provider to get serializer from.</param>
 /// <param name="key">Key to get the serializer for.</param>
 /// <param name="serializer">Found serializer.</param>
 /// <returns>True if non-fallback serializer was found; otherwise false.</returns>
 public static bool TryFindSerializer <TKey, TSerializer>(this ISerializerProvider <TKey, TSerializer> provider, TKey key, out TSerializer serializer)
 {
     serializer = provider.GetSerializer(key);
     return(serializer != null);
 }