コード例 #1
0
ファイル: AzureQueueService.cs プロジェクト: DavidSSL/server
        protected IEnumerable <string> SerializeMany(IEnumerable <T> messages, JsonSerializerOptions jsonOptions)
        {
            // Calculate Base-64 encoded text with padding
            int getBase64Size(int byteCount) => ((4 * byteCount / 3) + 3) & ~3;

            var messagesList     = new List <string>();
            var messagesListSize = 0;

            int calculateByteSize(int totalSize, int toAdd) =>
            // Calculate the total length this would be w/ "[]" and commas
            getBase64Size(totalSize + toAdd + messagesList.Count + 2);

            // Format the final array string, i.e. [{...},{...}]
            string getArrayString()
            {
                if (messagesList.Count == 1)
                {
                    return(CoreHelpers.Base64EncodeString(messagesList[0]));
                }
                return(CoreHelpers.Base64EncodeString(
                           string.Concat("[", string.Join(',', messagesList), "]")));
            }

            var serializedMessages = messages.Select(message =>
                                                     JsonSerializer.Serialize(message, jsonOptions));

            foreach (var message in serializedMessages)
            {
                var messageSize = Encoding.UTF8.GetByteCount(message);
                if (calculateByteSize(messagesListSize, messageSize) > _queueClient.MessageMaxBytes)
                {
                    yield return(getArrayString());

                    messagesListSize = 0;
                    messagesList.Clear();
                }

                messagesList.Add(message);
                messagesListSize += messageSize;
            }

            if (messagesList.Any())
            {
                yield return(getArrayString());
            }
        }
コード例 #2
0
 public async Task CreateAsync(T message)
 {
     var json   = JsonConvert.SerializeObject(message, _jsonSettings);
     var base64 = CoreHelpers.Base64EncodeString(json);
     await _queueClient.SendMessageAsync(base64);
 }