private void B_Clicked(object sender, EventArgs e)
        {
            var config = new TrackerConfig();

            config.AppVersion     = "1.0.0.0";
            config.TrackingId     = "UA-11111111-1";
            config.AppId          = "AppID";
            config.AppName        = "TEST";
            config.AppInstallerId = Guid.NewGuid().ToString();

            config.Debug = true;

            TrackerFactory.Config = config;


            Tracker tracker;

            try
            {
                tracker = new TrackerFactory().GetTracker();
                tracker.SendView("MainPage");
            }
            catch (Exception ex)
            {
                int a = 5;
            }
        }
        // Handles OSC messages
        private void MessageReceived(object sender, OscMessageReceivedEventArgs oscMessageReceivedEventArgs)
        {
            OscMessage message = oscMessageReceivedEventArgs.Message;

            // Read the address part by part
            string[] address = message.Address.TrimStart('/').Split('/');

            // Get the display via the address
            TrackerConfig tracker = PlatformConfig.current.trackers.Find(i => i.id == address[0]);

            // For the type of the message
            if (tracker != null)
            {
                foreach (var button in tracker.json["buttons"].Children)
                {
                    if (button["id"].Value != address[2])
                    {
                        continue;
                    }

                    if (tracker.json["mapping"].Count == 0)
                    {
                        _input[button["mapping"].Value] = message.Data[0];
                    }
                    else
                    {
                        foreach (var map in button["mapping"].Children)
                        {
                            _input[map.Value] = message.Data[0];
                        }
                    }
                }
            }
        }
        private static void Main(string[] args)
        {
            var config = new TrackerConfig();

            config.AppVersion = "1";
            config.TrackingId = "2";
            config.Debug      = true;

            var x = new TrackerFactory(config);

            var y = x.GetTracker();

            y.SendView("Main");


            var trackerManager = new TrackerManager(new PlatformInfoProvider()
            {
                AnonymousClientId  = "12321312",
                ScreenResolution   = new Dimensions(1920, 1080),
                UserAgent          = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko",
                UserLanguage       = "en-us",
                ViewPortResolution = new Dimensions(1920, 1080)
            });

            var tracker = trackerManager.GetTracker("UA-39959863-1"); // saves as default

            tracker.AppName    = "My app";
            tracker.AppVersion = "1.0.0.0";

            // Log something to GA
            tracker.SendView("MainPage");

            tracker.SendEvent("1", "1");
        }
Example #4
0
        public void Init()
        {
            startId = new MockRiderIdUnit("StartId");
            endId   = new MockRiderIdUnit("EndId");
            timer   = new MockTimingUnit();

            source = new CancellationTokenSource();

            TrackerConfig config = new TrackerConfig
            {
                EndMatchTimeout   = 20,
                StartTimingGateId = 0,
                EndTimingGateId   = 1
            };

            //riders are addded in the SimulateRace method
            tracker = new RaceTracker(timer, startId, endId, config, new List <Rider>());

            subject = new RaceManager();
            subject.Start(tracker, new List <IDisplayUnit> {
                timer
            });

            SimulateRace();

            //wait for the tracker to process all events
            Thread.Sleep(2000);

            subject.Stop();
        }
 /// <summary>
 /// Constructor for general use. Riders will be collected from events
 /// </summary>
 public RaceSummary(List <RaceEvent> events, TrackerConfig config, string startId, string endId)
 {
     Events  = events;
     Config  = config;
     StartId = startId;
     EndId   = endId;
 }
        private Tracker CreateTracker(TrackerConfig trackerConfig)
        {
            Type    trackerClass = Type.GetType(trackerConfig.ClassName());
            Tracker tracker      = (Tracker)trackerClass.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });

            tracker.SetEnv(defaultEnvironment);
            tracker.SetCookies(trackerConfig.CookiesList());
            return(tracker);
        }
        /// <summary>
        /// Sends the holoLen's transform to the master.
        /// </summary>
        public static void SendTransform(TrackerConfig tracker, TransformConfig transform)
        {
            Transmitter transmitter = GetTransmitter(((OSCTrackerData)tracker.data).port);

            // Send the transform data
            Vector3 rotate = transform.rotate.eulerAngles;

            transmitter.SendOSC("/" + tracker.id + "/transform",
                                transform.translate.x, transform.translate.y, transform.translate.z, rotate.x, rotate.y, rotate.z, 1f, 1f, 1f);
        }
