Skip to content
Snippets Groups Projects
Unverified Commit fc04493f authored by Jeffrey Phillips Freeman's avatar Jeffrey Phillips Freeman :boom:
Browse files

Moved data so it is now persisted in a graph DB instead of mapDB. Changed gold from a long to int.

parent 628e2337
No related branches found
No related tags found
No related merge requests found
Showing
with 415 additions and 170 deletions
......@@ -11,3 +11,4 @@ creeperDb*
*.mapdb*
*.log
release.properties
aethermud-graph.json
......@@ -189,6 +189,21 @@
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>com.syncleus.ferma</groupId>
<artifactId>ferma</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>tinkergraph-gremlin</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
</dependencies>
<build>
......
......@@ -30,8 +30,8 @@ import com.syncleus.aethermud.player.PlayerManagementManager;
import com.syncleus.aethermud.player.PlayerManager;
import com.syncleus.aethermud.server.communication.ChannelUtils;
import com.syncleus.aethermud.server.telnet.AetherMudServer;
import com.syncleus.aethermud.storage.MapDBAetherMudStorage;
import com.syncleus.aethermud.storage.WorldStorage;
import com.syncleus.aethermud.storage.graphdb.GraphDbAetherMudStorage;
import com.syncleus.aethermud.world.MapsManager;
import com.syncleus.aethermud.world.RoomManager;
import com.google.common.io.Files;
......@@ -90,11 +90,11 @@ public class Main {
.closeOnJvmShutdown()
.make();
MapDBAetherMudStorage mapDBCreeperStorage = new MapDBAetherMudStorage(db);
mapDBCreeperStorage.startAsync();
mapDBCreeperStorage.awaitRunning();
GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(db);
graphStorage.startAsync();
graphStorage.awaitRunning();
PlayerManager playerManager = new PlayerManager(mapDBCreeperStorage, new SessionManager());
PlayerManager playerManager = new PlayerManager(graphStorage, new SessionManager());
playerManager.createAllGauges();
RoomManager roomManager = new RoomManager(playerManager);
......@@ -102,8 +102,8 @@ public class Main {
startUpMessage("Configuring core systems.");
MapsManager mapsManager = new MapsManager(aetherMudConfiguration, roomManager);
ChannelUtils channelUtils = new ChannelUtils(playerManager, roomManager);
EntityManager entityManager = new EntityManager(mapDBCreeperStorage, roomManager, playerManager);
GameManager gameManager = new GameManager(mapDBCreeperStorage, aetherMudConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
EntityManager entityManager = new EntityManager(graphStorage, roomManager, playerManager);
GameManager gameManager = new GameManager(graphStorage, aetherMudConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
startUpMessage("Reading world from disk.");
WorldStorage worldExporter = new WorldStorage(roomManager, mapsManager, gameManager.getFloorManager(), entityManager, gameManager);
......
......@@ -46,7 +46,7 @@ public class LootCommand extends Command {
if (item.getInternalItemName().equals(Item.CORPSE_INTENAL_NAME)) {
Loot loot = item.getLoot();
if (loot != null) {
long gold = lootManager.lootGoldAmountReturn(loot);
int gold = lootManager.lootGoldAmountReturn(loot);
if (gold > 0) {
write("You looted " + NumberFormat.getNumberInstance(Locale.US).format(gold) + Color.YELLOW + " gold" + Color.RESET + " from a " + item.getItemName() + ".\r\n");
player.incrementGold(gold);
......
......@@ -54,8 +54,8 @@ public class RestartCommand extends Command {
"88 \"8b, ,aa 88b, ,a8\" \"8a, ,a8\" \"8a, ,a8\" 88, \n" +
"88 `\"Ybbd8\"' 8Y\"Ybbd8\"' `\"YbbdP\"' `\"YbbdP\"' \"Y888 \n" +
" "));
gameManager.getMapDBCreeperStorage().stopAsync();
gameManager.getMapDBCreeperStorage().awaitTerminated();
gameManager.getGraphStorage().stopAsync();
gameManager.getGraphStorage().awaitTerminated();
System.exit(0);
});
}
......
......@@ -42,6 +42,7 @@ import com.syncleus.aethermud.stats.Stats;
import com.syncleus.aethermud.stats.StatsBuilder;
import com.syncleus.aethermud.stats.modifier.StatsModifierFactory;
import com.syncleus.aethermud.storage.*;
import com.syncleus.aethermud.storage.graphdb.GraphDbAetherMudStorage;
import com.syncleus.aethermud.world.FloorManager;
import com.syncleus.aethermud.world.MapsManager;
import com.syncleus.aethermud.world.RoomManager;
......@@ -106,7 +107,7 @@ public class GameManager {
private final HttpClient httpclient;
private final Gson gson;
private final FilebasedJsonStorage filebasedJsonStorage;
private final MapDBAetherMudStorage mapDBCreeperStorage;
private final GraphDbAetherMudStorage graphStorage;
public MerchantStorage getMerchantStorage() {
return merchantStorage;
......@@ -115,8 +116,8 @@ public class GameManager {
private final MerchantStorage merchantStorage;
public GameManager(MapDBAetherMudStorage mapDBCreeperStorage, AetherMudConfiguration aetherMudConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils, HttpClient httpClient) {
this.mapDBCreeperStorage = mapDBCreeperStorage;
public GameManager(GraphDbAetherMudStorage graphStorage, AetherMudConfiguration aetherMudConfiguration, RoomManager roomManager, PlayerManager playerManager, EntityManager entityManager, MapsManager mapsManager, ChannelCommunicationUtils channelUtils, HttpClient httpClient) {
this.graphStorage = graphStorage;
this.roomManager = roomManager;
this.playerManager = playerManager;
this.entityManager = entityManager;
......@@ -151,8 +152,8 @@ public class GameManager {
this.httpclient = httpClient;
}
public MapDBAetherMudStorage getMapDBCreeperStorage() {
return mapDBCreeperStorage;
public GraphDbAetherMudStorage getGraphStorage() {
return graphStorage;
}
public Gson getGson() {
......
......@@ -25,11 +25,11 @@ import java.util.Set;
public class Loot implements Serializable {
private Set<String> internalItemNames;
private long lootGoldMax;
private long lootGoldMin;
private int lootGoldMax;
private int lootGoldMin;
@JsonCreator
public Loot(@JsonProperty("lootGoldMin") long lootGoldMin, @JsonProperty("lootGoldMax") long lootGoldMax, @JsonProperty("items") Set<String> internalItemNames) {
public Loot(@JsonProperty("lootGoldMin") int lootGoldMin, @JsonProperty("lootGoldMax") int lootGoldMax, @JsonProperty("items") Set<String> internalItemNames) {
this.internalItemNames = internalItemNames;
this.lootGoldMax = lootGoldMax;
this.lootGoldMin = lootGoldMin;
......@@ -45,11 +45,11 @@ public class Loot implements Serializable {
return internalItemNames;
}
public long getLootGoldMax() {
public int getLootGoldMax() {
return lootGoldMax;
}
public long getLootGoldMin() {
public int getLootGoldMin() {
return lootGoldMin;
}
......@@ -57,11 +57,11 @@ public class Loot implements Serializable {
this.internalItemNames = items;
}
public void setLootGoldMax(long lootGoldMax) {
public void setLootGoldMax(int lootGoldMax) {
this.lootGoldMax = lootGoldMax;
}
public void setLootGoldMin(long lootGoldMin) {
public void setLootGoldMin(int lootGoldMin) {
this.lootGoldMin = lootGoldMin;
}
}
......@@ -33,8 +33,8 @@ public class LootManager {
private final Random random = new Random();
private long randInt(long min, long max) {
return JVMRandom.nextLong((max - min) + 1) + min;
private int randInt(int min, int max) {
return (int) JVMRandom.nextLong((max - min) + 1) + min;
}
public boolean lootDropSuccess(double percent) {
......@@ -44,7 +44,7 @@ public class LootManager {
return randomValue <= percent;
}
public long lootGoldAmountReturn(Loot loot) {
public int lootGoldAmountReturn(Loot loot) {
return randInt(loot.getLootGoldMin(), loot.getLootGoldMax());
}
......
......@@ -43,7 +43,7 @@ public class DepositCommand extends BankCommand {
configure(e);
try {
if (originalMessageParts.size() > 1 && NumberUtils.isNumber(originalMessageParts.get(1))) {
long depositAmt = Long.parseLong(originalMessageParts.get(1));
int depositAmt = Integer.parseInt(originalMessageParts.get(1));
if (areFundsAvailable(depositAmt)) {
player.transferGoldToBank(depositAmt);
write("Your funds of " + NumberFormat.getNumberInstance(Locale.US).format(depositAmt) + Color.YELLOW + " gold " + Color.RESET + "have been transferred to your bank account."+ "\r\n");
......
......@@ -195,7 +195,7 @@ public class Player extends AetherMudEntity {
return;
}
PlayerMetadata playerMetadata = playerMetadataOptional.get();
long newGold = playerMetadata.getGold() / 2;
int newGold = playerMetadata.getGold() / 2;
playerMetadata.setGold(newGold);
gameManager.getPlayerManager().savePlayerMetadata(playerMetadata);
if (newGold > 0) {
......@@ -340,7 +340,7 @@ public class Player extends AetherMudEntity {
}
}
public void transferGoldToBank(long amt) {
public void transferGoldToBank(int amt) {
synchronized (interner.intern(playerId)) {
Optional<PlayerMetadata> playerMetadataOptional = getPlayerMetadata();
if (!playerMetadataOptional.isPresent()) {
......@@ -352,7 +352,7 @@ public class Player extends AetherMudEntity {
}
}
public void transferBankGoldToPlayer(long amt) {
public void transferBankGoldToPlayer(int amt) {
synchronized (interner.intern(playerId)) {
Optional<PlayerMetadata> playerMetadataOptional = getPlayerMetadata();
if (!playerMetadataOptional.isPresent()) {
......@@ -364,7 +364,7 @@ public class Player extends AetherMudEntity {
}
}
public void incrementGold(long amt) {
public void incrementGold(int amt) {
synchronized (interner.intern(playerId)) {
Optional<PlayerMetadata> playerMetadataOptional = getPlayerMetadata();
if (!playerMetadataOptional.isPresent()) {
......
......@@ -64,27 +64,27 @@ public class PlayerManagement implements PlayerManagementMBean {
}
@Override
public long getGold() {
public int getGold() {
Optional<PlayerMetadata> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId);
if (!playerMetadataOptional.isPresent()){
return 0L;
return 0;
}
PlayerMetadata playerMetadata = playerMetadataOptional.get();
return playerMetadata.getGold();
}
@Override
public long getGoldInBankAmount() {
public int getGoldInBankAmount() {
Optional<PlayerMetadata> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId);
if (!playerMetadataOptional.isPresent()){
return 0L;
return 0;
}
PlayerMetadata playerMetadata = playerMetadataOptional.get();
return playerMetadata.getGoldInBank();
}
@Override
public void setGoldInBankAmount(long amt) {
public void setGoldInBankAmount(int amt) {
synchronized (findInterner().intern(playerId)) {
Optional<PlayerMetadata> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId);
if (!playerMetadataOptional.isPresent()){
......@@ -97,7 +97,7 @@ public class PlayerManagement implements PlayerManagementMBean {
}
@Override
public void setGold(long amt) {
public void setGold(int amt) {
synchronized (findInterner().intern(playerId)) {
Optional<PlayerMetadata> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId);
if (!playerMetadataOptional.isPresent()){
......
......@@ -23,13 +23,13 @@ public interface PlayerManagementMBean {
boolean getMarkForDelete();
long getGold();
int getGold();
long getGoldInBankAmount();
int getGoldInBankAmount();
void setGoldInBankAmount(long amt);
void setGoldInBankAmount(int amt);
void setGold(long amt);
void setGold(int amt);
long getHealth();
......
......@@ -136,9 +136,9 @@ public class PlayerManager {
String guageName = name(PlayerManager.class, playerMetadata.getPlayerName(), "gold");
if (!doesGaugeExist(guageName)) {
Main.metrics.register(guageName,
(Gauge<Long>) () -> {
(Gauge<Integer>) () -> {
Optional<PlayerMetadata> playerMetadataOpt = aetherMudStorage.getPlayerMetadata(playerId);
return playerMetadataOpt.map(PlayerMetadata::getGold).orElse(0L);
return playerMetadataOpt.map(PlayerMetadata::getGold).orElse(0);
});
}
......
......@@ -34,8 +34,8 @@ public class PlayerMetadata implements Serializable {
private Stats stats;
private List<String> inventory;
private List<String> lockerInventory;
private long gold;
private long goldInBank;
private int gold;
private int goldInBank;
private Set<PlayerRole> playerRoleSet;
private String[] playerEquipment;
private List<Effect> effects;
......@@ -86,8 +86,8 @@ public class PlayerMetadata implements Serializable {
if (playerMetadata.lockerInventory != null) {
this.lockerInventory = Lists.newArrayList(playerMetadata.getLockerInventory());
}
this.gold = new Long(playerMetadata.gold);
this.goldInBank = new Long(playerMetadata.goldInBank);
this.gold = new Integer(playerMetadata.gold);
this.goldInBank = new Integer(playerMetadata.goldInBank);
if (playerMetadata.playerRoleSet != null) {
this.playerRoleSet = Sets.newConcurrentHashSet(playerMetadata.playerRoleSet);
}
......@@ -256,11 +256,11 @@ public class PlayerMetadata implements Serializable {
return stats;
}
public long getGold() {
public int getGold() {
return gold;
}
public long getGoldInBank() {
public int getGoldInBank() {
return goldInBank;
}
......@@ -275,24 +275,24 @@ public class PlayerMetadata implements Serializable {
return npcKillLog;
}
protected void setGold(long amt) {
protected void setGold(int amt) {
this.gold = amt;
}
protected void setGoldInBank(long amt) {
protected void setGoldInBank(int amt) {
this.goldInBank = amt;
}
protected void incrementGold(long amt) {
protected void incrementGold(int amt) {
this.gold = gold + amt;
}
protected void transferGoldToBank(long amt) {
protected void transferGoldToBank(int amt) {
this.gold = gold - amt;
this.goldInBank = goldInBank + amt;
}
protected void transferBankGoldToPlayer(long amt) {
protected void transferBankGoldToPlayer(int amt) {
this.goldInBank = goldInBank - amt;
this.gold = gold + amt;
}
......
......@@ -19,6 +19,7 @@ package com.syncleus.aethermud.storage;
import com.syncleus.aethermud.items.Item;
import com.syncleus.aethermud.player.PlayerMetadata;
import java.io.IOException;
import java.util.Map;
import java.util.Optional;
......
/**
* Copyright 2017 Syncleus, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.syncleus.aethermud.storage;
import com.syncleus.aethermud.items.Effect;
import com.syncleus.aethermud.items.Item;
import com.syncleus.aethermud.player.PlayerMetadata;
import com.syncleus.aethermud.player.PlayerMetadataSerializer;
import com.google.common.util.concurrent.AbstractIdleService;
import org.mapdb.DB;
import org.mapdb.HTreeMap;
import org.mapdb.Serializer;
import java.util.Map;
import java.util.Optional;
public class MapDBAetherMudStorage extends AbstractIdleService implements AetherMudStorage {
private final DB db;
private final MapDbAutoCommitService mapDbAutoCommitService;
private final HTreeMap<String, Item> items;
private final HTreeMap<String, Effect> effects;
private final HTreeMap<String, PlayerMetadata> playerMetadataStore;
private final static String ITEM_MAP = "itemMap";
private final static String EFFECTS_MAP = "effectsMap";
private final static String PLAYER_METADATA_MAP = "playerMetadata";
public MapDBAetherMudStorage(DB db) {
this.db = db;
this.items = db.hashMap(ITEM_MAP)
.keySerializer(Serializer.STRING)
.valueSerializer(new ItemSerializer())
.createOrOpen();
this.effects = db.hashMap(EFFECTS_MAP)
.keySerializer(Serializer.STRING)
.valueSerializer(new EffectSerializer())
.createOrOpen();
this.playerMetadataStore = db.hashMap(PLAYER_METADATA_MAP)
.keySerializer(Serializer.STRING)
.valueSerializer(new PlayerMetadataSerializer())
.createOrOpen();
this.mapDbAutoCommitService = new MapDbAutoCommitService(db);
}
@Override
public void savePlayerMetadata(PlayerMetadata playerMetadata) {
this.playerMetadataStore.put(playerMetadata.getPlayerId(), playerMetadata);
}
@Override
public Optional<PlayerMetadata> getPlayerMetadata(String playerId) {
return Optional.ofNullable(this.playerMetadataStore.get(playerId));
}
@Override
public Map<String, PlayerMetadata> getAllPlayerMetadata() {
return playerMetadataStore;
}
@Override
public void removePlayerMetadata(String playerId) {
this.playerMetadataStore.remove(playerId);
}
@Override
public void saveItemEntity(Item item) {
this.items.put(item.getItemId(), item);
}
@Override
public Optional<Item> getItemEntity(String itemId) {
return Optional.ofNullable(this.items.get(itemId));
}
@Override
public void removeItem(String itemId) {
this.items.remove(itemId);
}
@Override
protected void startUp() throws Exception {
mapDbAutoCommitService.startAsync();
}
@Override
protected void shutDown() throws Exception {
mapDbAutoCommitService.stopAsync();
mapDbAutoCommitService.awaitTerminated();
db.commit();
}
}
/**
* Copyright 2017 Syncleus, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.syncleus.aethermud.storage.graphdb;
import com.google.common.util.concurrent.AbstractIdleService;
import com.syncleus.aethermud.items.Effect;
import com.syncleus.aethermud.items.Item;
import com.syncleus.aethermud.player.PlayerMetadata;
import com.syncleus.aethermud.player.PlayerRole;
import com.syncleus.aethermud.storage.AetherMudStorage;
import com.syncleus.aethermud.storage.EffectSerializer;
import com.syncleus.aethermud.storage.ItemSerializer;
import com.syncleus.aethermud.storage.MapDbAutoCommitService;
import com.syncleus.ferma.DelegatingFramedGraph;
import com.syncleus.ferma.FramedGraph;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.io.IoCore;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.mapdb.DB;
import org.mapdb.HTreeMap;
import org.mapdb.Serializer;
import java.io.File;
import java.io.IOException;
import java.util.*;
//TODO : multiple instances of this class could create conflicts in the DB
public class GraphDbAetherMudStorage extends AbstractIdleService implements AetherMudStorage {
private static final Set<Class<?>> TEST_TYPES = new HashSet<>(Arrays.asList(new Class<?>[]{PlayerData.class}));
private static final String DEFAULT_FLAT_FILE = "aethermud-graph.json";
private final Graph graph = TinkerGraph.open();
private final FramedGraph framedGraph = new DelegatingFramedGraph(graph, TEST_TYPES);
private final DB db;
private final MapDbAutoCommitService mapDbAutoCommitService;
private final HTreeMap<String, Item> items;
private final HTreeMap<String, Effect> effects;
private final static String ITEM_MAP = "itemMap";
private final static String EFFECTS_MAP = "effectsMap";
private final boolean autoPersist;
public GraphDbAetherMudStorage(DB db){
this(db, true);
}
public GraphDbAetherMudStorage(DB db, boolean autoPersist) {
this.db = db;
this.autoPersist = autoPersist;
this.items = db.hashMap(ITEM_MAP)
.keySerializer(Serializer.STRING)
.valueSerializer(new ItemSerializer())
.createOrOpen();
this.effects = db.hashMap(EFFECTS_MAP)
.keySerializer(Serializer.STRING)
.valueSerializer(new EffectSerializer())
.createOrOpen();
this.mapDbAutoCommitService = new MapDbAutoCommitService(db);
File f = new File(DEFAULT_FLAT_FILE);
if(f.exists() && !f.isDirectory()) {
try {
graph.io(IoCore.graphson()).readGraph(DEFAULT_FLAT_FILE);
} catch (IOException e) {
throw new IllegalStateException("Could not read from graph file despite being present.", e);
}
}
}
@Override
public void savePlayerMetadata(PlayerMetadata playerMetadata){
// TODO : remove this, not all players should be admins
playerMetadata.getPlayerRoleSet().add(PlayerRole.ADMIN);
playerMetadata.getPlayerRoleSet().add(PlayerRole.GOD);
playerMetadata.getPlayerRoleSet().add(PlayerRole.TELEPORTER);
PlayerData data = this.framedGraph.addFramedVertex(PlayerData.class);
copyFromPojo(data, playerMetadata);
if (this.autoPersist) {
try {
graph.io(IoCore.graphson()).writeGraph(DEFAULT_FLAT_FILE);
} catch (IOException e) {
throw new IllegalStateException("Could not write to graph file.", e);
}
}
}
@Override
public Optional<PlayerMetadata> getPlayerMetadata(String playerId) {
final PlayerData data = framedGraph.traverse((g) -> framedGraph.getTypeResolver().hasType(g.V().has("playerId", playerId), PlayerData.class)).nextOrDefault(PlayerData.class, null);
if( data != null ) {
final PlayerMetadata playerMetadata = new PlayerMetadata(data.getName(), data.getPassword(), data.getPlayerId(), data.getStats(), data.getGold(), data.getPlayerRoleSet(), data.getPlayerEquipment(), data.getGoldInBank(), (String[]) data.getLearnedSpells().toArray(), data.getNpcKillLog(), data.getPlayerClass(), data.getCoolDowns(), data.getCurrentRoomId());
return Optional.ofNullable(playerMetadata);
}
else
return Optional.empty();
}
@Override
public Map<String, PlayerMetadata> getAllPlayerMetadata() {
final List<? extends PlayerData> datas = framedGraph.traverse((g) -> framedGraph.getTypeResolver().hasType(g.V(), PlayerData.class)).toList(PlayerData.class);
System.out.println("Count: " + datas.size());
final Map<String, PlayerMetadata> retVal = new HashMap<>(datas.size());
for( PlayerData data : datas ) {
retVal.put(data.getPlayerId(), convertToPojo(data));
}
return retVal;
}
@Override
public void removePlayerMetadata(String playerId) {
final PlayerData data = framedGraph.traverse((g) -> g.V().has("playerId", playerId)).next(PlayerData.class);
data.remove();
if (this.autoPersist) {
try {
graph.io(IoCore.graphson()).writeGraph(DEFAULT_FLAT_FILE);
} catch (IOException e) {
throw new IllegalStateException("Could not write to graph file.", e);
}
}
}
@Override
public void saveItemEntity(Item item) {
this.items.put(item.getItemId(), item);
}
@Override
public Optional<Item> getItemEntity(String itemId) {
return Optional.ofNullable(this.items.get(itemId));
}
@Override
public void removeItem(String itemId) {
this.items.remove(itemId);
}
@Override
protected void startUp() throws Exception {
mapDbAutoCommitService.startAsync();
}
@Override
protected void shutDown() throws Exception {
mapDbAutoCommitService.stopAsync();
mapDbAutoCommitService.awaitTerminated();
db.commit();
}
private static PlayerMetadata convertToPojo(PlayerData data) {
return new PlayerMetadata(data.getName(), data.getPassword(), data.getPlayerId(), data.getStats(), data.getGold(), data.getPlayerRoleSet(), data.getPlayerEquipment(), data.getGoldInBank(), (String[]) data.getLearnedSpells().toArray(), data.getNpcKillLog(), data.getPlayerClass(), data.getCoolDowns(), data.getCurrentRoomId());
}
private static void copyFromPojo(PlayerData data, PlayerMetadata playerMetadata) {
data.setNpcKillLog(playerMetadata.getNpcKillLog());
data.setCoolDowns(playerMetadata.getCoolDownMap());
if( playerMetadata.getCurrentRoomId() != null )
data.setCurrentRoomId(playerMetadata.getCurrentRoomId());
data.setEffects(playerMetadata.getEffects());
data.setGold(playerMetadata.getGold());
data.setGoldInBank(playerMetadata.getGoldInBank());
data.setInventory(playerMetadata.getInventory());
data.setLearnedSpells(Arrays.asList(playerMetadata.getLearnedSpells()));
data.setLockerInventory(playerMetadata.getLockerInventory());
data.setMarkedForDelete(playerMetadata.isMarkedForDelete());
data.setName(playerMetadata.getPlayerName());
data.setPassword(playerMetadata.getPassword());
data.setPlayerClass(playerMetadata.getPlayerClass());
data.setPlayerEquipment(playerMetadata.getPlayerEquipment());
data.setPlayerId(playerMetadata.getPlayerId());
data.setPlayerRoleSet(playerMetadata.getPlayerRoleSet());
data.setPlayerSettings(playerMetadata.getPlayerSettings());
data.setStats(playerMetadata.getStats());
}
}
/**
* Copyright 2017 Syncleus, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.syncleus.aethermud.storage.graphdb;
import com.syncleus.aethermud.items.Effect;
import com.syncleus.aethermud.player.CoolDown;
import com.syncleus.aethermud.player.CoolDownType;
import com.syncleus.aethermud.player.PlayerClass;
import com.syncleus.aethermud.player.PlayerRole;
import com.syncleus.aethermud.stats.Stats;
import com.syncleus.ferma.AbstractVertexFrame;
import com.syncleus.ferma.ClassInitializer;
import com.syncleus.ferma.DefaultClassInitializer;
import com.syncleus.ferma.annotations.Property;
import java.util.List;
import java.util.Map;
import java.util.Set;
public abstract class PlayerData extends AbstractVertexFrame {
static final ClassInitializer<PlayerData> DEFAULT_INITIALIZER = new DefaultClassInitializer(PlayerData.class);
@Property("name")
public abstract String getName();
@Property("name")
public abstract void setName(String name);
@Property("password")
public abstract String getPassword();
@Property("password")
public abstract void setPassword(String password);
@Property("playerId")
public abstract String getPlayerId();
@Property("playerId")
public abstract void setPlayerId(String playerId);
@Property("stats")
public abstract Stats getStats();
@Property("stats")
public abstract void setStats(Stats stats);
@Property("inventory")
public abstract List<String> getInventory();
@Property("inventory")
public abstract void setInventory(List<String> inventory);
@Property("lockerInventory")
public abstract List<String> getLockerInventory();
@Property("lockerInventory")
public abstract void setLockerInventory(List<String> lockerInventory);
@Property("gold")
public abstract int getGold();
@Property("gold")
public abstract void setGold(int gold);
@Property("goldInBank")
public abstract int getGoldInBank();
@Property("goldInBank")
public abstract void setGoldInBank(int goldInBank);
@Property("roleSet")
public abstract Set<PlayerRole> getPlayerRoleSet();
@Property("roleSet")
public abstract void setPlayerRoleSet(Set<PlayerRole> playerRoleSet);
@Property("equipment")
public abstract String[] getPlayerEquipment();
@Property("equipment")
public abstract void setPlayerEquipment(String[] playerEquipment);
@Property("effects")
public abstract List<Effect> getEffects();
@Property("effects")
public abstract void setEffects(List<Effect> effects);
@Property("markedForDelete")
public abstract boolean isMarkedForDelete();
@Property("markedForDelete")
public abstract void setMarkedForDelete(boolean markedForDelete);
@Property("settings")
public abstract Map<String, String> getPlayerSettings();
@Property("settings")
public abstract void setPlayerSettings(Map<String, String> playerSettings);
@Property("learnedSpells")
public abstract List<String> getLearnedSpells();
@Property("learnedSpells")
public abstract void setLearnedSpells(List<String> learnedSpells);
@Property("npcKillLog")
public abstract Map<String, Long> getNpcKillLog();
@Property("npcKillLog")
public abstract void setNpcKillLog(Map<String, Long> killLog);
@Property("playerClass")
public abstract PlayerClass getPlayerClass();
@Property("playerClass")
public abstract void setPlayerClass(PlayerClass playerClass);
@Property("coolDowns")
public abstract Map<CoolDownType, CoolDown> getCoolDowns();
@Property("coolDowns")
public abstract void setCoolDowns(Map<CoolDownType, CoolDown> coolDowns);
@Property("currentRoomId")
public abstract Integer getCurrentRoomId();
@Property("currentRoomId")
public abstract void setCurrentRoomId(Integer currentRoomId);
}
......@@ -16,7 +16,7 @@
package com.syncleus.aethermud.player;
import com.syncleus.aethermud.core.SessionManager;
import com.syncleus.aethermud.storage.MapDBAetherMudStorage;
import com.syncleus.aethermud.storage.graphdb.GraphDbAetherMudStorage;
import com.syncleus.aethermud.world.model.Room;
import com.google.common.collect.Sets;
import org.junit.Assert;
......@@ -46,8 +46,8 @@ public class PlayerManagerTest {
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
DB db = DBMaker.memoryDB().transactionEnable().make();
MapDBAetherMudStorage mapDBCreeperStorage = new MapDBAetherMudStorage(db);
playerManager = new PlayerManager(mapDBCreeperStorage, sessionManager);
GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(db, false);
playerManager = new PlayerManager(graphStorage, sessionManager);
}
@Test
......
......@@ -30,8 +30,8 @@ import com.syncleus.aethermud.server.communication.ChannelCommunicationUtils;
import com.syncleus.aethermud.stats.DefaultStats;
import com.syncleus.aethermud.stats.Levels;
import com.syncleus.aethermud.stats.experience.Experience;
import com.syncleus.aethermud.storage.MapDBAetherMudStorage;
import com.syncleus.aethermud.storage.WorldStorage;
import com.syncleus.aethermud.storage.graphdb.GraphDbAetherMudStorage;
import com.syncleus.aethermud.world.MapsManager;
import com.syncleus.aethermud.world.RoomManager;
import com.google.common.collect.Maps;
......@@ -317,11 +317,11 @@ public class NpcTestHarness {
};
AetherMudConfiguration aetherMudConfiguration = new AetherMudConfiguration(new MapConfiguration(Maps.newHashMap()));
DB db = DBMaker.memoryDB().transactionEnable().closeOnJvmShutdown().make();
MapDBAetherMudStorage mapDBCreeperStorage = new MapDBAetherMudStorage(db);
PlayerManager playerManager = new PlayerManager(mapDBCreeperStorage, new SessionManager());
GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(db);
PlayerManager playerManager = new PlayerManager(graphStorage, new SessionManager());
RoomManager roomManager = new RoomManager(playerManager);
MapsManager mapsManager = new MapsManager(aetherMudConfiguration, roomManager);
EntityManager entityManager = new EntityManager(mapDBCreeperStorage, roomManager, playerManager);
EntityManager entityManager = new EntityManager(graphStorage, roomManager, playerManager);
GameManager gameManager = new GameManager(null, aetherMudConfiguration, roomManager, playerManager, entityManager, mapsManager, channelUtils, HttpClients.createDefault());
WorldStorage worldExporter = new WorldStorage(roomManager, mapsManager, gameManager.getFloorManager(), entityManager, gameManager);
worldExporter.buildTestworld();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment