aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/api
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2017-12-10 15:37:46 +1000
committerJordan Byrne <draknyte1@hotmail.com>2017-12-10 15:37:46 +1000
commit5a90d0ab107b4711b2b22aa3b2964ce7d669a216 (patch)
treed9ea8d2b4382f942ee08b9f52499f3bf20b6ed7f /src/Java/gtPlusPlus/api
parent27c1a066d6aaa2c3c8f3847909323c78ab693e37 (diff)
downloadGT5-Unofficial-5a90d0ab107b4711b2b22aa3b2964ce7d669a216.tar.gz
GT5-Unofficial-5a90d0ab107b4711b2b22aa3b2964ce7d669a216.tar.bz2
GT5-Unofficial-5a90d0ab107b4711b2b22aa3b2964ce7d669a216.zip
% Major Refactor of the base GT++ class.
% Moved Config Handling to it's own class. % Renamed configSwitches.class to ConfigSwitches.class. + Added framework for Segment Analytics.
Diffstat (limited to 'src/Java/gtPlusPlus/api')
-rw-r--r--src/Java/gtPlusPlus/api/analytics/AnalyticsLoggingPlugin.java37
-rw-r--r--src/Java/gtPlusPlus/api/analytics/BlockingFlush.java67
2 files changed, 104 insertions, 0 deletions
diff --git a/src/Java/gtPlusPlus/api/analytics/AnalyticsLoggingPlugin.java b/src/Java/gtPlusPlus/api/analytics/AnalyticsLoggingPlugin.java
new file mode 100644
index 0000000000..ec2537cbfd
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/analytics/AnalyticsLoggingPlugin.java
@@ -0,0 +1,37 @@
+package gtPlusPlus.api.analytics;
+
+import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.Log;
+import com.segment.analytics.Plugin;
+import com.segment.analytics.messages.Message;
+
+/**
+ * A {@link Plugin} implementation that redirects client logs to standard output and logs callback
+ * events.
+ */
+public class AnalyticsLoggingPlugin implements Plugin {
+ @Override public void configure(Analytics.Builder builder) {
+ builder.log(new Log() {
+ @Override public void print(Level level, String format, Object... args) {
+ System.out.println(level + ":\t" + String.format(format, args));
+ }
+
+ @Override public void print(Level level, Throwable error, String format, Object... args) {
+ System.out.println(level + ":\t" + String.format(format, args));
+ System.out.println(error);
+ }
+ });
+
+ builder.callback(new Callback() {
+ @Override public void success(Message message) {
+ System.out.println("Uploaded " + message);
+ }
+
+ @Override public void failure(Message message, Throwable throwable) {
+ System.out.println("Could not upload " + message);
+ System.out.println(throwable);
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/api/analytics/BlockingFlush.java b/src/Java/gtPlusPlus/api/analytics/BlockingFlush.java
new file mode 100644
index 0000000000..7dbf9cba06
--- /dev/null
+++ b/src/Java/gtPlusPlus/api/analytics/BlockingFlush.java
@@ -0,0 +1,67 @@
+package gtPlusPlus.api.analytics;
+
+import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.MessageTransformer;
+import com.segment.analytics.Plugin;
+import com.segment.analytics.messages.Message;
+import com.segment.analytics.messages.MessageBuilder;
+import java.util.concurrent.Phaser;
+
+/**
+ * The {@link Analytics} class doesn't come with a blocking {@link Analytics#flush()} implementation
+ * out of the box. It's trivial to build one using a {@link Phaser} that monitors requests and is
+ * able to block until they're uploaded.
+ *
+ * <pre><code>
+ * BlockingFlush blockingFlush = BlockingFlush.create();
+ * Analytics analytics = Analytics.builder(writeKey)
+ * .plugin(blockingFlush)
+ * .build();
+ *
+ * // Do some work.
+ *
+ * analytics.flush(); // Trigger a flush.
+ * blockingFlush.block(); // Block until the flush completes.
+ * analytics.shutdown(); // Shut down after the flush is complete.
+ * </code></pre>
+ */
+public class BlockingFlush {
+
+ public static BlockingFlush create() {
+ return new BlockingFlush();
+ }
+
+ BlockingFlush() {
+ this.phaser = new Phaser(1);
+ }
+
+ final Phaser phaser;
+
+ public Plugin plugin() {
+ return new Plugin() {
+ @Override public void configure(Analytics.Builder builder) {
+ builder.messageTransformer(new MessageTransformer() {
+ @Override public boolean transform(MessageBuilder builder) {
+ phaser.register();
+ return true;
+ }
+ });
+
+ builder.callback(new Callback() {
+ @Override public void success(Message message) {
+ phaser.arrive();
+ }
+
+ @Override public void failure(Message message, Throwable throwable) {
+ phaser.arrive();
+ }
+ });
+ }
+ };
+ }
+
+ public void block() {
+ phaser.arriveAndAwaitAdvance();
+ }
+} \ No newline at end of file