Example #8
0
        public void RaceSummary_ReadAndWrite_ShouldBeSymmetric()
        {
            Beacon martijnBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 1 }, 2);

            martijnBeacon.Rssi          = 3;
            martijnBeacon.MeasuredPower = 4;

            Beacon bertBeacon = new Beacon(new byte[] { 0, 0, 0, 0, 0, 5 }, 6);

            bertBeacon.Rssi          = 7;
            bertBeacon.MeasuredPower = 8;

            IdEvent     entered = new IdEvent(new DateTime(2000, 1, 1), new Rider("Martijn", martijnBeacon), "StartId", Direction.Enter);
            TimingEvent timing  = new TimingEvent(new DateTime(2000, 1, 1), new Rider("Bert", bertBeacon), 100, 1);

            TrackerConfig config = new TrackerConfig
            {
                EndMatchTimeout   = 9,
                StartTimingGateId = 10,
                EndTimingGateId   = 11
            };

            RaceSummary subject = new RaceSummary(new List <RaceEvent> {
                entered, timing
            }, config, "StartId", "EndId");

            MemoryStream stream = new MemoryStream();

            subject.WriteSummary(stream);

            stream.Seek(0, SeekOrigin.Begin);

            RaceSummary parsed = RaceSummary.ReadSummary(stream);

            foreach ((Rider r1, Rider r2) in subject.Riders.Zip(parsed.Riders))
            {
                Assert.IsTrue(CompareRiders(r1, r2));
            }

            CollectionAssert.AreEqual(subject.Events.Select(e => e.EventId).ToList(), parsed.Events.Select(e => e.EventId).ToList());
            CollectionAssert.AreEqual(subject.Events.Select(e => e.GetType()).ToList(), parsed.Events.Select(e => e.GetType()).ToList());

            foreach ((RaceEvent e1, RaceEvent e2) in subject.Events.Zip(parsed.Events))
            {
                Assert.IsTrue(CompareRiders(e1.Rider, e2.Rider));
            }

            Assert.AreEqual("StartId", parsed.StartId);
            Assert.AreEqual("EndId", parsed.EndId);

            Assert.AreEqual(config.StartTimingGateId, parsed.Config.StartTimingGateId);
            Assert.AreEqual(config.EndTimingGateId, parsed.Config.EndTimingGateId);
            Assert.AreEqual(config.EndMatchTimeout, parsed.Config.EndMatchTimeout);
        }
