mage/Mage.Common/pom.xml

91 lines
2.9 KiB
XML
Raw Normal View History

2017-07-08 14:33:09 +00:00
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.mage</groupId>
<artifactId>mage-root</artifactId>
2018-04-19 19:07:14 +00:00
<version>1.4.29</version>
2017-07-08 14:33:09 +00:00
</parent>
<artifactId>mage-common</artifactId>
<packaging>jar</packaging>
<name>Mage Common Classes</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mage</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.googlecode.jspf</groupId>
<artifactId>jspf-core</artifactId>
<version>0.9.1</version>
</dependency>
[WIP] Consumable JSON game logs As discussed in https://github.com/magefree/mage/issues/4515 This exposes a JSON log of game interactions that can be analyzed. This is just a first pass, to get up to speed with how the messaging works. It'd like to trim down the messages much further so they don't include redundant information in each message. Also gson supports much more advances serialization options; such as using the @Expose annotation. We should probably use that, but I ran into some issues (I'm not a java developer, so still learning). TODO: These currently only exist on the client side; ideally we'd submit this logs back up to a central server after the games completion; thinking this could be simple via an S3 file drop, and a Lambda function to process and expose the logs; maybe via a kafka stream. Examples of log messages are below: ``` { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "GAME_SELECT", "value": { "gameView": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" }, "message": "Play spells and abilities.", "options": { "queryType": "SELECT" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "SEND_PLAYER_UUID", "value": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "GAME_CHOOSE_PILE", "value": { "choices": { "1ecf8671-be4c-4060-a76b-af614235a5b7": "Cast Ornithopter" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4", "type": "GAME_INIT", "value": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4", "type": "GAME_SELECT", "value": { "gameView": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" }, "message": "Play spells and abilities.", "options": { "queryType": "SELECT" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "SEND_PLAYER_UUID", "value": "1ecf8671-be4c-4060-a76b-af614235a5b7" } ```
2018-02-27 00:23:00 +00:00
2017-07-08 14:33:09 +00:00
<dependency>
<groupId>org.jboss.remoting</groupId>
<artifactId>jboss-remoting</artifactId>
<version>2.5.4.SP5</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-common-core</artifactId>
<version>2.2.22.GA</version>
</dependency>
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-serialization</artifactId>
<version>1.0.3.GA</version>
</dependency>
<dependency>
<groupId>concurrent</groupId>
<artifactId>concurrent</artifactId>
<version>1.3.4</version>
</dependency>
<dependency>
<groupId>trove</groupId>
<artifactId>trove</artifactId>
<version>1.0.2</version>
</dependency>
[WIP] Consumable JSON game logs As discussed in https://github.com/magefree/mage/issues/4515 This exposes a JSON log of game interactions that can be analyzed. This is just a first pass, to get up to speed with how the messaging works. It'd like to trim down the messages much further so they don't include redundant information in each message. Also gson supports much more advances serialization options; such as using the @Expose annotation. We should probably use that, but I ran into some issues (I'm not a java developer, so still learning). TODO: These currently only exist on the client side; ideally we'd submit this logs back up to a central server after the games completion; thinking this could be simple via an S3 file drop, and a Lambda function to process and expose the logs; maybe via a kafka stream. Examples of log messages are below: ``` { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "GAME_SELECT", "value": { "gameView": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" }, "message": "Play spells and abilities.", "options": { "queryType": "SELECT" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "SEND_PLAYER_UUID", "value": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "GAME_CHOOSE_PILE", "value": { "choices": { "1ecf8671-be4c-4060-a76b-af614235a5b7": "Cast Ornithopter" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4", "type": "GAME_INIT", "value": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4", "type": "GAME_SELECT", "value": { "gameView": { "priorityTime": 3000, "players": [ { "name": "computer", "life": 20, "counters": {} }, { "name": "hooptie", "life": 20, "counters": {} } ], "hand": { "425d774f-ee0c-4a9b-8516-c98f886943f0": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "425d774f-ee0c-4a9b-8516-c98f886943f0" }, "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": { "name": "Blade of the Bloodchief", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff" }, "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": { "name": "Ornithopter", "power": "0", "toughness": "2", "loyalty": "", "manaCost": [ "{0}" ], "convertedManaCost": 0, "type": 0, "paid": false, "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" }, "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": { "name": "Springleaf Drum", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{1}" ], "convertedManaCost": 1, "type": 0, "paid": false, "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64" }, "91239f4f-9003-4c48-8ca1-4c318f892489": { "name": "Cranial Plating", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "91239f4f-9003-4c48-8ca1-4c318f892489" }, "feb268d8-0535-4a9c-8915-83dd92a08c4c": { "name": "Arcbound Ravager", "power": "0", "toughness": "0", "loyalty": "", "manaCost": [ "{2}" ], "convertedManaCost": 2, "type": 0, "paid": false, "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c" } }, "canPlayInHand": [ "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806" ], "stack": {}, "combat": [], "phase": "PRECOMBAT_MAIN", "step": "PRECOMBAT_MAIN" }, "message": "Play spells and abilities.", "options": { "queryType": "SELECT" } } } { "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254", "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4", "type": "SEND_PLAYER_UUID", "value": "1ecf8671-be4c-4060-a76b-af614235a5b7" } ```
2018-02-27 00:23:00 +00:00
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
2017-07-08 14:33:09 +00:00
</dependencies>
<!-- to get the reference to local repository with com\googlecode\jspf\jspf-core\0.9.1\ -->
<repositories>
<repository>
<id>local-project-repo</id>
<url>file://${project.basedir}/../repository</url>
</repository>
</repositories>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<finalName>mage-common</finalName>
</build>
</project>