Exemple #1
0
        void IContentEx.Write(IUpdateEncoder encoder, int offset)
        {
            var len = _content.Count;

            encoder.WriteLength(len);
            for (int i = offset; i < len; i++)
            {
                var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(_content[i]);
                encoder.WriteString(jsonStr);
            }
        }
Exemple #2
0
        void IContentEx.Write(IUpdateEncoder encoder, int offset)
        {
            int length = _content.Count;

            encoder.WriteLength(length - offset);

            for (int i = offset; i < length; i++)
            {
                var c = _content[i];
                encoder.WriteAny(c);
            }
        }
Exemple #3
0
        void IContentEx.Write(IUpdateEncoder encoder, int offset)
        {
            var sb = new StringBuilder(_content.Count - offset);

            for (int i = offset; i < _content.Count; i++)
            {
                sb.Append((char)_content[i]);
            }

            var str = sb.ToString();

            encoder.WriteString(str);
        }
Exemple #4
0
        /// <returns>Whether the data was written.</returns>
        internal bool WriteUpdateMessageFromTransaction(IUpdateEncoder encoder)
        {
            if (DeleteSet.Clients.Count == 0 && !AfterState.Any(kvp => !BeforeState.TryGetValue(kvp.Key, out var clockB) || kvp.Value != clockB))
            {
                return(false);
            }

            DeleteSet.SortAndMergeDeleteSet();
            EncodingUtils.WriteClientsStructs(encoder, Doc.Store, BeforeState);
            DeleteSet.Write(encoder);

            return(true);
        }
Exemple #5
0
        internal void Write(IUpdateEncoder encoder, int offset)
        {
            var dict = new Dictionary <string, object>();

            dict["gc"]       = Gc;
            dict["guid"]     = Guid;
            dict["autoLoad"] = AutoLoad;

            if (Meta != null)
            {
                dict["meta"] = Meta;
            }

            encoder.WriteAny(dict);
        }
Exemple #6
0
        /// <param name="structs">All structs by 'client'.</param>
        /// <param name="clock">Write structs starting with 'ID(client,clock)'.</param>
        public static void WriteStructs(IUpdateEncoder encoder, IList <AbstractStruct> structs, int client, int clock)
        {
            // Write first id.
            int startNewStructs = StructStore.FindIndexSS(structs, clock);

            // Write # encoded structs.
            encoder.RestWriter.WriteVarUint((uint)(structs.Count - startNewStructs));
            encoder.WriteClient(client);
            encoder.RestWriter.WriteVarUint((uint)clock);

            // Write first struct with offset.
            var firstStruct = structs[startNewStructs];

            firstStruct.Write(encoder, clock - firstStruct.Id.Clock);

            for (int i = startNewStructs + 1; i < structs.Count; i++)
            {
                structs[i].Write(encoder, 0);
            }
        }
Exemple #7
0
        public static void WriteClientsStructs(IUpdateEncoder encoder, StructStore store, IDictionary <int, int> _sm)
        {
            // We filter all valid _sm entries into sm.
            var sm = new Dictionary <int, int>();

            foreach (var kvp in _sm)
            {
                var client = kvp.Key;
                var clock  = kvp.Value;

                // Only write if new structs are available.
                if (store.GetState(client) > clock)
                {
                    sm[client] = clock;
                }
            }

            foreach (var kvp in store.GetStateVector())
            {
                var client = kvp.Key;
                if (!sm.ContainsKey(client))
                {
                    sm[client] = 0;
                }
            }

            // Write # states that were updated.
            encoder.RestWriter.WriteVarUint((uint)sm.Count);

            // Write items with higher client ids first.
            // This heavily improves the conflict resolution algorithm.
            var sortedClients = sm.Keys.ToList();

            sortedClients.Sort((a, b) => b - a);

            foreach (var client in sortedClients)
            {
                WriteStructs(encoder, store.Clients[client], client, sm[client]);
            }
        }
Exemple #8
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     encoder.WriteLength(Length - offset);
 }
Exemple #9
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     // 32 digits separated by hyphens, no braces.
     encoder.WriteString(Doc.Guid);
     Opts.Write(encoder, offset);
 }
Exemple #10
0
 internal override void Write(IUpdateEncoder encoder)
 {
     encoder.WriteTypeRef(YMapRefId);
 }
Exemple #11
0
 internal override void Write(IUpdateEncoder encoder, int offset)
 {
     encoder.WriteInfo(StructGCRefNumber);
     encoder.WriteLength(Length - offset);
 }
Exemple #12
0
 internal virtual void Write(IUpdateEncoder encoder)
 {
     throw new NotImplementedException();
 }
Exemple #13
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     encoder.WriteJson(Embed);
 }
Exemple #14
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     encoder.WriteBuffer(_content);
 }
Exemple #15
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     encoder.WriteKey(Key);
     encoder.WriteJson(Value);
 }
Exemple #16
0
 internal abstract void Write(IUpdateEncoder encoder, int offset);
Exemple #17
0
 void IContentEx.Write(IUpdateEncoder encoder, int offset)
 {
     Type.Write(encoder);
 }