Example #9
0
        public InputHandler(TrackerConfig tracker, TrackerHandedness handedness)
        {
            _tracker    = tracker;
            _handedness = handedness;

#if UNITY_WSA
            _gestureRecognizer = new GestureRecognizer();
            GestureSettings gestureMask = GetGestureMask(tracker);

            // Using gestures
            if (gestureMask != GestureSettings.None)
            {
                // Add tap to recognisor
                if (gestureMask.HasFlag(GestureSettings.Tap) || gestureMask.HasFlag(GestureSettings.DoubleTap))
                {
                    _gestureRecognizer.Tapped += GestureTapped;
                }

                // Add hold to recognisor
                if (gestureMask.HasFlag(GestureSettings.Hold))
                {
                    _gestureRecognizer.HoldStarted   += GestureHoldStarted;
                    _gestureRecognizer.HoldCompleted += GestureHoldCompleted;
                    _gestureRecognizer.HoldCanceled  += GestureHoldCanceled;
                }

                // Add manipulation to recognisor
                if (gestureMask.HasFlag(GestureSettings.ManipulationTranslate))
                {
                    _gestureRecognizer.ManipulationStarted   += GestureManipulationStarted;
                    _gestureRecognizer.ManipulationCompleted += GestureManipulationCompleted;
                    _gestureRecognizer.ManipulationCanceled  += GestureManipulationCanceled;
                    _gestureRecognizer.ManipulationUpdated   += GestureManipulationUpdated;;
                }

                // Add navigation to recognisor
                if (gestureMask.HasFlag(GestureSettings.NavigationX) || gestureMask.HasFlag(GestureSettings.NavigationY) ||
                    gestureMask.HasFlag(GestureSettings.NavigationZ))
                {
                    _gestureRecognizer.NavigationStarted   += GestureNavigationStarted;
                    _gestureRecognizer.NavigationCompleted += GestureNavigationCompleted;
                    _gestureRecognizer.NavigationCanceled  += GestureNavigationCanceled;
                    _gestureRecognizer.NavigationUpdated   += GestureNavigationUpdated;;
                }

                _gestureRecognizer.SetRecognizableGestures(gestureMask);
                _gestureRecognizer.StartCapturingGestures();
            }
#endif

            // Using speech recognition
            _speechRecognizer = new DictationRecognizer();
            _speechRecognizer.DictationResult += SpeechRecognition;
        }
Example #10
0
        public void TestMethod1()
        {
            var config = new TrackerConfig();

            config.AppVersion = "1";
            config.TrackingId = "2";
            config.Debug      = true;

            var x = new TrackerFactory(config);

            var y = x.GetTracker();

            y.SendView("Main");
        }
Example #11
0
        // Get the gesture mask for a tracker
        private GestureSettings GetGestureMask(TrackerConfig tracker)
        {
            GestureSettings gestureMask = GestureSettings.None;

            // Check for gestures
            foreach (var axis in tracker.json["buttons"].Children)
            {
                switch (axis["id"])
                {
                case "tap":
                    gestureMask |= GestureSettings.Tap;
                    break;

                case "double_tap":
                    gestureMask |= GestureSettings.DoubleTap;
                    break;

                case "hold":
                    gestureMask |= GestureSettings.Hold;
                    break;

                case "manipulation_x":
                case "manipulation_y":
                case "manipulation_z":
                    gestureMask |= GestureSettings.ManipulationTranslate;
                    break;

                case "navigation_x":
                    gestureMask |= GestureSettings.NavigationX;
                    break;

                case "navigation_y":
                    gestureMask |= GestureSettings.NavigationY;
                    break;

                case "navigation_z":
                    gestureMask |= GestureSettings.NavigationZ;
                    break;
                }
            }

            return(gestureMask);
        }
Example #12
0
        public void Init()
        {
            startId = new MockRiderIdUnit("StartId");
            endId   = new MockRiderIdUnit("EndId");
            timer   = new MockTimingUnit();

            source = new CancellationTokenSource();

            TrackerConfig config = new TrackerConfig
            {
                EndMatchTimeout   = 10,
                StartTimingGateId = 0,
                EndTimingGateId   = 1
            };

            subject = new RaceTracker(timer, startId, endId, config, new List <Rider> {
            });

            race = subject.Run(source.Token);
        }
Example #13
0
        public IEnumerator OnAfterGameLoad()
        {
            TrackerConfig defaultTrackerConfig = new TrackerConfig();

            defaultTrackerConfig.setStorageType(TrackerConfig.StorageType.LOCAL);
            defaultTrackerConfig.setTraceFormat(TrackerConfig.TraceFormat.XAPI);
            defaultTrackerConfig.setRawCopy(true);
            defaultTrackerConfig.setDebug(true);

            Debug.Log("[SIMVA] Starting...");
            if (SimvaConf.Local == null)
            {
                SimvaConf.Local = new SimvaConf();
                yield return(StartCoroutine(SimvaConf.Local.LoadAsync()));

                Debug.Log("[SIMVA] Conf Loaded...");
            }

            if (!IsEnabled)
            {
                Debug.Log("[SIMVA] Study is not set! Stopping...");
                yield return(StartTracker(defaultTrackerConfig, null));

                yield break;
            }
            else if (IsActive)
            {
                Debug.Log("[SIMVA] Simva is already started...");
                // No need to restart
                yield break;
            }
            else
            {
                Debug.Log("[SIMVA] Setting current target to Simva.Login...");
                savedGameTarget = SceneManager.GetActiveScene().name;
                LoadManager.Instance.AutoStart = false;
                yield return(RunTarget("Simva.Login"));

                yield return(OnGameReady());
            }
        }
Example #14
0
        public IEnumerator LaunchActivity(string activityId)
        {
            if (activityId == null || gameplay)
            {
                if (backupOperation != null && !backupOperation.IsCompletedSuccessfully)
                {
                    AbortQuit();
                    yield return(RunTarget("Simva.Backup"));

                    yield return(new WaitUntil(() => afterBackup));
                }

                //yield return RunTarget("Simva.End");
                allowedToQuit = true;
                schedule      = null;
            }
            else
            {
                Activity activity = GetActivity(activityId);
                if (activity != null)
                {
                    AbortQuit();
                    Debug.Log("[SIMVA] Schedule: " + activity.Type + ". Name: " + activity.Name + " activityId " + activityId);
                    switch (activity.Type)
                    {
                    case "limesurvey":
                        Debug.Log("[SIMVA] Starting Survey...");
                        yield return(RunTarget("Simva.Survey"));

                        break;

                    case "gameplay":
                    default:
                        var trackerConfig = new TrackerConfig();

                        trackerConfig.setStorageType(TrackerConfig.StorageType.LOCAL);
                        trackerConfig.setTraceFormat(TrackerConfig.TraceFormat.XAPI);
                        trackerConfig.setRawCopy(true);
                        trackerConfig.setDebug(true);

                        gameplay = true;

                        if (ActivityHasDetails(activity, "realtime", "trace_storage"))
                        {
                            // Realtime
                            trackerConfig.setStorageType(TrackerConfig.StorageType.NET);
                            trackerConfig.setHost(simvaController.SimvaConf.URL);
                            trackerConfig.setBasePath("");
                            trackerConfig.setLoginEndpoint("/users/login");
                            trackerConfig.setStartEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackingCode(activityId);
                            trackerConfig.setUseBearerOnTrackEndpoint(true);
                            Debug.Log("TrackingCode: " + activity.Id + " settings " + trackerConfig.getTrackingCode());
                        }

                        if (ActivityHasDetails(activity, "backup"))
                        {
                            // Local
                            trackerConfig.setRawCopy(true);
                        }

                        if (ActivityHasDetails(activity, "realtime", "trace_storage", "backup"))
                        {
                            SimvaBridge = new SimvaBridge(API.ApiClient);
                            Debug.Log("[SIMVA] Starting tracker...");
                            yield return(StartTracker(trackerConfig, auth.Username + "_" + activityId + "_backup.log", SimvaBridge));
                        }

                        DestroyImmediate(runner.gameObject);
                        SceneManager.UnloadSceneAsync("Simva");

                        Debug.Log("[SIMVA] Starting Gameplay...");
                        LoadManager.Instance.LoadScene("MenuScene");
                        break;
                    }
                }
            }
        }
Example #15
0
        private void PrepareTracker(TrackerConfig config)
        {
            string domain = "";
            int    port   = 80;
            bool   secure = false;

            try
            {
                if (config.getHost() != "")
                {
                    string[] splitted = config.getHost().Split('/');

                    if (splitted.Length > 1)
                    {
                        string[] host_splitted = splitted[2].Split(':');
                        if (host_splitted.Length > 0)
                        {
                            domain = host_splitted[0];
                            port   = (host_splitted.Length > 1) ? int.Parse(host_splitted[1]) : (splitted[0] == "https:" ? 443 : 80);
                            secure = splitted[0] == "https:";
                        }
                    }
                }
                else
                {
                    config.setHost("localhost");
                }
            }
            catch (System.Exception e)
            {
                Debug.Log("Tracker error: Host bad format");
            }

            TrackerAsset.TraceFormats format;
            switch (config.getTraceFormat())
            {
            case TrackerConfig.TraceFormat.XAPI:
                format = TrackerAsset.TraceFormats.xapi;
                break;

            default:
                format = TrackerAsset.TraceFormats.csv;
                break;
            }

            TrackerAsset.StorageTypes storage;
            switch (config.getStorageType())
            {
            case TrackerConfig.StorageType.NET:
                storage = TrackerAsset.StorageTypes.net;
                break;

            default:
                storage = TrackerAsset.StorageTypes.local;
                break;
            }

            TrackerAssetSettings tracker_settings = new TrackerAssetSettings()
            {
                Host          = domain,
                TrackingCode  = config.getTrackingCode(),
                BasePath      = "/api",
                Port          = port,
                Secure        = secure,
                StorageType   = storage,
                TraceFormat   = format,
                BackupStorage = config.getRawCopy()
            };

            TrackerAsset.Instance.Bridge   = new UnityBridge();
            TrackerAsset.Instance.Settings = tracker_settings;

            /* TODO: login disabled
             * if (!String.IsNullOrEmpty(username))
             *  TrackerAsset.Instance.Login(username, password);
             */

            TrackerAsset.Instance.Start();
            this.nextFlush = config.getFlushInterval();
        }
Example #16
0
 public TrackerConfigDataControl(AdventureDataControl adventureData)
 {
     this.trackerConfig = adventureData.getAdventureData().getTrackerConfig();
 }
