Exemple #1
0
        public string Generate(IMarker marker, UnityProject project)
        {
            RawMarkerBarcodeData data = new RawMarkerBarcodeData();

            data.marker = (Marker)marker;
            return(data.Serialize());
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
 }
Exemple #6
0
        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());
        }
Exemple #8
0
        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());
        }
Exemple #12
0
        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();
        }
Exemple #13
0
        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);
        }
Exemple #14
0
 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));
 }
Exemple #21
0
 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);
    }