// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. namespace HoloToolkit.Sharing.SyncModel { /// <summary> /// This class implements the string primitive for the syncing system. /// It does the heavy lifting to make adding new strings to a class easy. /// </summary> public class SyncString : SyncPrimitive { private StringElement element; private string value = ""; #if UNITY_EDITOR public override object RawValue { get { return value; } } #endif public string Value { get { return value; } set { // Has the value actually changed? if (this.value != value) { // Change the value this.value = value; if (element != null) { // Notify network that the value has changed element.SetValue(new XString(value)); } } } } public SyncString(string field) : base(field) { } public override void InitializeLocal(ObjectElement parentElement) { element = parentElement.CreateStringElement(XStringFieldName, new XString(value)); NetworkElement = element; } public void AddFromLocal(ObjectElement parentElement, string localValue) { InitializeLocal(parentElement); Value = localValue; } public override void AddFromRemote(Element remoteElement) { NetworkElement = remoteElement; element = StringElement.Cast(remoteElement); value = element.GetValue().GetString(); } public override void UpdateFromRemote(XString remoteValue) { value = remoteValue.GetString(); } } }