Пример #1
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;

            Tapstream.Create("sdktest", "YGP2pezGTI6ec48uti4o1w");

            Tapstream tracker = Tapstream.Instance;

            Event e = new Event("test-event", false);
            e.AddPair("player", "John Doe");
            e.AddPair("score", 5);
            tracker.FireEvent(e);

            e = new Event("test-event-oto", true);
            tracker.FireEvent(e);

            Hit h = new Hit("test-tracker");
            h.AddTag("tag1");
            h.AddTag("tag2");
            Task.Run(async () =>
            {
                Response response = await tracker.FireHitAsync(h);
                if (response.Status >= 200 && response.Status < 300)
                {
                    // Success
                }
                else
                {
                    // Error
                }
            });
        }
Пример #2
0
        /// <summary>
        /// Constructor for the Application object.
        /// </summary>
        public App()
        {
            // Global handler for uncaught exceptions.
            UnhandledException += Application_UnhandledException;

            // Standard XAML initialization
            InitializeComponent();

            Logging.SetLogger(new MyLogger());

            Config config = new Config();
            Tapstream.Create("sdktest", "YGP2pezGTI6ec48uti4o1w", config);

            Tapstream tracker = Tapstream.Instance;

            tracker.GetConversionData(new MyConversionListener());

            Event e = new Event("test-event", false);
            e.AddPair("player", "John Doe");
            e.AddPair("score", 5);
            tracker.FireEvent(e);

            e = new Event("test-event-oto-again", true);
            tracker.FireEvent(e);

            // Phone-specific initialization
            InitializePhoneApplication();

            // Language display initialization
            InitializeLanguage();

            // Show graphics profiling information while debugging.
            if (Debugger.IsAttached)
            {
                // Display the current frame rate counters.
                Application.Current.Host.Settings.EnableFrameRateCounter = true;

                // Show the areas of the app that are being redrawn in each frame.
                //Application.Current.Host.Settings.EnableRedrawRegions = true;

                // Enable non-production analysis visualization mode,
                // which shows areas of a page that are handed off to GPU with a colored overlay.
                //Application.Current.Host.Settings.EnableCacheVisualization = true;

                // Prevent the screen from turning off while under the debugger by disabling
                // the application's idle detection.
                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
                // and consume battery power when the user is not using the phone.
                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
            }
        }
Пример #3
0
        /// <summary>
        /// Constructor for the Application object.
        /// </summary>
        public App()
        {
            // Global handler for uncaught exceptions.
            UnhandledException += Application_UnhandledException;

            Logging.SetLogger(new MyLogger());

            Config config = new Config();
            config.InstallEventName = "my-custom-install";
            Tapstream.Create("sdktest", "YGP2pezGTI6ec48uti4o1w", config);

            Tapstream tracker = Tapstream.Instance;

            Event e = new Event("test-event", false);
            e.AddPair("player", "John Doe");
            e.AddPair("score", 5);
            tracker.FireEvent(e);

            e = new Event("test-event-oto", true);
            tracker.FireEvent(e);

            // Standard Silverlight initialization
            InitializeComponent();

            // Phone-specific initialization
            InitializePhoneApplication();

            // Show graphics profiling information while debugging.
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // Display the current frame rate counters.
                Application.Current.Host.Settings.EnableFrameRateCounter = true;

                // Show the areas of the app that are being redrawn in each frame.
                //Application.Current.Host.Settings.EnableRedrawRegions = true;

                // Enable non-production analysis visualization mode,
                // which shows areas of a page that are handed off to GPU with a colored overlay.
                //Application.Current.Host.Settings.EnableCacheVisualization = true;

                // Disable the application idle detection by setting the UserIdleDetectionMode property of the
                // application's PhoneApplicationService object to Disabled.
                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
                // and consume battery power when the user is not using the phone.
                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
            }
        }
Пример #4
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;

            Config config = new Config();
            Tapstream.Create("sdktest", "YGP2pezGTI6ec48uti4o1w", config);

            Tapstream tracker = Tapstream.Instance;

            Event e = new Event("test-event", false);
            e.AddPair("player", "John Doe");
            e.AddPair("score", 5);
            tracker.FireEvent(e);

            e = new Event("test-event-oto", true);
            tracker.FireEvent(e);
        }
Пример #5
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;

            Config config = new Config();
            config.GlobalEventParams["locale"] = "ENU";
            config.GlobalEventParams["user_id"] = "92429d82a41e";

            Tapstream.Create("sdktest", "YGP2pezGTI6ec48uti4o1w", config);

            Tapstream tracker = Tapstream.Instance;
            var op = tracker.GetConversionDataAsync().AsTask<string>().ContinueWith((task) => {
                string jsonData = task.Result;
                if (jsonData == null)
                {
                    // No conversion data available
                }
                else
                {
                    JsonObject json = null;
                    if (JsonObject.TryParse(jsonData, out json))
                    {
                        // Read some data from this json object, and modify your application's behaviour accordingly
                        // ...
                    }
                }
            });

            Event e = new Event("test-event", false);
            e.AddPair("player", "John Doe");
            e.AddPair("score", 5);
            tracker.FireEvent(e);

            e = new Event("test-event-oto", true);
            tracker.FireEvent(e);
        }
