Ejemplo n.º 1
0
        /// <summary>
        ///     Try receiving a message (Async)
        /// </summary>
        /// <param name="topic">The topic name</param>
        /// <param name="cancellationToken"></param>
        /// <returns>The message received -or- ReceivedResult&lt;T&gt;.Empty when no message is waiting</returns>
        public async Task <ReceivedResult <T> > TryReceiveAsync(string topic,
                                                                CancellationToken cancellationToken = default(CancellationToken))
        {
            if (Logger.Value.IsDebugEnabled())
            {
                Logger.Value.Debug($"TryReceiveAsync<{typeof(T).FullName}>(...)");
            }

            var parameters = InitRemoveDbParameters(topic);

            using (var connection = GetConnection())
            {
                await connection.OpenAsync(cancellationToken).ConfigureAwait(ContinueOnCapturedContext);

                var sqlCmd = InitRemoveDbCommand(connection, parameters);
                var reader = await sqlCmd.ExecuteReaderAsync(cancellationToken)
                             .ConfigureAwait(ContinueOnCapturedContext);

                if (!reader.Read())
                {
                    return(ReceivedResult <T> .Empty);
                }
                var json             = (string)reader[0];
                var messageType      = (string)reader[1];
                var id               = (int)reader[3];
                var contractResolver = new MessageDefaultContractResolver();
                var settings         = new JsonSerializerSettings {
                    ContractResolver = contractResolver
                };
                var message = JsonConvert.DeserializeObject <T>(json, settings);
                return(new ReceivedResult <T>(true, json, topic, messageType, id, message));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Try receiving a message
        /// </summary>
        /// <param name="topic">The topic name</param>
        /// <returns>The message received -or- ReceivedResult&lt;T&gt;.Empty when no message is waiting</returns>
        private ReceivedResult <T> TryReceive(string topic)
        {
            if (Logger.Value.IsDebugEnabled())
            {
                Logger.Value.Debug($"TryReceive<{typeof(T).FullName}>(...)");
            }

            var parameters = InitRemoveDbParameters(topic);

            using (var connection = GetConnection())
            {
                connection.Open();
                var sqlCmd = InitRemoveDbCommand(connection, parameters);
                var reader = sqlCmd.ExecuteReader();
                if (!reader.Read())
                {
                    return(ReceivedResult <T> .Empty);
                }
                var json             = (string)reader[0];
                var messageType      = (string)reader[1];
                var id               = (long)reader[3];
                var contractResolver = new MessageDefaultContractResolver();
                var settings         = new JsonSerializerSettings {
                    ContractResolver = contractResolver
                };
                var message = JsonConvert.DeserializeObject <T>(json, settings);
                return(new ReceivedResult <T>(true, json, topic, messageType, id, message));
            }
        }