Пример #1
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));
        }
        public static void SetUser(UnityUser user, IUpdateDelegate updater, IProjectProvider client, PlayerStorage storage) // TODO Rename or move into a ProjectLister manager class
        {
            // ProjectLister
            s_ProjectListerSettings = new ProjectListerSettings();
            s_ProjectListerSettings.OnProjectsRefreshCompleted = new ProjectListerSettings.ProjectsEvents();
            s_ProjectListerSettings.OnProjectsRefreshStarted   = new UnityEvent();
            s_ProjectListerSettings.OnProjectsRefreshCompleted.AddListener((projects) =>
            {
                projectsRefreshCompleted?.Invoke(projects);
            });

            s_ProjectLister = new ProjectsLister(s_ProjectListerSettings)
            {
                client = client
            };
            s_ProjectLister.SetUpdateDelegate(updater);

            s_ProjectDeleterSettings = new ProjectDeleterSettings();
            s_ProjectDeleterSettings.projectLocalDataDeleted      += OnProjectLocalDataDeleted;
            s_ProjectDeleterSettings.projectDeleteCanceled        += OnProjectDeleteCanceled;
            s_ProjectDeleterSettings.projectDeleteProgressChanged += OnProjectDeleteProgressChanged;
            s_ProjectDeleter = new ProjectDeleter(s_ProjectDeleterSettings, storage)
            {
                client = client
            };
            s_ProjectDeleter.SetUpdateDelegate(updater);


            s_ProjectDownloaderSettings = new ProjectDownloaderSettings();
            s_ProjectDownloaderSettings.projectDataDownloaded          += OnProjectDataDownloaded;
            s_ProjectDownloaderSettings.projectDownloadCanceled        += OnProjectDownloadCanceled;
            s_ProjectDownloaderSettings.projectDownloadProgressChanged += OnProjectDownloadProgressChanged;
            s_ProjectDownloader = new ProjectDownloader(s_ProjectDownloaderSettings, updater, user, storage);
        }
        internal void OnCompletedUnityUserTask(Task <UnityUser> task)
        {
            if (task.IsFaulted)
            {
                Debug.LogError($"Get User Info failed: {task.Exception}");
                authenticationFailed?.Invoke(task.Exception.ToString());
            }
            else
            {
                var user = task.Result;

                if (DateTime.UtcNow > user.SessionExpiry - s_SessionExpiryThreshold &&
                    Application.internetReachability != NetworkReachability.NotReachable)
                {
                    Debug.LogWarning($"User token about to expire, force login");
                    authenticationFailed?.Invoke("Token expired");
                }
                else
                {
                    m_User = user;
                    userLoggedIn?.Invoke(m_User);
                }
            }
            m_UnityUserTask = null;
        }
 public void InstantiateAndStart(ActorSystemSetup actorSystemSetup,
                                 IExposedPropertyTable resolver = null,
                                 UnityProject unityProject      = null,
                                 UnityUser unityUser            = null)
 {
     Hook.InstantiateAndStart(actorSystemSetup, resolver, unityProject, unityUser);
 }
        public void OpenProject(Project project, UnityUser user, AccessToken accessToken, bool isRestarting, Action <BridgeActor.Proxy> settingsOverrideAction)
        {
            if (isRestarting)
            {
                Restart();
            }
            else
            {
                Instantiate(project, user, accessToken,
                            bridge =>
                {
                    var viewerBridge = Hook.GetActor <ViewerBridgeActor>();
                    ViewerBridge     = new ViewerBridgeActor.Proxy(viewerBridge);
                    settingsOverrideAction(bridge);
                },
                            runner =>
                {
                    var bridge = runner.GetActor <ViewerBridgeActor>();
                    bridge.SetActorRunner(Hook.Systems.ActorRunner);
                });
            }

            ActorSystemStarting?.Invoke(Bridge, isRestarting);
            StartActorSystem();
            ActorSystemStarted?.Invoke(Bridge);

            StreamingStarting?.Invoke(Bridge);
            Bridge.SendUpdateManifests();
            StreamingStarted?.Invoke(Bridge);
        }
