Skip to content

Commit 86672e0

Browse files
author
Tamas Henning
committed
Added few missing bits and bobs
1 parent b13ba0e commit 86672e0

File tree

6 files changed

+111
-70
lines changed

6 files changed

+111
-70
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
package com.tamashenning.forgeanalyitcs.client;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
36
public class ForgeAnalyticsConstants {
4-
public final static String pingClientTable = "ClientTable";
5-
public final static String pingClientStartCommand = "PING";
6-
public final static String pingServerTable = "ServerTable";
7-
public final static String pingServerStartCommand = "PING_START";
8-
public final static String pingServerStopCommand = "PING_STOP";
7+
public static String pingClientTable = "ClientTable";
8+
public static String pingClientStartCommand = "PING";
9+
public static String pingServerTable = "ServerTable";
10+
public static String pingServerStartCommand = "PING_START";
11+
public static String pingServerStopCommand = "PING_STOP";
12+
13+
public static String pingClientKeepAlive = "PING";
14+
public static String pingServerKeepAlive = "PING";
915

10-
public final static String pingClientKeepAlive = "KEEPALIVE";
11-
public final static String pingServerKeepAlive = "KEEPALIVE";
16+
public static String serverUrl = "http://forgeanalytics.azurewebsites.net/api/Analytics";
1217

13-
public final static int HASHCOUNT = 5;
18+
public static String AdID = "";
19+
20+
public static int HASHCOUNT = 5;
21+
public static int KEEPALIVETIME = 5 * 60 * 1000;
1422

23+
public static Map<String, String> CustomProperties = new HashMap<String, String>();
24+
1525
}

src/java/com/tamashenning/forgeanalyitcs/client/ForgeAnalyticsSingleton.java

+41-7
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@
33
import java.math.BigInteger;
44
import java.security.NoSuchAlgorithmException;
55
import java.security.SecureRandom;
6+
import java.util.Timer;
7+
import java.util.TimerTask;
68

79
import com.tamashenning.forgeanalytics.AnalyticsClient;
810

