public string Generate(IMarker marker, UnityProject project) { RawMarkerBarcodeData data = new RawMarkerBarcodeData(); data.marker = (Marker)marker; return(data.Serialize()); }
private IPublisherClient CreatePublisher(UnityProject project, UnityUser user) { // This is the public name of the Source Project you want to export (it doesn't have to be unique). string sourceName = $"{project.Name}_markers"; // This identifies the Source Project you want to export and must be unique and persistent over multiple publishing sessions. string baseIdString = $"{project.ProjectId}_markers"; string sourceId; using (MD5 md5 = MD5.Create()) { byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(baseIdString)); sourceId = new Guid(hash).ToString(); } var version = Regex.Replace(Application.version, "[^0-9.]", ""); //Create the publisher settings for the client m_PublisherSettings = new PublisherSettings(project, user) { PluginName = Application.productName + " MarkerPublisher", //TODO: Use Reflect DLL version PluginVersion = Version.Parse(version), LengthUnit = LengthUnit.Meters, AxisInversion = AxisInversion.None }; // Create a Publisher Client, that will allow us to publish data into the selected Unity Project. return(Publisher.OpenClient(sourceName, sourceId, m_PublisherSettings, false)); }
public void Inject(IPlayerClient client, UnityProject project) { m_Client = client; m_Project = project; m_Storage = new PlayerStorage(UnityEngine.Reflect.ProjectServer.ProjectDataPath, true, false); }
Task DeleteProjectLocally(CancellationToken token, UnityProject project) { m_CurrentCount = 0; m_TotalCount = 0; var projectFolderPath = m_Storage.GetProjectFolder(project); if (!Directory.Exists(projectFolderPath)) { Debug.LogWarning($"Cannot delete locally stored project '{project.ProjectId}'"); return(Task.CompletedTask); } // Deleting each file individually is slow. Instead, get all leaf directories and delete them one after the other. var projectDirectories = Directory .EnumerateDirectories(projectFolderPath, "*.*", SearchOption.AllDirectories) .Where(f => !Directory.EnumerateDirectories(f, "*.*", SearchOption.TopDirectoryOnly).Any()).ToList(); m_TotalCount = projectDirectories.Count; for (int i = 0; i < projectDirectories.Count; ++i) { token.ThrowIfCancellationRequested(); Directory.Delete(projectDirectories[i], true); m_CurrentCount++; } Directory.Delete(projectFolderPath, true); return(Task.CompletedTask); }
public void InstantiateAndStart(ActorSystemSetup actorSystemSetup, IExposedPropertyTable resolver = null, UnityProject unityProject = null, UnityUser unityUser = null) { Hook.InstantiateAndStart(actorSystemSetup, resolver, unityProject, unityUser); }
public void UpdateProject(UnityProject project, UnityUser user) { if (m_PublisherClient != null) { m_PublisherClient.CloseAndWait(); } try { m_PublisherClient = CreatePublisher(project, user); } catch (Exception e) { Debug.LogError(e); m_PublisherClient?.CloseAndWait(); } if (m_PublisherClient == null) { Debug.LogError("Publisher failed to open"); throw new NullReferenceException("Publisher Missing"); } if (!m_PublisherClient.IsTypeSendable <SyncMarker>()) { Debug.LogError("SyncMarkers not supported"); throw new SyncModelNotSupportedException("SyncMarkers not supported by the project host"); } }
public string Generate(IMarker marker, UnityProject project) { ProjectMarkerBarcodeData data = new ProjectMarkerBarcodeData(); data.MarkerID = marker.Id.ToString(); data.ProjectID = project.ProjectId; return(data.Serialize()); }
public static void Launch(LaunchOptions options) { Logger.Verbose = options.Verbose; var unityProject = new UnityProject(options.ProjectPath); Logger.Info("Attempting to launch Unity with project '{0}'", options.ProjectPath); if (!unityProject.IsValid()) { Logger.Error("The passed project doesn't seem like a valid Unity project."); Environment.ExitCode = 1; return; } var unityHub = new UnityHub(options.HubPath); if (!unityHub.PathExists()) { Logger.Error("Unity hub was not found"); Environment.ExitCode = 1; return; } var unityInstall = unityHub.GetInstall(unityProject.UnityVersion); if (unityInstall == null) { if (!options.InstallIfNeeded) { Logger.Error("Unity version '{0}' doesn't seem to be installed", unityProject.UnityVersion); Logger.Info("You can use the '--install-if-needed' option to automatically install it"); Environment.ExitCode = 1; return; } Logger.Info("Unity version is not yet installed, doing that next"); if (!InstallVersion(unityHub, unityProject.UnityVersion, unityProject.UnityVersionChangeset)) { Logger.Error("Failed to install, not opening project"); Environment.ExitCode = 1; return; } unityInstall = unityHub.GetInstall(unityProject.UnityVersion); } var unityArgs = new UnityLaunchArguments(unityProject); options.CopyTo(unityArgs); if (options.Headless) { unityArgs.SetHeadless(); } var exitCode = unityInstall.Launch(unityArgs); Environment.ExitCode = exitCode; }
public void GenerateGraphic(IMarker marker, UnityProject project, IBarcodeDataParser parser) { m_ProjectNameField.text = project.Name; m_MarkerNameField.text = marker.Name; var data = parser.Generate(marker, project); m_QrImageField.texture = GenerateQR(data, 256, 256); m_QrImageField.color = Color.white; }
public ReflectClient(IUpdateDelegate updateDelegate, UnityUser user, PlayerStorage storage, UnityProject project) { m_Project = project; m_User = user; m_Storage = storage; InitializeProjectClientListener(); updateDelegate.update += OnUpdate; }
public string Generate(IMarker marker, UnityProject project) { var queryArgs = MarkerDeepLinkBarcodeParser.GetQueryArgs(project.Uri); queryArgs[Key] = marker.Id.ToString(); var response = new UriBuilder(project.Uri); response.Query = MarkerDeepLinkBarcodeParser.ToQueryString(queryArgs); return(response.Uri.ToString()); }
public static void InstantiateAndStart(this ReflectBootstrapper reflectBootstrapper, ActorSystemSetup actorSystemSetup, IExposedPropertyTable resolver = null, UnityProject unityProject = null, UnityUser unityUser = null) { var actorRunnerProxy = reflectBootstrapper.systems.ActorRunner; actorRunnerProxy.Instantiate(actorSystemSetup, unityProject, resolver, unityUser); actorRunnerProxy.StartActorSystem(); }
private void LoginToPublisher() { //Create a local sync service project. string projectStr = File.ReadAllText($"{importPath}/project.json"); UnityProjectData projectData = JsonUtility.FromJson <UnityProjectData>(projectStr); UnityProject project = new UnityProject(projectData.ProjectId, projectData.ProjectName); //Create a Unity User string userStr = File.ReadAllText($"{importPath}/user.json"); UnityUserData userData = JsonUtility.FromJson <UnityUserData>(userStr); UnityUser user = new UnityUser(userData.AccessToken, userData.DisplayName, userData.UserId); publisher = new MarkerPublisher(); publisher.UpdateProject(project, user); }
public void UpdateProject(UnityProject currentProject, UnityUser user) { m_MarkerController.LoadingComplete = false; try { m_SyncMarkerStore?.UpdateProject(currentProject, user); } catch (SyncModelNotSupportedException ex) { m_MarkerController.UnsupportedMessage = "QR Markers unsupported by Host."; Debug.LogError($"SyncMarkers not supported by the server: {ex}"); } catch (Exception ex) { m_MarkerController.UnsupportedMessage = $"QR Markers failed to connect to Host: {ex.Message}"; Debug.LogError($"Exception thrown creating publisher client: {ex}"); } }
public void UpdateProject(UnityProject currentProject, UnityUser user) { if (currentProject.ProjectId == m_CurrentProject && currentProject.Host.ServerId == m_CurrentServer) { return; } m_Markers.Clear(); OnUpdated?.Invoke(new Delta <Marker>()); if (currentProject == (UnityProject)Project.Empty) { m_CurrentProject = m_CurrentServer = null; m_Publisher.Disconnect(); return; } m_CurrentProject = currentProject.ProjectId; m_CurrentServer = currentProject.Host.ServerId; m_Publisher.UpdateProject(currentProject, user); }
async Task <IEnumerable <SyncManifest> > LoadStreamSourcesAsync(UnityProject project) { var folder = m_Storage.GetProjectFolder(project); var result = new List <SyncManifest>(); foreach (var manifestFile in Directory.EnumerateFiles(folder, "*.manifest", SearchOption.AllDirectories)) { if (manifestFile == null) { continue; } var syncManifest = await PlayerFile.LoadManifestAsync(manifestFile); result.Add(syncManifest); } return(result); }
async Task DownloadManifestDiff(IPlayerClient client, SyncManifest oldManifest, SyncManifest newManifest, UnityProject project, string sourceId, PlayerStorage storage) { List <ManifestEntry> entries; if (oldManifest == null) { var content = newManifest.Content; entries = content.Values.ToList(); } else { ParseManifest(oldManifest.Content, newManifest.Content, out var modified, out var deleted); entries = modified.ToList(); // TODO Handle deleted models } var destinationFolder = storage.GetSourceProjectFolder(project, sourceId); var downloadFolder = Path.Combine(destinationFolder, k_TemporaryFolder); var progress = new ProjectManagerInternal.DownloadProgress(); progress.SetTotal(entries.Count); var tasks = entries.Select(entry => ProjectManagerInternal.DownloadAndStore(client, sourceId, entry, newManifest, downloadFolder, progress)).ToList(); // Don't forget the manifest itself tasks.Add(ProjectManagerInternal.RunFileIOOperation(() => { newManifest.EditorSave(downloadFolder); return(Task.CompletedTask); })); // Wait for all download to finish var task = Task.WhenAll(tasks); while (!task.IsCompleted) { lock (m_ProgressLock) { m_Progress = progress.percent; } await Task.Delay(200); } // TODO Handle errors in the DownloadProgress // Backward compatibility with local viewer cache that have SyncPrefab as a file. var prefabPath = SyncInstance.GetPrefabPath(downloadFolder); if (prefabPath == null) { var prefabName = sourceId + SyncPrefab.Extension; var syncPrefab = SyncInstance.GenerateSyncPrefabFromManifest(prefabName, downloadFolder, newManifest); var fullPath = Path.Combine(downloadFolder, prefabName); PlayerFile.Save(syncPrefab, fullPath); } // Delete SyncInstances since they cannot be imported var instancesFolder = Path.Combine(downloadFolder, "instances"); if (Directory.Exists(instancesFolder)) { Directory.Delete(instancesFolder, true); } // Move all content from temporary download folder to the final destination MoveDirectory(downloadFolder, destinationFolder); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var project = ScriptableObject.CreateInstance <ProjectSO>(); project.project = new ProjectDummy(); var realProject = property.serializedObject.targetObject as UIStateManager; if (realProject && label.text.Equals("Active Project")) { try { UnityProject unityProject = realProject.projectStateData.activeProject; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; project.project.Source = unityProject.Source; m_valid = true; } catch (Exception) { m_valid = false; } } else { if (realProject && label.text.StartsWith("Element")) { try { var index = int.Parse(label.text.Split(' ')[1]); UnityProject unityProject = realProject.sessionStateData.sessionState.projects[index]; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; project.project.Source = unityProject.Source; m_valid = true; } catch (Exception) { m_valid = false; } } } SerializedObject serializedObject = new UnityEditor.SerializedObject(project); SerializedProperty serializedPropertyProject = serializedObject.FindProperty("project"); EditorGUI.BeginProperty(position, label, property); EditorGUI.LabelField(new Rect(position.x, position.y, position.width, 16), label); if (m_valid) { var nameRect = new Rect(position.x, position.y + 18, position.width, 16); var projecIdRect = new Rect(position.x, position.y + 36, position.width, 16); var hostRect = new Rect(position.x, position.y + 54, position.width, 16); EditorGUI.indentLevel++; EditorGUI.PropertyField(nameRect, serializedPropertyProject.FindPropertyRelative("Name")); EditorGUI.PropertyField(projecIdRect, serializedPropertyProject.FindPropertyRelative("ProjectId")); var hostProperty = serializedPropertyProject.FindPropertyRelative("Host"); if (hostProperty != null) { EditorGUI.PropertyField(hostRect, serializedPropertyProject.FindPropertyRelative("Host")); } EditorGUI.indentLevel--; } EditorGUI.EndProperty(); ScriptableObject.DestroyImmediate(project); }
bool ReadOnly(UnityProject project) { // Check if there's publish permission in the access set, if so than mark as not read only. return(!project.AccessSet.Contains(UnityProject.AccessType.Publish)); }
public string Generate(IMarker marker, UnityProject project) { return(GetMarkerURI(marker.Id.ToString(), m_MarkerController.ProjectLinkSource.BaseURI)); }
public Project(UnityProject unityProject) { m_UnityProject = unityProject; }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var project = ScriptableObject.CreateInstance <ProjectSO>(); project.project = new ProjectDummy(); if (SessionStateContext <UnityUser, LinkPermission> .current != null) { using (var sessionRoomsSelector = UISelectorFactory.createSelector <ProjectRoom[]>(SessionStateContext <UnityUser, LinkPermission> .current, nameof(ISessionStateDataProvider <UnityUser, LinkPermission> .rooms))) { var realProject = property.serializedObject.targetObject as UIStateManager; if (realProject && label.text.Equals("Active Project")) { try { UnityProject unityProject = realProject.projectSettingStateData.activeProject; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; m_valid = true; } catch (Exception) { m_valid = false; } } else { if (realProject && label.text.StartsWith("Element")) { try { var index = int.Parse(label.text.Split(' ')[1]); var projectRoom = (ProjectRoom)sessionRoomsSelector.GetValue()[index]; UnityProject unityProject = projectRoom.project; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; m_valid = true; } catch (Exception) { m_valid = false; } } } } } SerializedObject serializedObject = new UnityEditor.SerializedObject(project); SerializedProperty serializedPropertyProject = serializedObject.FindProperty("project"); EditorGUI.BeginProperty(position, label, property); EditorGUI.LabelField(new Rect(position.x, position.y, position.width, 16), label); if (m_valid) { var nameRect = new Rect(position.x, position.y + 18, position.width, 16); var projecIdRect = new Rect(position.x, position.y + 36, position.width, 16); var hostRect = new Rect(position.x, position.y + 54, position.width, 16); EditorGUI.indentLevel++; EditorGUI.PropertyField(nameRect, serializedPropertyProject.FindPropertyRelative("Name")); EditorGUI.PropertyField(projecIdRect, serializedPropertyProject.FindPropertyRelative("ProjectId")); var hostProperty = serializedPropertyProject.FindPropertyRelative("Host"); if (hostProperty != null) { EditorGUI.PropertyField(hostRect, serializedPropertyProject.FindPropertyRelative("Host")); } EditorGUI.indentLevel--; } EditorGUI.EndProperty(); ScriptableObject.DestroyImmediate(project); }