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); } }
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); } }
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); }
/// <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); }
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); }
/// <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); } }
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]); } }
void IContentEx.Write(IUpdateEncoder encoder, int offset) { encoder.WriteLength(Length - offset); }
void IContentEx.Write(IUpdateEncoder encoder, int offset) { // 32 digits separated by hyphens, no braces. encoder.WriteString(Doc.Guid); Opts.Write(encoder, offset); }
internal override void Write(IUpdateEncoder encoder) { encoder.WriteTypeRef(YMapRefId); }
internal override void Write(IUpdateEncoder encoder, int offset) { encoder.WriteInfo(StructGCRefNumber); encoder.WriteLength(Length - offset); }
internal virtual void Write(IUpdateEncoder encoder) { throw new NotImplementedException(); }
void IContentEx.Write(IUpdateEncoder encoder, int offset) { encoder.WriteJson(Embed); }
void IContentEx.Write(IUpdateEncoder encoder, int offset) { encoder.WriteBuffer(_content); }
void IContentEx.Write(IUpdateEncoder encoder, int offset) { encoder.WriteKey(Key); encoder.WriteJson(Value); }
internal abstract void Write(IUpdateEncoder encoder, int offset);
void IContentEx.Write(IUpdateEncoder encoder, int offset) { Type.Write(encoder); }