Пример #6
0
		public void FireEvent(Event e)
		{
			lock (this)
			{
				// Notify the event that we are going to fire it so it can record the time
				e.Firing();

				if (e.OneTimeOnly)
				{
					if (firedEvents.Contains(e.Name))
					{
						Logging.Log(LogLevel.INFO, "Tapstream ignoring event named \"{0}\" because it is a one-time-only event that has already been fired", e.Name);
						listener.ReportOperation("event-ignored-already-fired", e.Name);
						listener.ReportOperation("job-ended", e.Name);
						return;
					}
					else if (firingEvents.Contains(e.Name))
					{
						Logging.Log(LogLevel.INFO, "Tapstream ignoring event named \"{0}\" because it is a one-time-only event that is already in progress", e.Name);
						listener.ReportOperation("event-ignored-already-in-progress", e.Name);
						listener.ReportOperation("job-ended", e.Name);
						return;
					}

					firingEvents.Add(e.Name);
				}

				Core self = this;
				string url = String.Format(EVENT_URL_TEMPLATE, accountName, e.EncodedName);
				string data = postData.ToString() + e.PostData;
				
				// Always ask the delegate what the delay should be, regardless of what our delay member says.
				// The delegate may wish to override it if this is a testing scenario.
				int actualDelay = del.GetDelay();

#if WINDOWS_PHONE
				scheduler.Schedule(new Action(() =>
				{
#else
				Task.Delay(TimeSpan.FromSeconds(actualDelay)).ContinueWith((prevResult) =>
				{
#endif
					Response response = platform.Request(url, data);
					bool failed = response.Status < 200 || response.Status >= 300;
					bool shouldRetry = response.Status < 0 || (response.Status >= 500 && response.Status < 600);
				
					lock(self)
					{
						if(e.OneTimeOnly)
						{
							self.firingEvents.Remove(e.Name);
						}
					
						if(failed)
						{
							// Only increase delays if we actually intend to retry the event
							if(shouldRetry)
							{
								// Not every job that fails will increase the retry delay.  It will be the responsibility of
								// the first failed job to increase the delay after every failure.
								if(delay == 0)
								{
									// This is the first job to fail, it must be the one to manage delay timing
									failingEventId = e.Uid;
									IncreaseDelay();
								}
								else if(failingEventId == e.Uid)
								{
									// This job is failing for a subsequent time
									IncreaseDelay();
								}
							}
						}
						else
						{
							if(e.OneTimeOnly)
							{
								self.firedEvents.Add(e.Name);
							
								platform.SaveFiredEvents(self.firedEvents);
								listener.ReportOperation("fired-list-saved", e.Name);
							}

							// Success of any event resets the delay
							delay = 0;
						}
					}

					if(failed)
					{
						if(response.Status < 0)
						{
							Logging.Log(LogLevel.ERROR, "Tapstream Error: Failed to fire event, error={0}", response.Message);
						}
						else if(response.Status == 404)
						{
							Logging.Log(LogLevel.ERROR, "Tapstream Error: Failed to fire event, http code {0}\nDoes your event name contain characters that are not url safe? This event will not be retried.", response.Status);
						}
						else if(response.Status == 403)
						{
							Logging.Log(LogLevel.ERROR, "Tapstream Error: Failed to fire event, http code {0}\nAre your account name and application secret correct?  This event will not be retried.", response.Status);
						}
						else
						{
							string retryMsg = "";
							if(!shouldRetry)
							{
								retryMsg = "  This event will not be retried.";
							}
							Logging.Log(LogLevel.ERROR, "Tapstream Error: Failed to fire event, http code {0}.{1}", response.Status, retryMsg);
						}

						listener.ReportOperation("event-failed", e.Name);
						if(shouldRetry)
						{
							listener.ReportOperation("retry", e.Name);
							listener.ReportOperation("job-ended", e.Name);
							if(del.IsRetryAllowed())
							{
								FireEvent(e);
							}
							return;
						}
					}
					else
					{
						Logging.Log(LogLevel.INFO, "Tapstream fired event named \"{0}\"", e.Name);
						listener.ReportOperation("event-succeeded", e.Name);
					}
				
					listener.ReportOperation("job-ended", e.Name);

#if WINDOWS_PHONE
				}), TimeSpan.FromSeconds( actualDelay ) );
#else
				});
#endif
			}
		}
Пример #7
0
 public void FireEvent(Event e)
 {
     core.FireEvent(e);
 }
Пример #8
0
 public void prepareEvent(Tapstream ts, Event e)
 {
     e.Prepare(ts.config.GlobalEventParams);
 }