Esempio n. 1
0
        private async Task <JsonMessageEnvelope> GetMessageEnvelopeJsonAsync(YamsterHttpRequest request)
        {
            JsonMessageEnvelopeUntyped untypedEnvelope = await this.asyncRestCaller
                                                         .ProcessRequestAsync <JsonMessageEnvelopeUntyped>(request);

            return(ConvertArchiveMessageEnvelope(untypedEnvelope));
        }
Esempio n. 2
0
        static JsonMessageEnvelope ConvertArchiveMessageEnvelope(JsonMessageEnvelopeUntyped untypedEnvelope)
        {
            string reserializedString    = SQLiteJsonConverter.SaveToJson(untypedEnvelope);
            JsonMessageEnvelope envelope = SQLiteJsonConverter.LoadFromJson <JsonMessageEnvelope>(reserializedString);

            // Use untypedEnvelope to fill in the RawJson properties
            for (int i = 0; i < untypedEnvelope.Messages.Length; ++i)
            {
                JObject archiveMessage      = untypedEnvelope.Messages[i];
                string  reserializedMessage = SQLiteJsonConverter.SaveToJson(archiveMessage);
                envelope.Messages[i].RawJson = reserializedMessage;
            }

            foreach (var pair in untypedEnvelope.ThreadedExtended)
            {
                long      threadId           = pair.Key;
                JObject[] archiveMessageList = pair.Value;

                var messageList = envelope.ThreadedExtended[threadId];
                for (int i = 0; i < archiveMessageList.Length; ++i)
                {
                    JObject archiveMessage      = archiveMessageList[i];
                    string  reserializedMessage = SQLiteJsonConverter.SaveToJson(archiveMessage);
                    messageList[i].RawJson = reserializedMessage;
                }
            }

            // Two indexes are needed because YamsterReferenceJsonConverter discards unrecognized items
            // from envelope.References; we should probably fix that.
            for (int archiveIndex = 0, index = 0; ;)
            {
                if (archiveIndex >= untypedEnvelope.References.Length)
                {
                    break;
                }
                if (index >= envelope.References.Length)
                {
                    break;
                }

                var reference = envelope.References[index];

                JObject archiveReference   = untypedEnvelope.References[archiveIndex];
                long    archiveReferenceId = Convert.ToInt64(((JValue)archiveReference["id"]).Value);

                if (reference.Id == archiveReferenceId)
                {
                    string reserializedMessage = SQLiteJsonConverter.SaveToJson(archiveReference);
                    envelope.References[index].RawJson = reserializedMessage;
                    ++index;
                }
                ++archiveIndex;
            }
#if DEBUG
            foreach (var reference in envelope.References)
            {
                Debug.Assert(reference.RawJson != null);
            }
#endif
            return(envelope);
        }