Пример #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 void AssignUserAndRegister(UnityUser relevantUser, int order, int totalNumIcons)
 {
     this.IconOrder      = order;
     this.IconCountTotal = totalNumIcons;
     startDelay         += order * OrderOffset;
     startEvent.id       = relevantUser.Id.ToString();
     CallRegisterForAnimation();
 }
 public void OnUserLogin(UnityUser user)
 {
     if (user != null)
     {
         m_exceptionExtraInfo.userId = user.UserId;
         onExceptionExtraInfoChanged?.Invoke(JsonUtility.ToJson(m_exceptionExtraInfo));
     }
 }
Пример #9
0
    private void InstantiateRelevantUser(Transform parent, UnityUser user, int scoreDelta, int order = 1, int total = 1)
    {
        var relUser = Instantiate(PlayerIconPrefab, parent);

        relUser.transform.localScale    = new Vector3(1f, 1f, 1f);
        relUser.transform.localPosition = Vector3.zero;

        //relUser.GetComponent<RelevantUserPopulator>().Populate(user, true, scoreDelta, order, total);
    }
        public ProjectDownloader(ProjectDownloaderSettings settings, IUpdateDelegate updateDelegate, UnityUser user, PlayerStorage playerStorage)
        {
            m_Settings       = settings;
            m_PlayerStorage  = playerStorage;
            m_UpdateDelegate = updateDelegate;
            m_User           = user;

            SetUpdateDelegate(updateDelegate);
        }
Пример #11
0
    private void InstantiateRelevantUser(UnityUser user, bool showName = true, int scoreDelta = 0, int order = 1, int total = 1)
    {
        GameObject playerIconPrefab = PrefabLookup.Singleton.Mapping[PrefabLookup.PrefabType.UserIcon];
        var        relUser          = Instantiate(playerIconPrefab, DropZone.transform);

        relUser.transform.localScale    = new Vector3(1f, 1f, 1f);
        relUser.transform.localPosition = Vector3.zero;

        relUser.GetComponent <RelevantUserPopulator>().Populate(user, showName, scoreDelta, order, total);
    }
        public ReflectClient(IUpdateDelegate updateDelegate, UnityUser user, PlayerStorage storage, UnityProject project)
        {
            m_Project = project;
            m_User    = user;
            m_Storage = storage;

            InitializeProjectClientListener();

            updateDelegate.update += OnUpdate;
        }
Пример #13
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();
        }
Пример #14
0
 public SessionState(LoginState loggedState, UnityUser user, ProjectRoom[] rooms)
 {
     this.loggedState      = loggedState;
     this.user             = user;
     this.rooms            = rooms;
     userIdentity          = default;
     linkShareLoggedOut    = false;
     linkSharePermission   = LinkPermission.Private;
     isInPrivateMode       = false;
     collaborationState    = CollaborationState.Disconnected;
     linkSharedProjectRoom = default;
 }
        public void SetUser(UnityUser user)
        {
            if (user == null || string.IsNullOrEmpty(user.UserId))
            {
                Debug.LogError("Invalid User");
            }

            // Client
            m_AuthClient = new AuthClient(user);

            ReflectProjectsManager.Init(user, this, m_AuthClient);
        }
Пример #16
0
 public void Populate(UnityUser user, bool showName, int scoreDelta = 0, int order = 1, int total = 1)
 {
     gameObject.GetComponent <MoveUserIconAnimation>().AssignUserAndRegister(user, order, total);
     gameObject.GetComponent <ShowScoreDeltaAnimation>().AssignUserAndRegister(scoreDelta);
     TargetLocation.sprite = user.SelfPortraitSprite;
     Colorizer.UpdateValue(new List <Guid>()
     {
         user.Id
     });
     DisplayName.text = user.DisplayName;
     DisplayName.transform.parent.gameObject.SetActive(showName);
 }
Пример #17
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);
        }
Пример #18
0
        public void SetUser(UnityUser user)
        {
            if (user == null || string.IsNullOrEmpty(user.UserId))
            {
                Debug.LogError("Invalid User");
            }

            // Storage
            var storage = new PlayerStorage(ProjectServer.ProjectDataPath, true, false);

            // Client
            m_AuthClient = new AuthClient(user, storage);

            ReflectPipelineFactory.SetUser(user, this, m_AuthClient, storage);
        }