11+
import net.minecraft.client.Minecraft;
12+
import net.minecraft.server.MinecraftServer;
13+
914
public class ForgeAnalyticsSingleton {
1015
private static ForgeAnalyticsSingleton instance = null;
1116
private AnalyticsClient ac = new AnalyticsClient();
1217

1318
public String SessionID = "";
1419

1520
protected ForgeAnalyticsSingleton() {
16-
SecureRandom random = new SecureRandom();
17-
try {
18-
SessionID = ac.Anonymize(new BigInteger(130, random).toString(32));
19-
} catch (NoSuchAlgorithmException e) {
20-
// TODO Auto-generated catch block
21-
e.printStackTrace();
22-
}
21+
SessionID = this.CreateID();
2322
}
2423

2524
public static ForgeAnalyticsSingleton getInstance() {
@@ -30,4 +29,39 @@ public static ForgeAnalyticsSingleton getInstance() {
3029
return instance;
3130
}
3231

32+
public String CreateID() {
33+
String id = "";
34+
SecureRandom random = new SecureRandom();
35+
try {
36+
id = ac.Anonymize(new BigInteger(130, random).toString(32));
37+
} catch (NoSuchAlgorithmException e) {
38+
e.printStackTrace();
39+
}
40+
return id;
41+
}
42+
43+
public void StartKeepAliveTimer() {
44+
Timer timer = new Timer();
45+
timer.scheduleAtFixedRate(new TimerTask() {
46+
@Override
47+
public void run(){
48+
try {
49+
// I'm running locally with no world loaded yet...
50+
if (Minecraft.getMinecraft().theWorld == null) {
51+
ac.UploadModel(ac.CreateClientKeepAlivePing());
52+
}
53+
else if (!Minecraft.getMinecraft().theWorld.isRemote) {
54+
ac.UploadModel(ac.CreateClientKeepAlivePing());
55+
}
56+
else {
57+
ac.UploadModel(ac.CreateServerKeepAlivePing());
58+
}
59+
} catch (Exception e) {
60+
//
61+
e.printStackTrace();
62+
};
63+
}
64+
}, ForgeAnalyticsConstants.KEEPALIVETIME, ForgeAnalyticsConstants.KEEPALIVETIME);
65+
}
66+
3367
}

src/java/com/tamashenning/forgeanalytics/AnalyticsClient.java

+24-47
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,27 @@
2525
public class AnalyticsClient {
2626

2727
public boolean UploadModel(AnalyticsModel model) throws Exception {
28+
29+
model.Properties.putAll(ForgeAnalyticsConstants.CustomProperties);
30+
2831
Gson g = new Gson();
2932
String json = g.toJson(model);
3033

3134
return this.UploadModel(json);
3235
}
3336

34-
public boolean UploadModel(String json) throws Exception {
37+
private boolean UploadModel(String json) throws Exception {
38+
39+
// Respect snooper settings...
40+
if(!Minecraft.getMinecraft().isSnooperEnabled()) {
41+
return false;
42+
}
43+
3544
System.out.println(json);
3645
HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead
3746

3847
try {
39-
HttpPost request = new HttpPost("http://forgeanalytics.azurewebsites.net/api/Analytics");
48+
HttpPost request = new HttpPost(ForgeAnalyticsConstants.serverUrl);
4049

4150
StringEntity params =new StringEntity(json);
4251
request.addHeader("content-type", "application/json");
@@ -52,31 +61,18 @@ public boolean UploadModel(String json) throws Exception {
5261
return true;
5362
}
5463

55-
public String CreateClientStartupPing() {
56-
Gson g = new Gson();
57-
64+
public AnalyticsModel CreateClientStartupPing() {
5865
AnalyticsModel am = new AnalyticsModel();
5966
am.Table = ForgeAnalyticsConstants.pingClientTable;
6067
am.Properties = new HashMap<String, String>();
6168
am.PartitionKey = ForgeAnalyticsConstants.pingClientStartCommand;
6269
am.ClientDateTimeEpoch = System.currentTimeMillis() / 1000L;
6370
am.Properties.putAll(this.getCommonValues());
6471

65-
/*try {
66-
// TODO figure this out...
67-
// am.Properties.put("UserHash", this.Anonymize(Minecraft.getMinecraft().thePlayer.getUniqueID().toString()));
68-
} catch (NoSuchAlgorithmException e) {
69-
// TODO Auto-generated catch block
70-
e.printStackTrace();
71-
}*/
72-
73-
String json = g.toJson(am);
74-
return json;
72+
return am;
7573
}
7674

77-
public String CreateServerStartupPing() {
78-
Gson g = new Gson();
79-
75+
public AnalyticsModel CreateServerStartupPing() {
8076
AnalyticsModel am = new AnalyticsModel();
8177
am.Table = ForgeAnalyticsConstants.pingServerTable;
8278
am.Properties = new HashMap<String, String>();
@@ -102,14 +98,11 @@ public String CreateServerStartupPing() {
10298
am.Properties.put("IsDemo", Boolean.toString(server.isDemo()));
10399
am.Properties.put("IsLanMode", Boolean.toString(((IntegratedServer)server).getPublic()));
104100
}
105-
106-
String json = g.toJson(am);
107-
return json;
101+
102+
return am;
108103
}
109104

110-
public String CreateServerStoppedPing() {
111-
Gson g = new Gson();
112-
105+
public AnalyticsModel CreateServerStoppedPing() {
113106
AnalyticsModel am = new AnalyticsModel();
114107
am.Table = ForgeAnalyticsConstants.pingServerTable;
115108
am.Properties = new HashMap<String, String>();
@@ -136,36 +129,21 @@ public String CreateServerStoppedPing() {
136129
am.Properties.put("IsLanMode", Boolean.toString(((IntegratedServer)server).getPublic()));
137130
}
138131

139-
140-
String json = g.toJson(am);
141-
return json;
132+
return am;
142133
}
143134

144-
public String CreateClientKeepAlivePing() {
145-
Gson g = new Gson();
146-
135+
public AnalyticsModel CreateClientKeepAlivePing() {
147136
AnalyticsModel am = new AnalyticsModel();
148137
am.Table = ForgeAnalyticsConstants.pingClientTable;
149138
am.Properties = new HashMap<String, String>();
150139
am.PartitionKey = ForgeAnalyticsConstants.pingClientKeepAlive;
151140
am.ClientDateTimeEpoch = System.currentTimeMillis() / 1000L;
152141
am.Properties.putAll(this.getCommonValues());
153-
154-
try {
155-
// TODO figure this out...
156-
am.Properties.put("UserHash", this.Anonymize(Minecraft.getMinecraft().thePlayer.getUniqueID().toString()));
157-
} catch (NoSuchAlgorithmException e) {
158-
// TODO Auto-generated catch block
159-
e.printStackTrace();
160-
}
161-
162-
String json = g.toJson(am);
163-
return json;
142+
143+
return am;
164144
}
165145

166-
public String CreateServerKeepAlivePing() {
167-
Gson g = new Gson();
168-
146+
public AnalyticsModel CreateServerKeepAlivePing() {
169147
AnalyticsModel am = new AnalyticsModel();
170148
am.Table = ForgeAnalyticsConstants.pingServerTable;
171149
am.Properties = new HashMap<String, String>();
@@ -193,9 +171,7 @@ public String CreateServerKeepAlivePing() {
193171
am.Properties.put("IsLanMode", Boolean.toString(((IntegratedServer)server).getPublic()));
194172
}
195173

196-
197-
String json = g.toJson(am);
198-
return json;
174+
return am;
199175
}
200176

201177

@@ -209,6 +185,7 @@ private Map<String, String> getCommonValues() {
209185
commonValues.put("JavaMaxRAM", Long.toString(Runtime.getRuntime().maxMemory()));
210186
commonValues.put("JavaAllocatedRAM", Long.toString(Runtime.getRuntime().totalMemory()));
211187
commonValues.put("SessionID", ForgeAnalyticsSingleton.getInstance().SessionID);
188+
commonValues.put("AdID", ForgeAnalyticsConstants.AdID);
212189
commonValues.put("MinecraftVersion", Minecraft.getMinecraft().getVersion());
213190
commonValues.put("ForgeVersion", ForgeVersion.getVersion());
214191
commonValues.put("MCPVersion", ForgeVersion.mcpVersion);

src/java/com/tamashenning/forgeanalytics/ForgeAnalyticsMod.java

-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.tamashenning.forgeanalytics;
22

3-
import com.tamashenning.forgeanalyitcs.client.ForgeAnalyticsSingleton;
43
import com.tamashenning.forgeanalytics.commands.AnalyticsCommands;
54
import com.tamashenning.forgeanalytics.proxies.CommonProxy;
65

7-
import net.minecraft.client.Minecraft;
86
import net.minecraftforge.fml.common.Mod;
97
import net.minecraftforge.fml.common.Mod.EventHandler;
108
import net.minecraftforge.fml.common.SidedProxy;
@@ -15,8 +13,6 @@
1513
import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
1614
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
1715
import net.minecraftforge.fml.common.event.FMLServerStoppedEvent;
18-
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
19-
import net.minecraftforge.fml.common.gameevent.TickEvent;
2016
import net.minecraftforge.fml.relauncher.Side;
2117
import net.minecraftforge.fml.relauncher.SideOnly;
2218

src/java/com/tamashenning/forgeanalytics/commands/AnalyticsCommands.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ public List<String> getCommandAliases() {
4646
@Override
4747
public void processCommand(ICommandSender sender, String[] args) throws CommandException {
4848
// TODO Auto-generated method stub
49-
if (sender instanceof EntityPlayer) {
49+
/*if (sender instanceof EntityPlayer) {
5050
EntityPlayer player = (EntityPlayer)sender;
5151
AnalyticsClient ac = new AnalyticsClient();
5252
String message = ac.CreateClientStartupPing();
5353
player.addChatMessage(new ChatComponentText(message));
54-
}
54+
}*/
5555

5656
}
5757

Original file line numberDiff line numberDiff line change
@@ -1,20 +1,44 @@
11
package com.tamashenning.forgeanalytics.proxies;
22

3+
import com.tamashenning.forgeanalyitcs.client.ForgeAnalyticsConstants;
4+
import com.tamashenning.forgeanalyitcs.client.ForgeAnalyticsSingleton;
5+
6+
import net.minecraftforge.common.config.Configuration;
37
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
48
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
59
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
610

711
public class CommonProxy {
812

913
public void preInit(FMLPreInitializationEvent e) {
14+
Configuration config = new Configuration(e.getSuggestedConfigurationFile());
15+
config.load();
16+
17+
ForgeAnalyticsConstants.AdID = ForgeAnalyticsSingleton.getInstance().CreateID();
18+
19+
ForgeAnalyticsConstants.pingClientTable = config.get(Configuration.CATEGORY_GENERAL, "pingClientTable", ForgeAnalyticsConstants.pingClientTable).getString();
20+
ForgeAnalyticsConstants.pingClientStartCommand = config.get(Configuration.CATEGORY_GENERAL, "pingClientStartCommand", ForgeAnalyticsConstants.pingClientStartCommand).getString();
21+
ForgeAnalyticsConstants.pingServerTable = config.get(Configuration.CATEGORY_GENERAL, "pingServerTable", ForgeAnalyticsConstants.pingServerTable).getString();
22+
ForgeAnalyticsConstants.pingServerStartCommand = config.get(Configuration.CATEGORY_GENERAL, "pingServerStartCommand", ForgeAnalyticsConstants.pingServerStartCommand).getString();
23+
ForgeAnalyticsConstants.pingServerStopCommand = config.get(Configuration.CATEGORY_GENERAL, "pingServerStopCommand", ForgeAnalyticsConstants.pingServerStopCommand).getString();
24+
ForgeAnalyticsConstants.pingClientKeepAlive = config.get(Configuration.CATEGORY_GENERAL, "pingClientKeepAlive", ForgeAnalyticsConstants.pingClientKeepAlive).getString();
25+
ForgeAnalyticsConstants.pingServerKeepAlive = config.get(Configuration.CATEGORY_GENERAL, "pingServerKeepAlive", ForgeAnalyticsConstants.pingServerKeepAlive).getString();
26+
27+
ForgeAnalyticsConstants.serverUrl = config.get(Configuration.CATEGORY_GENERAL, "serverUrl", ForgeAnalyticsConstants.serverUrl).getString();
28+
ForgeAnalyticsConstants.AdID = config.get(Configuration.CATEGORY_GENERAL, "AdID", ForgeAnalyticsConstants.AdID).getString();
1029

30+
ForgeAnalyticsConstants.HASHCOUNT = config.get(Configuration.CATEGORY_GENERAL, "HASHCOUNT", ForgeAnalyticsConstants.HASHCOUNT).getInt();
31+
ForgeAnalyticsConstants.KEEPALIVETIME = config.get(Configuration.CATEGORY_GENERAL, "KEEPALIVETIME", ForgeAnalyticsConstants.KEEPALIVETIME).getInt();
32+
33+
config.save();
1134
}
1235

1336
public void init(FMLInitializationEvent e) {
14-
37+
// Add custom properties to each event
38+
// ForgeAnalyticsConstants.CustomProperties.put("hello", "world");
1539
}
1640

1741
public void postInit(FMLPostInitializationEvent e) {
18-
42+
ForgeAnalyticsSingleton.getInstance().StartKeepAliveTimer();
1943
}
2044
}

0 commit comments

Comments
 (0)