Example #17
0
        public IEnumerator LaunchActivity(string activityId)
        {
            if (activityId == null)
            {
                if (backupOperation != null && !backupOperation.IsCompletedSuccessfully)
                {
                    Game.Instance.AbortQuit();
                    DisableAutoSave();
                    Game.Instance.RunTarget("Simva.Backup", null, false);
                }
                else
                {
                    DisableAutoSave();
                    Game.Instance.RunTarget("Simva.End", null, false);
                    schedule = null;
                }
            }
            else
            {
                Activity activity = GetActivity(activityId);

                if (activity != null)
                {
                    Game.Instance.AbortQuit();
                    Debug.Log("[SIMVA] Schedule: " + activity.Type + ". Name: " + activity.Name + " activityId " + activityId);
                    switch (activity.Type)
                    {
                    case "limesurvey":
                        Debug.Log("[SIMVA] Starting Survey...");
                        DisableAutoSave();
                        Game.Instance.RunTarget("Simva.Survey", null, false);
                        break;

                    case "gameplay":
                    default:
                        var trackerConfig = new TrackerConfig();

                        trackerConfig.setStorageType(TrackerConfig.StorageType.LOCAL);
                        trackerConfig.setTraceFormat(TrackerConfig.TraceFormat.XAPI);
                        trackerConfig.setRawCopy(true);
                        trackerConfig.setDebug(true);

                        if (ActivityHasDetails(activity, "realtime", "trace_storage"))
                        {
                            // Realtime
                            trackerConfig.setStorageType(TrackerConfig.StorageType.NET);
                            trackerConfig.setHost(simvaController.SimvaConf.URL);
                            trackerConfig.setBasePath("");
                            trackerConfig.setLoginEndpoint("/users/login");
                            trackerConfig.setStartEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackingCode(activityId);
                            trackerConfig.setUseBearerOnTrackEndpoint(true);
                            Debug.Log("TrackingCode: " + activity.Id + " settings " + trackerConfig.getTrackingCode());
                        }

                        if (ActivityHasDetails(activity, "backup"))
                        {
                            // Local
                            trackerConfig.setRawCopy(true);
                        }

                        if (ActivityHasDetails(activity, "realtime", "trace_storage", "backup"))
                        {
                            SimvaBridge = new SimvaBridge(API.ApiClient);
                            Debug.Log("[SIMVA] Starting tracker...");
                            yield return(StartCoroutine(AnalyticsExtension.Instance.StartTracker(trackerConfig, auth.Username + "_" + activityId + "_backup.log", SimvaBridge)));
                        }

                        Debug.Log("[SIMVA] Starting Gameplay...");
                        RestoreAutoSave();
                        Game.Instance.RunTarget(savedGameTarget, this);
                        if (Game.Instance.GameState.CheckFlag("DisclaimerEnabled") == FlagCondition.FLAG_ACTIVE)
                        {
                            Game.Instance.GameState.SetFlag("SeeingDisclaimer", FlagCondition.FLAG_ACTIVE);
                        }
                        break;
                    }
                }
            }
        }
 static GoogleAnalyticsImplementation()
 {
     StaticConfig = new TrackerConfig();
 }
        public IEnumerator LaunchActivity(string activityId)
        {
            if (activityId == null)
            {
                Game.Instance.RunTarget("Simva.End", null, false);
            }
            else
            {
                Activity activity = GetActivity(activityId);

                if (activity != null)
                {
                    Debug.Log("[SIMVA] Schedule: " + activity.Type + ". Name: " + activity.Name + " activityId " + activityId);
                    switch (activity.Type)
                    {
                    case "limesurvey":
                        Debug.Log("[SIMVA] Starting Survey...");
                        Game.Instance.RunTarget("Simva.Survey", null, false);
                        break;

                    case "gameplay":
                    default:
                        var trackerConfig = new TrackerConfig();

                        trackerConfig.setStorageType(TrackerConfig.StorageType.LOCAL);
                        trackerConfig.setTraceFormat(TrackerConfig.TraceFormat.XAPI);
                        trackerConfig.setRawCopy(true);
                        trackerConfig.setDebug(true);

                        if (ActivityHasDetails(activity, "realtime", "trace_storage"))
                        {
                            // Realtime
                            trackerConfig.setStorageType(TrackerConfig.StorageType.NET);
                            trackerConfig.setHost(simvaController.SimvaConf.URL);
                            trackerConfig.setBasePath("");
                            trackerConfig.setLoginEndpoint("/users/login");
                            trackerConfig.setStartEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackEndpoint("/activities/{0}/result");
                            trackerConfig.setTrackingCode(activityId);
                            trackerConfig.setUseBearerOnTrackEndpoint(true);
                            Debug.Log("TrackingCode: " + activity.Id + " settings " + trackerConfig.getTrackingCode());
                        }

                        if (ActivityHasDetails(activity, "backup"))
                        {
                            // Local
                            trackerConfig.setRawCopy(true);
                        }

                        if (ActivityHasDetails(activity, "realtime", "trace_storage", "backup"))
                        {
                            SimvaBridge = new SimvaBridge(API.ApiClient);
                            Debug.Log("[SIMVA] Starting tracker...");
                            yield return(StartCoroutine(AnalyticsExtension.Instance.StartTracker(trackerConfig, SimvaBridge)));
                        }

                        Debug.Log("[SIMVA] Starting Gameplay...");
                        Game.Instance.RunTarget(Game.Instance.GameState.InitialChapterTarget.getId(), this);
                        break;
                    }
                }
            }
        }
Example #20
0
 public InputHandler(TrackerConfig tracker) : this(tracker, TrackerHandedness.Left | TrackerHandedness.Right)
 {
 }
