diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs index 208221ed855552b2198bee518a89393140d2972b..8378be52304b2c7773574cc36c9037e2946833a9 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using UnityEngine; @@ -232,10 +233,10 @@ namespace ETSI.ARF.WorldStorage.UI WorldAnchor anchor = new WorldAnchor(name) { - UUID = Guid.NewGuid(), - CreatorUUID = Guid.Parse(worldStorageUser.UUID), - LocalCRS = localCRS, - Unit = UnitSystem.CM, + UUID = Guid.NewGuid(), + CreatorUUID = Guid.Parse(worldStorageUser.UUID), + LocalCRS = localCRS, + Unit = UnitSystem.CM, WorldAnchorSize = worldAnchorSize }; @@ -304,41 +305,49 @@ namespace ETSI.ARF.WorldStorage.UI public void PaintWorldStorage() { - List<Trackable> trackables = TrackableRequest.GetAllTrackables(worldStorageServer); - List<WorldAnchor> worldAnchors = WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer); - List<WorldLink> worldLinks = WorldLinkRequest.GetAllWorldLinks(worldStorageServer); - - foreach (WorldAnchor worldAnchor in worldAnchors) + WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) => { - var waNode = new ARFNodeWorldAnchor(worldAnchor); + List<WorldAnchor> worldAnchors = response.result; + foreach (WorldAnchor worldAnchor in worldAnchors) + { + var waNode = new ARFNodeWorldAnchor(worldAnchor); - Rect posTemp = new(26, 93, 160, 77); - SaveInfo.instance.nodePositions.TryGetValue(worldAnchor.UUID.ToString(), out posTemp); - waNode.SetPosition(posTemp); + Rect posTemp = new(26, 93, 160, 77); + SaveInfo.instance.nodePositions.TryGetValue(worldAnchor.UUID.ToString(), out posTemp); + waNode.SetPosition(posTemp); - AddElement(waNode); - } + AddElement(waNode); + } + }); - foreach (Trackable trackable in trackables) + TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) => { - var tracknode = new ARFNodeTrackable(trackable); + List<Trackable> trackables = response.result; + foreach (Trackable trackable in trackables) + { + var tracknode = new ARFNodeTrackable(trackable); - Rect posTemp = new(26, 93, 160, 77); - SaveInfo.instance.nodePositions.TryGetValue(trackable.UUID.ToString(), out posTemp); - tracknode.SetPosition(posTemp); + Rect posTemp = new(26, 93, 160, 77); + SaveInfo.instance.nodePositions.TryGetValue(trackable.UUID.ToString(), out posTemp); + tracknode.SetPosition(posTemp); - AddElement(tracknode); - } - foreach (WorldLink worldLink in worldLinks) - { - var portPair = GetPortsFromWorldLink(worldLink); - ARFEdgeLink edge = portPair.Key.ConnectTo<ARFEdgeLink>(portPair.Value); - edge.worldLink = worldLink; - edge.GUID = worldLink.UUID.ToString(); + AddElement(tracknode); + } + }); - AddElement(edge); - } + WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) => + { + List<WorldLink> worldLinks = response.result; + foreach (WorldLink worldLink in worldLinks) + { + var portPair = GetPortsFromWorldLink(worldLink); + ARFEdgeLink edge = portPair.Key.ConnectTo<ARFEdgeLink>(portPair.Value); + edge.worldLink = worldLink; + edge.GUID = worldLink.UUID.ToString(); + AddElement(edge); + } + }); } internal ARFNodeTrackable CreateTrackableNode(Trackable track, float posX, float posY) @@ -529,14 +538,14 @@ namespace ETSI.ARF.WorldStorage.UI switch (typeName) { case nameof(Trackable): - TrackableRequest.DeleteTrackable(worldStorageServer, elemToRemove.Key); + TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { }); break; case nameof(WorldAnchor): Debug.Log("delete worldanchor"); - WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, elemToRemove.Key); + WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { }); break; case nameof(WorldLink): - WorldLinkRequest.DeleteWorldLink(worldStorageServer, elemToRemove.Key); + WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { }); break; default: Debug.Log("oops"); @@ -544,63 +553,70 @@ namespace ETSI.ARF.WorldStorage.UI } } - //UPDATE AND ADD ELEMENTS + // UPDATE AND ADD ELEMENTS foreach (ARFNode node in nodes) { if (!SaveInfo.instance.nodePositions.ContainsKey(node.GUID)) { - //POST TRACKABLE + // POST TRACKABLE if (node is ARFNodeTrackable aRFNodeTrackable) { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(aRFNodeTrackable.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(aRFNodeTrackable.GetPosition().y.ToString()); Trackable trackable = aRFNodeTrackable.trackable; trackable.KeyvalueTags["unityAuthoringPosX"] = posX; trackable.KeyvalueTags["unityAuthoringPosY"] = posY; - String uuid = TrackableRequest.AddTrackable(worldStorageServer, trackable); - - //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid - uuid = uuid.Replace("\"", ""); - foreach (ARFEdgeLink edge in aRFNodeTrackable.portIn.connections) + TrackableRequest.CreateTrackableAsync(worldStorageServer, trackable, (response) => { - edge.worldLink.UUIDTo = Guid.Parse(uuid); - } - foreach (ARFEdgeLink edge in aRFNodeTrackable.portOut.connections) - { - edge.worldLink.UUIDFrom = Guid.Parse(uuid); - } - aRFNodeTrackable.trackable.UUID = Guid.Parse(uuid); - aRFNodeTrackable.GUID = uuid; - aRFNodeTrackable.title = trackable.Name; + //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid + String uuid = response.result; + + uuid = uuid.Replace("\"", ""); + foreach (ARFEdgeLink edge in aRFNodeTrackable.portIn.connections) + { + edge.worldLink.UUIDTo = Guid.Parse(uuid); + } + foreach (ARFEdgeLink edge in aRFNodeTrackable.portOut.connections) + { + edge.worldLink.UUIDFrom = Guid.Parse(uuid); + } + aRFNodeTrackable.trackable.UUID = Guid.Parse(uuid); + aRFNodeTrackable.GUID = uuid; + aRFNodeTrackable.title = trackable.Name; + }); } - //POST WORLDANCHOR + + // POST WORLDANCHOR if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor) { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString()); WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor; worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX; worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY; - String uuid = WorldAnchorRequest.AddWorldAnchor(worldStorageServer, worldAnchor); - - //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid - uuid = uuid.Replace("\"", ""); - foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portIn.connections) + WorldAnchorRequest.CreateWorldAnchorAsync(worldStorageServer, worldAnchor, (response) => { - edge.worldLink.UUIDTo = Guid.Parse(uuid); - } - foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portOut.connections) - { - edge.worldLink.UUIDFrom = Guid.Parse(uuid); - } - aRFNodeWorldAnchor.worldAnchor.UUID = Guid.Parse(uuid); - aRFNodeWorldAnchor.GUID = uuid; - aRFNodeWorldAnchor.title = worldAnchor.Name; + + String uuid = response.result; + //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid + uuid = uuid.Replace("\"", ""); + foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portIn.connections) + { + edge.worldLink.UUIDTo = Guid.Parse(uuid); + } + foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portOut.connections) + { + edge.worldLink.UUIDFrom = Guid.Parse(uuid); + } + aRFNodeWorldAnchor.worldAnchor.UUID = Guid.Parse(uuid); + aRFNodeWorldAnchor.GUID = uuid; + aRFNodeWorldAnchor.title = worldAnchor.Name; + }); } } else @@ -613,27 +629,31 @@ namespace ETSI.ARF.WorldStorage.UI { if (node is ARFNodeTrackable aRFNodeTrackable) { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(aRFNodeTrackable.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(aRFNodeTrackable.GetPosition().y.ToString()); Trackable trackable = aRFNodeTrackable.trackable; trackable.KeyvalueTags["unityAuthoringPosX"] = posX; trackable.KeyvalueTags["unityAuthoringPosY"] = posY; - TrackableRequest.UpdateTrackable(worldStorageServer, trackable); - aRFNodeTrackable.title = trackable.Name; + TrackableRequest.UpdateTrackableAsync(worldStorageServer, trackable, (response) => + { + aRFNodeTrackable.title = trackable.Name; + }); } if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor) { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString()); WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor; worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX; worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY; - WorldAnchorRequest.UpdateWorldAnchor(worldStorageServer, worldAnchor); - aRFNodeWorldAnchor.title = worldAnchor.Name; + WorldAnchorRequest.UpdateWorldAnchorAsync(worldStorageServer, worldAnchor, (response) => + { + aRFNodeWorldAnchor.title = worldAnchor.Name; + }); } } } @@ -646,16 +666,19 @@ namespace ETSI.ARF.WorldStorage.UI if (!SaveInfo.instance.linkIds.Contains(aRFEdgeLink.GUID)) { WorldLink worldLink = aRFEdgeLink.worldLink; - string uuid = WorldLinkRequest.AddWorldLink(worldStorageServer, worldLink); - uuid = uuid.Replace("\"", ""); + WorldLinkRequest.CreateWorldLinkAsync(worldStorageServer, worldLink, (response) => + { + string uuid = response.result; + uuid = uuid.Replace("\"", ""); - aRFEdgeLink.worldLink.UUID = Guid.Parse(uuid); - aRFEdgeLink.GUID = uuid; + aRFEdgeLink.worldLink.UUID = Guid.Parse(uuid); + aRFEdgeLink.GUID = uuid; + }); } else if (SaveInfo.instance.elemsToUpdate.Contains(aRFEdgeLink.GUID)) { WorldLink worldLink = aRFEdgeLink.worldLink; - WorldLinkRequest.UpdateWorldLink(worldStorageServer, worldLink); + WorldLinkRequest.UpdateWorldLinkAsync(worldStorageServer, worldLink, (response) => { }); } aRFEdgeLink.MarkSaved(); } diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs index df394391975c93d4bf83bcdb7c17d2ce96dbd5ff..947189dc6eede7e84de1f7b2d9bdae424034029e 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs @@ -28,6 +28,7 @@ using ETSI.ARF.WorldStorage.REST; using ETSI.ARF.WorldStorage.UI; using ETSI.ARF.WorldStorage.Editor.Graph; using ETSI.ARF.OpenAPI.WorldStorage; +using System.Collections.ObjectModel; namespace ETSI.ARF.WorldStorage.Editor.Windows { @@ -210,7 +211,8 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows //BUILD UI FOR MODIYING THE WORLDANCHOR private void BuildWorldAnchorUI() { - if(worldAnchor != null) { + if (worldAnchor != null) + { // //HEADER @@ -223,7 +225,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows GUILayout.Box(anchorImage, GUILayout.Width(40), GUILayout.Height(40)); //anchor label - EditorGUILayout.BeginVertical(GUILayout.Height(50)); + EditorGUILayout.BeginVertical(GUILayout.Height(50)); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("WORLD ANCHOR", EditorStyles.boldLabel); GUILayout.FlexibleSpace(); @@ -448,9 +450,12 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (SaveInfo.instance.elemsToUpdate.Contains(worldAnchor.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No")) { - worldAnchor = WorldAnchorRequest.GetWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor.UUID.ToString()); - worldAnchorNode.worldAnchor = worldAnchor; - ShowWindow(worldAnchorNode); + WorldAnchorRequest.GetWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor.UUID, (response) => + { + worldAnchor = + worldAnchorNode.worldAnchor = worldAnchor; + ShowWindow(worldAnchorNode); + }); } } else @@ -470,7 +475,15 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { worldAnchorSize.Add(0); } - worldAnchor = new WorldAnchor(Guid.NewGuid(), "DefaultWorldAnchor", Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), localCRS, UnitSystem.CM, worldAnchorSize, new Dictionary<string, List<string>>()); + worldAnchor = new WorldAnchor("DefaultWorldAnchor") + { + UUID = Guid.NewGuid(), + CreatorUUID = Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), + LocalCRS = localCRS, + Unit = UnitSystem.CM, + WorldAnchorSize = worldAnchorSize, + KeyvalueTags = new KeyvalueTagList() + }; worldAnchorNode.worldAnchor = worldAnchor; ShowWindow(worldAnchorNode); } @@ -485,39 +498,44 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (SaveInfo.instance.elemsToUpdate.Contains(worldAnchor.UUID.ToString())) { - WorldAnchorRequest.UpdateWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor); - SaveInfo.instance.elemsToUpdate.Remove(worldAnchor.UUID.ToString()); + WorldAnchorRequest.UpdateWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor, (response) => + { + SaveInfo.instance.elemsToUpdate.Remove(worldAnchor.UUID.ToString()); + }); } } else { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(worldAnchorNode.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(worldAnchorNode.GetPosition().y.ToString()); WorldAnchor worldAnchor = worldAnchorNode.worldAnchor; worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX; worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY; - String uuid = WorldAnchorRequest.AddWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor); - - //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid - uuid = uuid.Replace("\"", ""); - foreach (ARFEdgeLink edge in worldAnchorNode.portIn.connections) - { - edge.worldLink.UUIDTo = Guid.Parse(uuid); - } - foreach (ARFEdgeLink edge in worldAnchorNode.portOut.connections) + WorldAnchorRequest.CreateWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor, (response) => { - edge.worldLink.UUIDFrom = Guid.Parse(uuid); - } - worldAnchorNode.worldAnchor.UUID = Guid.Parse(uuid); - worldAnchorNode.GUID = uuid; - worldAnchorNode.title = worldAnchor.Name; + String uuid = response.result; - //Add the newly saved World Anchor to the SaveInfo singleton - Rect trackPos = new(worldAnchorNode.GetPosition().x, worldAnchorNode.GetPosition().y, 135, 77); - SaveInfo.instance.nodePositions[uuid] = trackPos; + //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid + uuid = uuid.Replace("\"", ""); + foreach (ARFEdgeLink edge in worldAnchorNode.portIn.connections) + { + edge.worldLink.UUIDTo = Guid.Parse(uuid); + } + foreach (ARFEdgeLink edge in worldAnchorNode.portOut.connections) + { + edge.worldLink.UUIDFrom = Guid.Parse(uuid); + } + worldAnchorNode.worldAnchor.UUID = Guid.Parse(uuid); + worldAnchorNode.GUID = uuid; + worldAnchorNode.title = worldAnchor.Name; + + //Add the newly saved World Anchor to the SaveInfo singleton + Rect trackPos = new(worldAnchorNode.GetPosition().x, worldAnchorNode.GetPosition().y, 135, 77); + SaveInfo.instance.nodePositions[uuid] = trackPos; + }); } worldAnchorNode.MarkSaved(); } @@ -660,18 +678,18 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Format ", GUILayout.Width(50)); - trackable.TrackableEncodingInformation.DataFormat = (EncodingInformationStructure.DataFormatEnum)EditorGUILayout.EnumPopup(trackable.TrackableEncodingInformation.DataFormat); + trackable.TrackableEncodingInformation.DataFormat = (EncodingInformationStructureDataFormat)EditorGUILayout.EnumPopup(trackable.TrackableEncodingInformation.DataFormat); EditorGUILayout.LabelField("Version ", GUILayout.Width(50)); float floatVersion; - if (trackable.TrackableEncodingInformation._Version != null) + if (trackable.TrackableEncodingInformation.Version != null) { - floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation._Version.Replace(".",","))); + floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation.Version.Replace(".", ","))); } else { floatVersion = EditorGUILayout.DelayedFloatField(0); } - trackable.TrackableEncodingInformation._Version = floatVersion.ToString(); + trackable.TrackableEncodingInformation.Version = floatVersion.ToString(); EditorGUILayout.EndHorizontal(); /*//trackable payload @@ -873,9 +891,12 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (SaveInfo.instance.elemsToUpdate.Contains(trackable.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No")) { - trackable = TrackableRequest.GetTrackable(SaveInfo.instance.worldStorageServer, trackable.UUID.ToString()); - trackableNode.trackable = trackable; - ShowWindow(trackableNode); + TrackableRequest.GetTrackableAsync(SaveInfo.instance.worldStorageServer, trackable.UUID, (response) => + { + trackable = response.result; + trackableNode.trackable = trackable; + ShowWindow(trackableNode); + }); } } else @@ -883,22 +904,37 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows if (EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No")) { //generate the Trackables's attributes - EncodingInformationStructure trackableEncodingInformation = new EncodingInformationStructure(EncodingInformationStructure.DataFormatEnum.OTHER, "0"); + EncodingInformationStructure trackableEncodingInformation = new EncodingInformationStructure() + { + DataFormat = EncodingInformationStructureDataFormat.OTHER, + Version = "0" + }; - List<float> localCRS = new(); + Transform3D localCRS = new Transform3D(); for (int i = 0; i < 15; i++) { localCRS.Add(0); } localCRS.Add(1); - List<double> trackableSize = new(); + Size trackableSize = new Size(); for (int i = 0; i < 3; i++) { trackableSize.Add(0); } - Trackable trackable = new Trackable(Guid.NewGuid(), "Defaulttrackable", Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), TrackableType.OTHER, trackableEncodingInformation, new byte[64], localCRS, UnitSystem.CM, trackableSize, new Dictionary<string, List<string>>()); + Trackable trackable = new Trackable("DefaultTrackable") + { + UUID = Guid.NewGuid(), + CreatorUUID = Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), + TrackableType = TrackableType.OTHER, + TrackableEncodingInformation = trackableEncodingInformation, + TrackablePayload = new byte[64], + LocalCRS = localCRS, + Unit = UnitSystem.CM, + TrackableSize = trackableSize, + KeyvalueTags = new KeyvalueTagList() + }; trackableNode.trackable = trackable; ShowWindow(trackableNode); } @@ -913,38 +949,43 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (SaveInfo.instance.elemsToUpdate.Contains(trackable.UUID.ToString())) { - TrackableRequest.UpdateTrackable(SaveInfo.instance.worldStorageServer, trackable); - SaveInfo.instance.elemsToUpdate.Remove(trackable.UUID.ToString()); + TrackableRequest.UpdateTrackableAsync(SaveInfo.instance.worldStorageServer, trackable, (response) => + { + SaveInfo.instance.elemsToUpdate.Remove(trackable.UUID.ToString()); + }); } } else { - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(trackableNode.GetPosition().x.ToString()); - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(trackableNode.GetPosition().y.ToString()); Trackable trackable = trackableNode.trackable; trackable.KeyvalueTags["unityAuthoringPosX"] = posX; trackable.KeyvalueTags["unityAuthoringPosY"] = posY; - String uuid = TrackableRequest.AddTrackable(SaveInfo.instance.worldStorageServer, trackable); - - //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid - uuid = uuid.Replace("\"", ""); - foreach (ARFEdgeLink edge in trackableNode.portIn.connections) + TrackableRequest.CreateTrackableAsync(SaveInfo.instance.worldStorageServer, trackable, (response) => { - edge.worldLink.UUIDTo = Guid.Parse(uuid); - } - foreach (ARFEdgeLink edge in trackableNode.portOut.connections) - { - edge.worldLink.UUIDFrom = Guid.Parse(uuid); - } - trackableNode.trackable.UUID = Guid.Parse(uuid); - trackableNode.GUID = uuid; - trackableNode.title = trackable.Name; + String uuid = response.result; - //Add the newly saved Trackable to the SaveInfo singleton - Rect trackPos = new(trackableNode.GetPosition().x, trackableNode.GetPosition().y, 135, 77); - SaveInfo.instance.nodePositions[uuid] = trackPos; + //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid + uuid = uuid.Replace("\"", ""); + foreach (ARFEdgeLink edge in trackableNode.portIn.connections) + { + edge.worldLink.UUIDTo = Guid.Parse(uuid); + } + foreach (ARFEdgeLink edge in trackableNode.portOut.connections) + { + edge.worldLink.UUIDFrom = Guid.Parse(uuid); + } + trackableNode.trackable.UUID = Guid.Parse(uuid); + trackableNode.GUID = uuid; + trackableNode.title = trackable.Name; + + //Add the newly saved Trackable to the SaveInfo singleton + Rect trackPos = new(trackableNode.GetPosition().x, trackableNode.GetPosition().y, 135, 77); + SaveInfo.instance.nodePositions[uuid] = trackPos; + }); } trackableNode.MarkSaved(); } @@ -1138,17 +1179,19 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (SaveInfo.instance.elemsToUpdate.Contains(worldLink.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No")) { - worldLink = WorldLinkRequest.GetWorldLink(SaveInfo.instance.worldStorageServer, worldLink.UUID.ToString()); + WorldLinkRequest.GetWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink.UUID, (response) => + { + worldLink = response.result; worldLinkEdge.worldLink = worldLink; ShowWindow(worldLinkEdge); + }); } } else { if (EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No")) { - - List<float> transform = new List<float>(); + Transform3D transform = new Transform3D(); for (int i = 0; i < 15; i++) { transform.Add(0); @@ -1166,26 +1209,31 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows GUI.backgroundColor = Color.green; if (GUILayout.Button("Save")) { - //if one of the connected elements is not in the server, you can't save the link + //if one of the connected elements is not in the server, you can't save the link if ((SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDTo.ToString()) && SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDFrom.ToString()))) - { + { if (SaveInfo.instance.linkIds.Contains(worldLink.UUID.ToString())) { if (SaveInfo.instance.elemsToUpdate.Contains(worldLink.UUID.ToString())) { - WorldLinkRequest.UpdateWorldLink(SaveInfo.instance.worldStorageServer, worldLink); - SaveInfo.instance.elemsToUpdate.Remove(worldLink.UUID.ToString()); + WorldLinkRequest.UpdateWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink, (response) => + { + SaveInfo.instance.elemsToUpdate.Remove(worldLink.UUID.ToString()); + }); } } else { - String uuid = WorldLinkRequest.AddWorldLink(SaveInfo.instance.worldStorageServer, worldLink); - - //Add the newly saved WorldLink to the SaveInfo singleton - uuid = uuid.Replace("\"", ""); - worldLink.UUID = Guid.Parse(uuid); - worldLinkEdge.GUID = uuid; - SaveInfo.instance.linkIds.Add(uuid); + WorldLinkRequest.CreateWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink, (response) => + { + String uuid = response.result; + + //Add the newly saved WorldLink to the SaveInfo singleton + uuid = uuid.Replace("\"", ""); + worldLink.UUID = Guid.Parse(uuid); + worldLinkEdge.GUID = uuid; + SaveInfo.instance.linkIds.Add(uuid); + }); } worldLinkEdge.MarkSaved(); } @@ -1205,10 +1253,10 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows public static void DrawUILine(Color color, int thickness = 2, int padding = 10) { Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(padding + thickness)); - r.height = thickness; - r.y += padding/2; - r.x-=2; - r.width +=6; + r.height = thickness; + r.y += padding / 2; + r.x -= 2; + r.width += 6; EditorGUI.DrawRect(r, color); } } diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs index 09765371b2cac0b3ee58243fc6f91e352c86aa7f..2d225394d97b4bab2890232657d512ad955cabb7 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs @@ -15,15 +15,15 @@ // See the License for the specific language governing permissions and // limitations under the License. // -// Last change: July 2022 +// Last change: June 2024 // -#define USING_OPENAPI_GENERATOR // alt. is Swagger #define isDEBUG using System; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using UnityEngine; using UnityEditor; @@ -176,33 +176,39 @@ namespace ETSI.ARF.WorldStorage.UI if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString()) { Trackable obj = GenerateTrackable(); - UUID = TrackableRequest.UpdateTrackable(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + TrackableRequest.UpdateTrackableAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + + if (WorldStorageWindow.WorldStorageWindowSingleton != null) + { + WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + } + Close(); + }); } - if (WorldStorageWindow.WorldStorageWindowSingleton != null) - { - WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); - } - Close(); } GUI.backgroundColor = WorldStorageWindow.arfColors[3]; if (GUILayout.Button("Delete")) { Debug.Log("Delete Trackable"); - TrackableRequest.DeleteTrackable(worldStorageServer, UUID); - UUID = System.Guid.Empty.ToString(); - customName = "Warning: Object deleted !"; - creatorUUID = System.Guid.Empty.ToString(); - type = TrackableType.OTHER; - unit = UnitSystem.CM; - if (WorldStorageWindow.WorldStorageWindowSingleton != null) + TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) => { - WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); - } - Close(); + UUID = System.Guid.Empty.ToString(); + customName = "Warning: Object deleted !"; + creatorUUID = System.Guid.Empty.ToString(); + type = TrackableType.OTHER; + unit = UnitSystem.CM; + if (WorldStorageWindow.WorldStorageWindowSingleton != null) + { + WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + } + Close(); + }); } GUI.backgroundColor = ori; @@ -251,35 +257,38 @@ namespace ETSI.ARF.WorldStorage.UI private void GetTrackableParams() { - Trackable obj = TrackableRequest.GetTrackable(worldStorageServer, UUID); - customName = obj.Name; - creatorUUID = obj.CreatorUUID.ToString(); - type = obj.TrackableType; - unit = obj.Unit; - if (obj.TrackableSize.Count == 3) + TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) => { - trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]); - } - else trackableSize = Vector3.zero; + Trackable obj = response.result; + customName = obj.Name; + creatorUUID = obj.CreatorUUID.ToString(); + type = obj.TrackableType; + unit = obj.Unit; + if (obj.TrackableSize.Count == 3) + { + trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]); + } + else trackableSize = Vector3.zero; - if (obj.LocalCRS.Count == 16) - { - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(obj.LocalCRS); - localCRS_pos = localCRS.GetPosition(); - localCRS_rot = localCRS.rotation.eulerAngles; - } - else - { - localCRS_pos = Vector3.zero; - localCRS_rot = Vector3.zero; - } + if (obj.LocalCRS.Count == 16) + { + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.LocalCRS); + localCRS_pos = localCRS.GetPosition(); + localCRS_rot = localCRS.rotation.eulerAngles; + } + else + { + localCRS_pos = Vector3.zero; + localCRS_rot = Vector3.zero; + } - // Read a key value (demo) - var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags); - key1 = first.Item1; - value1 = first.Item2; + // Read a key value (demo) + var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags); + key1 = first.Item1; + value1 = first.Item2; - this.Repaint(); + this.Repaint(); + }); } public void AddTrackable() @@ -289,10 +298,13 @@ namespace ETSI.ARF.WorldStorage.UI customName = "Default Trackable"; Trackable obj = GenerateTrackable(); - UUID = TrackableRequest.AddTrackable(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value - WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + TrackableRequest.CreateTrackableAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + }); } public Trackable GenerateTrackable() @@ -317,7 +329,7 @@ namespace ETSI.ARF.WorldStorage.UI // Create a key value (one from demo) keyValueTags.Clear(); - keyValueTags.Add(key1, new List<string> { value1 }); + keyValueTags.Add(key1, new Collection<string> { value1 }); System.Guid _uuid = System.Guid.Parse(UUID); System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID); @@ -334,10 +346,10 @@ namespace ETSI.ARF.WorldStorage.UI KeyvalueTags = keyValueTags }; - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(nodePosX.ToString()); t.KeyvalueTags["unityAuthoringPosX"] = posX; - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(nodePosY.ToString()); t.KeyvalueTags["unityAuthoringPosY"] = posY; diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs index 51762c666e68d79d01ce94396485a4891d981a5a..cdaf1319829572bb9032d37220506744e405705a 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs @@ -23,6 +23,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using UnityEngine; using UnityEditor; @@ -173,10 +174,16 @@ namespace ETSI.ARF.WorldStorage.UI if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString()) { WorldAnchor obj = GenerateWorldAnchor(); - UUID = WorldAnchorRequest.UpdateWorldAnchor(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + WorldAnchorRequest.UpdateWorldAnchorAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + if (WorldStorageWindow.WorldStorageWindowSingleton != null) + { + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + } + }); } Close(); } @@ -185,17 +192,19 @@ namespace ETSI.ARF.WorldStorage.UI if (GUILayout.Button("Delete")) { Debug.Log("Delete World Anchor"); - WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID); - UUID = System.Guid.Empty.ToString(); - customName = "Warning: Object deleted !"; - creatorUUID = System.Guid.Empty.ToString(); - unit = UnitSystem.CM; - if (WorldStorageWindow.WorldStorageWindowSingleton != null) + WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) => { - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); - } - Close(); + UUID = System.Guid.Empty.ToString(); + customName = "Warning: Object deleted !"; + creatorUUID = System.Guid.Empty.ToString(); + unit = UnitSystem.CM; + if (WorldStorageWindow.WorldStorageWindowSingleton != null) + { + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + } + Close(); + }); } GUI.backgroundColor = ori; @@ -232,34 +241,37 @@ namespace ETSI.ARF.WorldStorage.UI private void GetWorldAnchorParams() { - WorldAnchor obj = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, UUID); - customName = obj.Name; - creatorUUID = obj.CreatorUUID.ToString(); - unit = obj.Unit; - if (obj.WorldAnchorSize.Count == 3) + WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) => { - worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]); - } - else worldAnchorSize = Vector3.zero; + WorldAnchor obj = response.result; + customName = obj.Name; + creatorUUID = obj.CreatorUUID.ToString(); + unit = obj.Unit; + if (obj.WorldAnchorSize.Count == 3) + { + worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]); + } + else worldAnchorSize = Vector3.zero; - if (obj.LocalCRS.Count == 16) - { - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(obj.LocalCRS); - localCRS_pos = localCRS.GetPosition(); - localCRS_rot = localCRS.rotation.eulerAngles; - } - else - { - localCRS_pos = Vector3.zero; - localCRS_rot = Vector3.zero; - } + if (obj.LocalCRS.Count == 16) + { + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.LocalCRS); + localCRS_pos = localCRS.GetPosition(); + localCRS_rot = localCRS.rotation.eulerAngles; + } + else + { + localCRS_pos = Vector3.zero; + localCRS_rot = Vector3.zero; + } - // Read a key value (demo) - var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags); - key1 = first.Item1; - value1 = first.Item2; + // Read a key value (demo) + var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags); + key1 = first.Item1; + value1 = first.Item2; - this.Repaint(); + this.Repaint(); + }); } public void AddAnchor() @@ -269,10 +281,13 @@ namespace ETSI.ARF.WorldStorage.UI customName = "Default Anchor"; WorldAnchor obj = GenerateWorldAnchor(); - UUID = WorldAnchorRequest.AddWorldAnchor(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + WorldAnchorRequest.CreateWorldAnchorAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + }); } public WorldAnchor GenerateWorldAnchor() @@ -289,10 +304,10 @@ namespace ETSI.ARF.WorldStorage.UI // Create a key value (one from demo) keyValueTags.Clear(); - keyValueTags.Add(key1, new List<string> { value1 }); + keyValueTags.Add(key1, new Collection<string> { value1 }); - System.Guid _uuid = System.Guid.Parse(UUID); - System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID); + Guid _uuid = Guid.Parse(UUID); + Guid _creator = Guid.Parse(worldStorageUser.UUID); WorldAnchor t = new WorldAnchor(customName) { UUID = _uuid, @@ -303,10 +318,10 @@ namespace ETSI.ARF.WorldStorage.UI KeyvalueTags = keyValueTags }; - var posX = new List<String>(); + var posX = new Collection<String>(); posX.Add(nodePosX.ToString()); t.KeyvalueTags["unityAuthoringPosX"] = posX; - var posY = new List<String>(); + var posY = new Collection<String>(); posY.Add(nodePosY.ToString()); t.KeyvalueTags["unityAuthoringPosY"] = posY; diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs index 6934227c95bdcd54f4de0074feff722ceceed96a..c5b89708c1e7ca13cdcb367d051c24a91a8810b1 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs @@ -74,7 +74,8 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { if (worldStorageServer != null) { - try { + try + { if (SaveInfo.instance.nodePositions == null) { SaveInfo.instance.InitNodePos(worldStorageServer, worldStorageUser); @@ -126,7 +127,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { GraphEditorWindow.ResetWindow(); - if((myGraph != null)) + if ((myGraph != null)) { if (myGraph.ServerAndLocalDifferent() && EditorUtility.DisplayDialog("Saving node positions", "The World Graph has been modified. \nWould you like to push the modifications to the server ?", "Yes", "No")) { @@ -134,7 +135,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows } rootVisualElement.Remove(myGraph); } - if(worldStorageServer != null) + if (worldStorageServer != null) { try { @@ -151,7 +152,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows Debug.Log(e.ToString()); } } - else + else { myGraph = null; } @@ -201,7 +202,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows { rootVisualElement.Remove(myGraph); node.DisconnectAllPorts(myGraph); - myGraph.DeleteElements(new List<GraphElement>{ node }); + myGraph.DeleteElements(new List<GraphElement> { node }); rootVisualElement.Add(myGraph); } @@ -219,7 +220,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows public Dictionary<String, Rect> nodePositions; public List<String> linkIds; - public Dictionary<String,Type> elemsToRemove; + public Dictionary<String, Type> elemsToRemove; public List<String> elemsToUpdate; //keep the info of the graph reframe @@ -234,42 +235,55 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows worldStorageUser = user; instance.nodePositions = new Dictionary<string, Rect>(); - foreach (Trackable track in TrackableRequest.GetAllTrackables(worldStorageServer)) + TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) => { - if (track.KeyvalueTags.ContainsKey("unityAuthoringPosX") && track.KeyvalueTags.ContainsKey("unityAuthoringPosY")) - { - var posX = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosX"][0])); - var posY = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosY"][0])); - Rect trackPos = new(posX, posY, 135, 77); - instance.nodePositions[track.UUID.ToString()] = trackPos; - } - else + List<Trackable> list = response.result; + foreach (Trackable track in list) { - Rect trackPos = new(0, 0, 135, 77); - instance.nodePositions[track.UUID.ToString()] = trackPos; + if (track.KeyvalueTags.ContainsKey("unityAuthoringPosX") && track.KeyvalueTags.ContainsKey("unityAuthoringPosY")) + { + var posX = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosX"][0])); + var posY = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosY"][0])); + Rect trackPos = new(posX, posY, 135, 77); + instance.nodePositions[track.UUID.ToString()] = trackPos; + } + else + { + Rect trackPos = new(0, 0, 135, 77); + instance.nodePositions[track.UUID.ToString()] = trackPos; + } } - } - foreach (WorldAnchor wa in WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer)) + }); + + WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) => { - if (wa.KeyvalueTags.ContainsKey("unityAuthoringPosX") && wa.KeyvalueTags.ContainsKey("unityAuthoringPosY")) + List<WorldAnchor> list = response.result; + foreach (WorldAnchor wa in list) { - var posX = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosX"][0])); - var posY = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosY"][0])); - Rect waPos = new(posX, posY, 135, 77); - instance.nodePositions[wa.UUID.ToString()] = waPos; - } - else - { - Rect trackPos = new(0, 0, 135, 77); - instance.nodePositions[wa.UUID.ToString()] = trackPos; + if (wa.KeyvalueTags.ContainsKey("unityAuthoringPosX") && wa.KeyvalueTags.ContainsKey("unityAuthoringPosY")) + { + var posX = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosX"][0])); + var posY = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosY"][0])); + Rect waPos = new(posX, posY, 135, 77); + instance.nodePositions[wa.UUID.ToString()] = waPos; + } + else + { + Rect trackPos = new(0, 0, 135, 77); + instance.nodePositions[wa.UUID.ToString()] = trackPos; + } } - } + }); instance.linkIds = new List<string>(); - foreach (WorldLink link in WorldLinkRequest.GetAllWorldLinks(worldStorageServer)) + WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) => { - instance.linkIds.Add(link.UUID.ToString()); - } + List<WorldLink> list = response.result; + foreach (WorldLink link in list) + { + instance.linkIds.Add(link.UUID.ToString()); + } + }); instance.elemsToRemove = new Dictionary<string, Type>(); instance.elemsToUpdate = new List<string>(); diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs index 45dbb8674bf0736ec54d78ed67432406434521ac..711564401e75b27e5194ff1a55a6d1cdabedb027 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs @@ -20,8 +20,10 @@ #define isDEBUG +using System; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using UnityEngine; using UnityEditor; @@ -67,7 +69,7 @@ namespace ETSI.ARF.WorldStorage.UI Vector3 transf_pos; Vector3 transf_rot; - [SerializeField] Dictionary<string, List<string>> keyValueTags = new Dictionary<string, List<string>>(); + [SerializeField] KeyvalueTagList keyValueTags = new KeyvalueTagList(); string key1 = ""; string value1 = ""; @@ -165,68 +167,80 @@ namespace ETSI.ARF.WorldStorage.UI private void GetElementFROM() { // Trackable? - try + TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(FROM.UUID), (response) => { - Trackable result = TrackableRequest.GetTrackable(worldStorageServer, FROM.UUID); - FROM.name = result.Name; - FROM.type = TypeWorldStorage.TRACKABLE; - - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS); - FROM.pos = localCRS.GetPosition(); - } - catch - { - // Anchor? try { - WorldAnchor result = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, FROM.UUID); + Trackable result = response.result; FROM.name = result.Name; - FROM.type = TypeWorldStorage.ANCHOR; + FROM.type = TypeWorldStorage.TRACKABLE; - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS); + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS); FROM.pos = localCRS.GetPosition(); } catch { - // Nothing! - FROM.name = ""; - FROM.type = TypeWorldStorage.UNKNOWN; + // Anchor? + WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(FROM.UUID), (response) => + { + try + { + WorldAnchor result = response.result; + FROM.name = result.Name; + FROM.type = TypeWorldStorage.ANCHOR; + + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS); + FROM.pos = localCRS.GetPosition(); + } + catch + { + // Nothing! + FROM.name = ""; + FROM.type = TypeWorldStorage.UNKNOWN; + } + }); } - } + }); } private void GetElementTO() { // Trackable? - try + TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(TO.UUID), (response) => { - Trackable result = TrackableRequest.GetTrackable(worldStorageServer, TO.UUID); - TO.name = result.Name; - TO.type = TypeWorldStorage.TRACKABLE; - - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS); - TO.pos = localCRS.GetPosition(); - } - catch - { - // Anchor? try { - WorldAnchor result = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, TO.UUID); + Trackable result = response.result; TO.name = result.Name; - TO.type = TypeWorldStorage.ANCHOR; + TO.type = TypeWorldStorage.TRACKABLE; - Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS); + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS); TO.pos = localCRS.GetPosition(); } catch { - // Nothing! - TO.UUID = System.Guid.Empty.ToString(); - TO.name = ""; - TO.type = TypeWorldStorage.UNKNOWN; + // Anchor? + WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(TO.UUID), (response) => + { + try + { + WorldAnchor result = response.result; + TO.name = result.Name; + TO.type = TypeWorldStorage.ANCHOR; + + Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS); + TO.pos = localCRS.GetPosition(); + } + catch + { + // Nothing! + TO.UUID = System.Guid.Empty.ToString(); + TO.name = ""; + TO.type = TypeWorldStorage.UNKNOWN; + } + }); } - } + }); } void DrawAnchorStuffs() @@ -270,10 +284,13 @@ namespace ETSI.ARF.WorldStorage.UI if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString()) { WorldLink obj = GenerateWorldLink(); - UUID = WorldLinkRequest.UpdateWorldLink(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + WorldLinkRequest.UpdateWorldLinkAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + }); } } @@ -281,13 +298,15 @@ namespace ETSI.ARF.WorldStorage.UI if (GUILayout.Button("Delete")) { Debug.Log("Delete World Link"); - WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID); - UUID = System.Guid.Empty.ToString(); - customName = "Warning: Object deleted !"; - creatorUUID = System.Guid.Empty.ToString(); - unit = UnitSystem.CM; - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + UUID = System.Guid.Empty.ToString(); + customName = "Warning: Object deleted !"; + creatorUUID = System.Guid.Empty.ToString(); + unit = UnitSystem.CM; + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + }); } GUI.backgroundColor = ori; @@ -389,35 +408,38 @@ namespace ETSI.ARF.WorldStorage.UI private void GetWorldLinkParams() { - WorldLink obj = WorldLinkRequest.GetWorldLink(worldStorageServer, UUID); - //customName = obj.Name; - creatorUUID = obj.CreatorUUID.ToString(); + WorldLinkRequest.GetWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldLink obj = response.result; + //customName = obj.Name; + creatorUUID = obj.CreatorUUID.ToString(); - FROM.UUID = obj.UUIDFrom.ToString(); - FROM.type = obj.TypeFrom; + FROM.UUID = obj.UUIDFrom.ToString(); + FROM.type = obj.TypeFrom; - TO.UUID = obj.UUIDTo.ToString(); - TO.type = obj.TypeTo; + TO.UUID = obj.UUIDTo.ToString(); + TO.type = obj.TypeTo; - unit = obj.Unit; - if (obj.Transform.Count == 16) - { - Matrix4x4 transf = WorldStorageWindow.MatrixFromLocalCRS(obj.Transform); - transf_pos = transf.GetPosition(); - transf_rot = transf.rotation.eulerAngles; - } - else - { - transf_pos = Vector3.zero; - transf_rot = Vector3.zero; - } - keyValueTags = obj.KeyvalueTags; + unit = obj.Unit; + if (obj.Transform.Count == 16) + { + Matrix4x4 transf = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.Transform); + transf_pos = transf.GetPosition(); + transf_rot = transf.rotation.eulerAngles; + } + else + { + transf_pos = Vector3.zero; + transf_rot = Vector3.zero; + } + keyValueTags = obj.KeyvalueTags; - // Get here the params of the from/to elements (GET) - GetElementFROM(); - GetElementTO(); + // Get here the params of the from/to elements (GET) + GetElementFROM(); + GetElementTO(); - this.Repaint(); + this.Repaint(); + }); } public void AddLink() @@ -427,10 +449,13 @@ namespace ETSI.ARF.WorldStorage.UI customName = "Default Link"; WorldLink obj = GenerateWorldLink(); - UUID = WorldLinkRequest.AddWorldLink(worldStorageServer, obj); - UUID = UUID.Trim('"'); //Bugfix: remove " from server return value - WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + WorldLinkRequest.CreateWorldLinkAsync(worldStorageServer, obj, (response) => + { + UUID = response.result; + UUID = UUID.Trim('"'); //Bugfix: remove " from server return value + WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks(); + WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + }); } public WorldLink GenerateWorldLink() @@ -441,7 +466,7 @@ namespace ETSI.ARF.WorldStorage.UI // Create a key value (one from demo) keyValueTags.Clear(); - keyValueTags.Add(key1, new List<string> { value1 }); + keyValueTags.Add(key1, new Collection<string> { value1 }); System.Guid _uuid = System.Guid.Parse(UUID); System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID); diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs index d73bea0d950531f0cc82735bebf484cdb20e2f9b..5725d51675f227edf4d3690cc6e3a420faff4c53 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs @@ -20,6 +20,7 @@ #define isDEBUG +using System; using System.Collections; using System.Collections.Generic; @@ -29,7 +30,8 @@ using UnityEditor; using ETSI.ARF.WorldStorage; using ETSI.ARF.WorldStorage.REST; using ETSI.ARF.WorldStorage.Editor.Windows; - +using ETSI.ARF.OpenAPI.WorldStorage; + namespace ETSI.ARF.WorldStorage.UI { public class WorldStorageWindow : EditorWindow @@ -56,8 +58,8 @@ namespace ETSI.ARF.WorldStorage.UI private static GUILayoutOption buttonWidth = GUILayout.Width(64f); private bool showListT = true; private bool showListA = true; - private bool showListL = true; - + private bool showListL = true; + private string filterByKeyValueTag = ""; static public string winName = "ARF Authoring Editor"; @@ -153,7 +155,10 @@ namespace ETSI.ARF.WorldStorage.UI ping = EditorGUILayout.TextField("Last Ping", ping); if (GUILayout.Button("Ping")) { - ping = AdminRequest.Ping(worldStorageServer); + OpenAPI.ResponseObject<string> ro = AdminRequest.PingAsync(worldStorageServer, (response) => + { + ping = response.result; + }); } GUI.backgroundColor = ori; GUILayout.EndHorizontal(); @@ -165,7 +170,10 @@ namespace ETSI.ARF.WorldStorage.UI if (GUILayout.Button("Get World Storage Sate")) { - state = AdminRequest.GetAdminInfo(worldStorageServer); + OpenAPI.ResponseObject<string> ro = AdminRequest.AdminAsync(worldStorageServer, (response) => + { + state = response.result; + }); } GUI.backgroundColor = ori; GUILayout.EndHorizontal(); @@ -177,7 +185,10 @@ namespace ETSI.ARF.WorldStorage.UI if (GUILayout.Button("Get World Storage API Version")) { - vers = AdminRequest.GetVersion(worldStorageServer); + OpenAPI.ResponseObject<string> ro = AdminRequest.VersionAsync(worldStorageServer, (response) => + { + vers = response.result; + }); } GUI.backgroundColor = ori; GUILayout.EndHorizontal(); @@ -259,7 +270,10 @@ namespace ETSI.ARF.WorldStorage.UI // extract the UUID UUID = customName.Split('[', ']')[1]; } - if (++n > 3) TrackableRequest.DeleteTrackable(worldStorageServer, UUID); + if (++n > 3) TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + // nothing to do + }); } GetTrackables(); @@ -291,9 +305,11 @@ namespace ETSI.ARF.WorldStorage.UI { if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel")) { - TrackableRequest.DeleteTrackable(worldStorageServer, UUID); - WorldStorageWindowSingleton.GetTrackables(); - WorldStorageWindowSingleton.Repaint(); + TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldStorageWindowSingleton.GetTrackables(); + WorldStorageWindowSingleton.Repaint(); + }); } } GUI.backgroundColor = ori; @@ -348,11 +364,14 @@ namespace ETSI.ARF.WorldStorage.UI // extract the UUID UUID = customName.Split('[', ']')[1]; } - if (++n > 3) WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID); + if (++n > 3) WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldStorageWindowSingleton.GetWorldAnchors(); + WorldStorageWindowSingleton.Repaint(); + }); } - - GetWorldAnchors(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + //WorldStorageWindowSingleton.GetWorldAnchors(); + //WorldStorageWindowSingleton.Repaint(); } } GUI.backgroundColor = ori; @@ -380,9 +399,11 @@ namespace ETSI.ARF.WorldStorage.UI { if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel")) { - WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID); - WorldStorageWindowSingleton.GetWorldAnchors(); - WorldStorageWindowSingleton.Repaint(); + WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldStorageWindowSingleton.GetWorldAnchors(); + WorldStorageWindowSingleton.Repaint(); + }); } } GUI.backgroundColor = ori; @@ -437,11 +458,14 @@ namespace ETSI.ARF.WorldStorage.UI // extract the UUID UUID = customName.Split('[', ']')[1]; } - if (++n > 3) WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID); + if (++n > 3) WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldStorageWindowSingleton.GetWorldLinks(); + WorldStorageWindowSingleton.Repaint(); + }); } - - GetWorldLinks(); - WorldStorageWindow.WorldStorageWindowSingleton.Repaint(); + //WorldStorageWindowSingleton.GetWorldLinks(); + //WorldStorageWindowSingleton.Repaint(); } } GUI.backgroundColor = ori; @@ -460,8 +484,8 @@ namespace ETSI.ARF.WorldStorage.UI if (UUID == null) UUID = links[i]; // try this if (GUILayout.Button("Edit...", EditorStyles.miniButtonLeft, buttonWidth)) { - Debug.Log("Open Link Window"); - + Debug.Log("Open Link Window"); + WorldLinkWindow.ShowWindow(worldStorageServer, worldStorageUser, UUID); } @@ -470,9 +494,11 @@ namespace ETSI.ARF.WorldStorage.UI { if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel")) { - WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID); - WorldStorageWindowSingleton.GetWorldLinks(); - WorldStorageWindowSingleton.Repaint(); + WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) => + { + WorldStorageWindowSingleton.GetWorldLinks(); + WorldStorageWindowSingleton.Repaint(); + }); } } GUI.backgroundColor = ori; @@ -503,15 +529,17 @@ namespace ETSI.ARF.WorldStorage.UI { // Get all objects Debug.Log("Get all creators id"); - List<Trackable> res = TrackableRequest.GetAllTrackables(worldStorageServer); - creators.Clear(); - foreach (var item in res) - { - if (!creators.Contains(item.CreatorUUID.ToString())) creators.Add(item.CreatorUUID.ToString()); - } + TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) => + { + creators.Clear(); + foreach (var item in response.result) + { + if (!creators.Contains(item.CreatorUUID.ToString())) creators.Add(item.CreatorUUID.ToString()); + } + }); } - static public (string, string) GetFirstKeyValueTags(Dictionary<string, List<string>> dict) + static public (string, string) GetFirstKeyValueTags(KeyvalueTagList dict) { if (dict.Count >= 1) { @@ -529,62 +557,58 @@ namespace ETSI.ARF.WorldStorage.UI return ("", ""); } - static public Matrix4x4 MatrixFromLocalCRS(List<float> localCRS) - { - Matrix4x4 matrix = new Matrix4x4(); - matrix.m00 = localCRS[0]; matrix.m01 = localCRS[1]; matrix.m02 = localCRS[2]; matrix.m03 = localCRS[3]; - matrix.m10 = localCRS[4]; matrix.m11 = localCRS[5]; matrix.m12 = localCRS[6]; matrix.m13 = localCRS[7]; - matrix.m20 = localCRS[8]; matrix.m21 = localCRS[9]; matrix.m22 = localCRS[10]; matrix.m23 = localCRS[11]; - matrix.m30 = localCRS[12]; matrix.m31 = localCRS[13]; matrix.m32 = localCRS[14]; matrix.m33 = localCRS[15]; - return matrix; - } - public void GetTrackables() { // Get all objects Debug.Log("Get all server objects"); - List<Trackable> res = TrackableRequest.GetAllTrackables(worldStorageServer); - trackables.Clear(); - foreach (var item in res) - { - if (filterByKeyValueTag != "") - { - var first = GetFirstKeyValueTags(item.KeyvalueTags); - if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue; + TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) => + { + trackables.Clear(); + foreach (var item in response.result) + { + if (filterByKeyValueTag != "") + { + var first = GetFirstKeyValueTags(item.KeyvalueTags); + if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue; + } + if (!string.IsNullOrEmpty(item.Name)) trackables.Add(item.Name + " [" + item.UUID.ToString() + "]"); + else trackables.Add(item.UUID.ToString()); } - if (!string.IsNullOrEmpty(item.Name)) trackables.Add(item.Name + " [" + item.UUID.ToString() + "]"); - else trackables.Add(item.UUID.ToString()); - } + }); } public void GetWorldAnchors() { // Get all objects Debug.Log("Get all server objects"); - List<WorldAnchor> res = WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer); - anchors.Clear(); - foreach (var item in res) - { - if (filterByKeyValueTag != "") + WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) => + { + anchors.Clear(); + foreach (var item in response.result) { - var first = GetFirstKeyValueTags(item.KeyvalueTags); - if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue; + if (filterByKeyValueTag != "") + { + var first = GetFirstKeyValueTags(item.KeyvalueTags); + if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue; + } + if (!string.IsNullOrEmpty(item.Name)) anchors.Add(item.Name + " [" + item.UUID.ToString() + "]"); + else anchors.Add(item.UUID.ToString()); } - if (!string.IsNullOrEmpty(item.Name)) anchors.Add(item.Name + " [" + item.UUID.ToString() + "]"); - else anchors.Add(item.UUID.ToString()); - } + }); } public void GetWorldLinks() { // Get all objects Debug.Log("Get all server objects"); - List<WorldLink> res = WorldLinkRequest.GetAllWorldLinks(worldStorageServer); - links.Clear(); - foreach (var item in res) - { - links.Add(item.UUID.ToString()); - } + WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) => + { + links.Clear(); + foreach (var item in response.result) + { + links.Add(item.UUID.ToString()); + } + }); } #endregion } diff --git a/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs b/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs index 77184d2fe28d2ec1ff711ae9845c6c3ad6633d21..cdda36ce34012a18789cadf9d15f5a6e4b4f6a4d 100644 --- a/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs +++ b/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs @@ -18,6 +18,7 @@ using UnityEngine; using ETSI.ARF.OpenAPI; using ETSI.ARF.OpenAPI.WorldStorage; +using ETSI.ARF.WorldStorage.REST; namespace ETSI.ARF.WorldStorage { @@ -28,14 +29,26 @@ namespace ETSI.ARF.WorldStorage /// </summary> public class WorldStorageRequest : WorldStorageCollections { - private string serverUri; + private WorldStorageServer wsServer; private WorldStorageClient apiClient; + private string serverUri; public string URI => serverUri; public WorldStorageClient Client => apiClient; + public WorldStorageRequest(WorldStorageServer server) : base() + { + wsServer = server; + serverUri = wsServer.URI; + var httpClient = new UnityWebRequestHttpClient(serverUri); + apiClient = new WorldStorageClient(httpClient); + } + public WorldStorageRequest(string uri) : base() { + wsServer = new WorldStorageServer(); + wsServer.basePath = uri; + wsServer.port = 0; serverUri = uri; var httpClient = new UnityWebRequestHttpClient(serverUri); apiClient = new WorldStorageClient(httpClient); @@ -75,28 +88,6 @@ namespace ETSI.ARF.WorldStorage } else Debug.Log("[REST] OpenAPI Timeout!"); } - - //private void OnReceiveAssetList(Task<List<Asset>> t, object id) - //{ - // if (t.IsCompleted) - // { - // ResponseList<Asset> o = (ResponseList<Asset>)id; - // o.responseTime = DateTime.Now; - // o.list = t.Result; - // Debug.Log($"[REST] Server Response = Got {o.list.Count} asset(s) (#{o.transactionId}, {o.message})"); - - // trackables.list.Clear(); - // foreach (var i in o.list) - // { - // i.where = Model.Localisation.SERVER; - // //todo: GUID already exists??? - // trackables.list.Add(i.GUID, i); - // } - // trackables.PreCount = trackables.Count; // sync value - // o.callback?.Invoke(o); - // } - // else Debug.Log("[REST] OpenAPI Timeout!"); - //} #endregion // @@ -107,20 +98,14 @@ namespace ETSI.ARF.WorldStorage public ResponseObject<string> PingAsync(Action<ResponseObject<string>> func) { - Debug.Log("[REST] Request Ping..."); - ResponseObject<string> ro = new ResponseObject<string>("Ping", func); - apiClient.GetPingAsync().ContinueWith(ReceiveTextCallback, ro); - return ro; // if the cancel token is needed! + return AdminRequest.PingAsync(wsServer, func); } public string Status() => apiClient.GetAdmin(); public ResponseObject<string> StatusAsync(Action<ResponseObject<string>> func) { - Debug.Log("[REST] Request Status..."); - ResponseObject<string> ro = new ResponseObject<string>("Status", func); - apiClient.GetAdminAsync().ContinueWith(ReceiveTextCallback, ro); - return ro; // if the cancel token is needed! + return AdminRequest.AdminAsync(wsServer, func); } public string Version() => apiClient.GetVersion(); @@ -128,10 +113,7 @@ namespace ETSI.ARF.WorldStorage public ResponseObject<string> VersionAsync(Action<ResponseObject<string>> func) { - Debug.Log("[REST] Request Version..."); - ResponseObject<string> ro = new ResponseObject<string>("Version", func); - apiClient.GetVersionAsync().ContinueWith(ReceiveTextCallback, ro); - return ro; // if the cancel token is needed! + return AdminRequest.VersionAsync(wsServer, func); } #endregion @@ -142,46 +124,30 @@ namespace ETSI.ARF.WorldStorage //public Task<int> GetNumOfAssets() => apiClient.NumOfAssetsAsync(); //public bool IsAssetExists(Guid id) => apiClient.IsAssetId(id); - public ResponseObject<string> AddTrackableAsync(Action<ResponseObject<string>> func, Trackable asset) + public ResponseObject<string> AddTrackableAsync(Action<ResponseObject<string>> func, Trackable trackable) { - Debug.Log("[REST] Create trackable..."); - ResponseObject<string> ro = new ResponseObject<string>("AddTrackableAsync", func); - apiClient.AddTrackableAsync("", asset).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken); - return ro; // if the cancel token is needed! + return TrackableRequest.CreateTrackableAsync(wsServer, trackable, func); } public ResponseObject<string> DeleteTrackableAsync(Action<ResponseObject<string>> func, Guid id) { - Debug.Log("[REST] Delete trackable..."); - ResponseObject<string> ro = new ResponseObject<string>("DeleteAssetAsync", func); - apiClient.DeleteTrackableAsync("", id).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken); - return ro; // if the cancel token is needed! + return TrackableRequest.DeleteTrackableAsync(wsServer, id, func); } - public ResponseObject<string> ModifyTrackableAsync(Action<ResponseObject<string>> func, Trackable asset) + public ResponseObject<string> ModifyTrackableAsync(Action<ResponseObject<string>> func, Trackable trackable) { - Debug.Log("[REST] Modify trackable..."); - ResponseObject<string> ro = new ResponseObject<string>("ModifyTrackableAsync", func); - apiClient.ModifyTrackableAsync("", asset).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken); - return ro; // if the cancel token is needed! + return TrackableRequest.UpdateTrackableAsync(wsServer, trackable, func); } public ResponseObject<Trackable> GetTrackableByIdAsync(Action<ResponseObject<Trackable>> func, Guid id) { - Debug.Log("[REST] Request trackable..."); - ResponseObject<Trackable> ro = new ResponseObject<Trackable>("GetTrackableById", func); - apiClient.GetTrackableByIdAsync("", id).ContinueWith(ReceiveTrackableCallback, ro, ro.cancellationToken); - return ro; // if the cancel token is needed! + return TrackableRequest.GetTrackableAsync(wsServer, id, func); } - //public ResponseList<Trackable> GetAssetListAsync(Action<ResponseList<Trackable>> func, int? max = 1) - //{ - // Debug.Log("[REST] Requesting trackable list..."); - // ResponseList<Trackable> ro = new ResponseList<Trackable>("GetAssetListAsync", func); - // apiClient.GetAssetListAsync().ContinueWith(OnReceiveAssetList, ro, ro.cancellationToken); - // //ro.Cancel(); // a process should call this function to stop the request - // return ro; // if the cancel token is needed! - //} + public ResponseObject<List<Trackable>> GetTrackableListAsync(Action<ResponseObject<List<Trackable>>> func, int? max = 1) + { + return TrackableRequest.GetTrackablesAsync(wsServer, func); + } #endregion } } diff --git a/Packages/unity-world-storage-package b/Packages/unity-world-storage-package index 5dd117cc3a4b21f1f63fc1be336a29cbf5e96ec0..8d0b687c978d5319b2903b24bf9e63b289c7777f 160000 --- a/Packages/unity-world-storage-package +++ b/Packages/unity-world-storage-package @@ -1 +1 @@ -Subproject commit 5dd117cc3a4b21f1f63fc1be336a29cbf5e96ec0 +Subproject commit 8d0b687c978d5319b2903b24bf9e63b289c7777f diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index ba5371316530ac94cb1c691004ad00754efc92c2..5bbf3d783d9626eeaa6e424740a0b2dd73e08cf6 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -11,6 +11,9 @@ EditorUserSettings: RecentlyUsedSceneGuid-1: value: 5a08575f5207595a0f5d59741173094444164f7d7d2a23317c7a4465bbe1646d flags: 0 + RecentlyUsedSceneGuid-2: + value: 5605565456500d5d5d5e597742740b444316497b7e7e72347f7d4a67b3b1676b + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0