Пример #19
0
 public UISessionStateData(LoginState loggedState, UnityUser user, ProjectRoom[] rooms)
 {
     this.loggedState        = loggedState;
     this.user               = user;
     this.rooms              = rooms.Cast <IProjectRoom>().ToArray();
     projectListState        = loggedState == LoginState.LoggedIn ? ProjectListState.AwaitingUserData : ProjectListState.AwaitingUser;
     userIdentity            = new UserIdentity();
     linkShareLoggedOut      = false;
     isOpenWithLinkSharing   = false;
     linkSharePermission     = LinkPermission.Private;
     isInPrivateMode         = false;
     cachedLinkToken         = string.Empty;
     collaborationState      = CollaborationState.Disconnected;
     linkSharedProjectRoom   = default;
     networkReachability     = default;
     projectServerConnection = true;
 }
Пример #20
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 static void Init(UnityUser user, IUpdateDelegate updater, IProjectProvider client) // TODO Rename or move into a ProjectLister manager class
        {
            if (s_ProjectLister != null || s_ProjectsManager != null)
            {
                Dispose();
            }

            // ProjectLister
            s_ProjectLister = new ProjectsLister(client);
            s_ProjectLister.projectListingCompleted += OnProjectListingCompleted;
            s_ProjectLister.projectListingException += OnProjectListingException;

            s_ProjectLister.SetUpdateDelegate(updater);

            s_ProjectsManager = new ProjectsManager(updater, user, Storage.main);
            s_ProjectsManager.projectStatusChanged           += OnProjectStatusChanged;
            s_ProjectsManager.projectDownloadProgressChanged += OnProjectDownloadProgressChanged;
            s_ProjectsManager.projectDeleteProgressChanged   += OnProjectDeleteProgressChanged;
        }
        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);
        }
        // This method is called from the LoginManager component inside the sample Scene.
        // This is the same LoginManager used in the Reflect Viewers.
        // While in the Editor, the user is the current Unity account logged into the Unity Editor.
        // Once logged in, we can list available projects by using a ProjectLister with an AuthClient.
        public void OnUserLoggedIn(UnityUser user)
        {
            m_State = State.ListingProjects;

            // A storage is required to specify where data are saved and cached
            m_Storage = new PlayerStorage(Path.Combine(Application.dataPath, ".ReflectSamplesTemp"), false, false);

            // Create a Authentication client from the current Unity user
            m_AuthClient = new AuthClient(user, m_Storage);

            var projectListerSettings = new ProjectListerSettings
            {
                OnProjectsRefreshCompleted = new ProjectListerSettings.ProjectsEvents(),
                OnProjectsRefreshStarted   = new UnityEvent()
            };

            projectListerSettings.OnProjectsRefreshCompleted.AddListener((projects) =>
            {
                // This is the callback for when all projects are done listing.
                // For this sample, we populate a list that will be displayed as UI in the OnGUI method.
                m_State             = State.ProjectListed;
                m_AvailableProjects = projects;
            });

            // Create a ProjectLister to enumerate all available projects in the cloud for this user
            m_ProjectsLister = new ProjectsLister(projectListerSettings)
            {
                client = m_AuthClient
            };

            // Since ProjectLister runs in another thread, make sure to set the UpdateDelegate to be able to collect received data into the main thread.
            m_ProjectsLister.SetUpdateDelegate(this);

            // Start the ProjectLister thread. OnProjectsRefreshCompleted callback will be called when all projects are done listing.
            m_ProjectsLister.Run();
        }
Пример #24
0
 void OnUserChanged(UnityUser newData)
 {
     m_CurrentUserId = newData.UserId;
 }
 public AuthClient(UnityUser user, PlayerStorage storage)
 {
     this.user    = user;
     this.storage = storage;
 }
Пример #26
0
 public SessionState(LoginState loggedState, UnityUser user, Project[] projects)
 {
     this.loggedState = loggedState;
     this.user        = user;
     this.projects    = projects;
 }