Example #21
0
        public IEnumerator StartTracker(TrackerConfig config, string backupFilename, IBridge bridge = null)
        {
            trackerConfig = config;
            string domain = "";
            int    port   = 80;
            bool   secure = false;

            Debug.Log("[ANALYTICS] Setting up tracker...");
            try
            {
                if (config.getHost() != "")
                {
                    string[] splitted = config.getHost().Split('/');

                    if (splitted.Length > 1)
                    {
                        string[] host_splitted = splitted[2].Split(':');
                        if (host_splitted.Length > 0)
                        {
                            domain = host_splitted[0];
                            port   = (host_splitted.Length > 1) ? int.Parse(host_splitted[1]) : (splitted[0] == "https:" ? 443 : 80);
                            secure = splitted[0] == "https:";
                        }
                    }
                }
                else
                {
                    config.setHost("localhost");
                }
                Debug.Log("[ANALYTICS] Config: " + JsonConvert.SerializeObject(config));
            }
            catch (System.Exception e)
            {
                Debug.Log("Tracker error: Host bad format");
            }

            TrackerAsset.TraceFormats format;
            switch (config.getTraceFormat())
            {
            case TrackerConfig.TraceFormat.XAPI:
                format = TrackerAsset.TraceFormats.xapi;
                break;

            default:
                format = TrackerAsset.TraceFormats.csv;
                break;
            }
            Debug.Log("[ANALYTICS] Format: " + format);

            TrackerAsset.StorageTypes storage;
            switch (config.getStorageType())
            {
            case TrackerConfig.StorageType.NET:
                storage = TrackerAsset.StorageTypes.net;
                break;

            default:
                storage = TrackerAsset.StorageTypes.local;
                break;
            }
            Debug.Log("[ANALYTICS] Storage: " + storage);

            TrackerAssetSettings tracker_settings = new TrackerAssetSettings()
            {
                Host                     = domain,
                TrackingCode             = config.getTrackingCode(),
                BasePath                 = trackerConfig.getBasePath() ?? "/api",
                LoginEndpoint            = trackerConfig.getLoginEndpoint() ?? "login",
                StartEndpoint            = trackerConfig.getStartEndpoint() ?? "proxy/gleaner/collector/start/{0}",
                TrackEndpoint            = trackerConfig.getStartEndpoint() ?? "proxy/gleaner/collector/track",
                Port                     = port,
                Secure                   = secure,
                StorageType              = storage,
                TraceFormat              = format,
                BackupStorage            = config.getRawCopy(),
                UseBearerOnTrackEndpoint = trackerConfig.getUseBearerOnTrackEndpoint()
            };

            if (!string.IsNullOrEmpty(backupFilename))
            {
                tracker_settings.BackupFile = backupFilename;
            }

            Debug.Log("[ANALYTICS] Settings: " + JsonConvert.SerializeObject(tracker_settings));
            TrackerAsset.Instance.StrictMode = false;
            TrackerAsset.Instance.Bridge     = bridge ?? new UnityBridge();
            TrackerAsset.Instance.Settings   = tracker_settings;
            TrackerAsset.Instance.StrictMode = false;

            var done = false;

            Debug.Log("[ANALYTICS] Starting tracker without login...");
            TrackerAsset.Instance.StartAsync(() => done = true);

            this.nextFlush = config.getFlushInterval();

            Debug.Log("[ANALYTICS] Waiting until start");
            yield return(new WaitUntil(() => done));

            Debug.Log("[ANALYTICS] Start done, result: " + TrackerAsset.Instance.Started);
        }
        /// <summary>
        /// Sends the holoLen's input to the master.
        /// </summary>
        public static void SendButton(TrackerConfig tracker, string button, object value)
        {
            Transmitter transmitter = GetTransmitter(((OSCTrackerData)tracker.data).port);

            transmitter.SendOSCX("/" + tracker.id + "/button/" + button, value);
        }