diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml
index db453f4cd3b..40fcfe1b911 100644
--- a/Mage.Client/pom.xml
+++ b/Mage.Client/pom.xml
@@ -15,6 +15,7 @@
Mage Client
+
org.mage
mage
@@ -68,6 +69,11 @@
jetlang
0.2.9
+
+ com.amazonaws
+ aws-java-sdk-s3
+ 1.11.286
+
com.jgoodies
forms
diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
index 253186a4822..f16b0bee0e5 100644
--- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
+++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java
@@ -35,6 +35,7 @@ import javax.swing.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import mage.cards.decks.Deck;
+import mage.client.remote.S3Uploader;
import mage.client.MageFrame;
import mage.client.SessionHandler;
import mage.client.chat.ChatPanelBasic;
@@ -194,9 +195,16 @@ public class CallbackClientImpl implements CallbackClient {
break;
}
case GAME_OVER: {
+
GamePanel panel = MageFrame.getGame(callback.getObjectId());
+
if (panel != null) {
appendJsonEvent("GAME_OVER", callback.getObjectId(), callback.getData());
+ ActionData actionData = appendJsonEvent("GAME_OVER", callback.getObjectId(), callback.getData());
+ String logFileName = "game-" + actionData.gameId + ".json";
+
+ S3Uploader.upload(logFileName, actionData.gameId.toString());
+
panel.endMessage((String) callback.getData(), callback.getMessageId());
}
break;
@@ -304,8 +312,8 @@ public class CallbackClientImpl implements CallbackClient {
break;
}
case END_GAME_INFO:
- appendJsonEvent("GAME_OVER", callback.getObjectId(), callback.getData());
MageFrame.getInstance().showGameEndDialog((GameEndView) callback.getData());
+
break;
case SHOW_USERMESSAGE:
List messageData = (List) callback.getData();
@@ -402,11 +410,12 @@ public class CallbackClientImpl implements CallbackClient {
}
});
}
- private void appendJsonEvent(String name, UUID gameId, Object value) {
+ private ActionData appendJsonEvent(String name, UUID gameId, Object value) {
Session session = SessionHandler.getSession();
ActionData actionData = new ActionData(name, gameId);
actionData.value = value;
session.appendJsonLog(actionData);
+ return actionData;
}
private void createChatStartMessage(ChatPanelBasic chatPanel) {
chatPanel.setStartMessageDone(true);
diff --git a/Mage.Client/src/main/java/mage/client/remote/S3Uploader.java b/Mage.Client/src/main/java/mage/client/remote/S3Uploader.java
new file mode 100644
index 00000000000..21e9504f412
--- /dev/null
+++ b/Mage.Client/src/main/java/mage/client/remote/S3Uploader.java
@@ -0,0 +1,47 @@
+package mage.client.remote;
+
+import java.io.File;
+
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.services.s3.transfer.TransferManager;
+import com.amazonaws.services.s3.transfer.Upload;
+import org.apache.log4j.Logger;
+
+import javax.xml.crypto.Data;
+
+
+public class S3Uploader {
+ private static final Logger logger = Logger.getLogger(S3Uploader.class);
+
+ public static Boolean upload(String filePath, String keyName) throws Exception {
+ String existingBucketName = System.getenv("S3_BUCKET") != null ? System.getenv("S3_BUCKET")
+ : "xmage-game-logs-dev";
+
+ String accessKeyId = System.getenv("AWS_ACCESS_ID");
+ String secretKeyId = System.getenv("AWS_SECRET_KEY");
+
+ if(accessKeyId == "" || secretKeyId == "" || existingBucketName == "") {
+ logger.info("Aborting json log sync.");
+ return false;
+ }
+
+ String path = new File("./" + filePath).getCanonicalPath();
+ logger.info("Syncing " + path + " to bucket: " + existingBucketName + " with AWS Access Id: " + accessKeyId);
+
+ BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKeyId, secretKeyId);
+ TransferManager tm = new TransferManager(awsCreds);
+ Upload upload = tm.upload(existingBucketName, "/game/" + keyName + ".json", new File(path));
+
+ try {
+ upload.waitForUploadResult();
+ logger.info("Sync Complete For " + path + " to bucket: " + existingBucketName + " with AWS Access Id: " + accessKeyId);
+ new File(path);
+ return true;
+ } catch (AmazonClientException amazonClientException) {
+ System.out.println("Unable to upload file, upload was aborted.");
+ amazonClientException.printStackTrace();
+ return false;
+ }
+ }
+}
diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml
index f756f0f7c17..20899230cca 100644
--- a/Mage.Server/pom.xml
+++ b/Mage.Server/pom.xml
@@ -76,6 +76,12 @@
${project.version}
runtime
+
+ org.apache.commons
+ commons-compress
+ 1.16.1
+
+
${project.groupId}
mage-game-commanderfreeforall