Added delivery being stored in DB.
This commit is contained in:
@@ -151,7 +151,7 @@ public class CollectionsManager {
|
||||
try {
|
||||
setPlayerCollection(player, collectionType.getCode(), cardCollection);
|
||||
if (cardCollection.getAll().size() > 0)
|
||||
addPackage(player, collectionType, cardCollection);
|
||||
addPackage(player, "New collection", collectionType, cardCollection);
|
||||
} finally {
|
||||
_readWriteLock.writeLock().unlock();
|
||||
}
|
||||
@@ -189,7 +189,7 @@ public class CollectionsManager {
|
||||
final CardCollection packContents = mutableCardCollection.openPack(packId, selection, packsStorage);
|
||||
if (packContents != null) {
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
addPackage(player, collectionType, packContents);
|
||||
addPackage(player, "Opened pack", collectionType, packContents);
|
||||
}
|
||||
return packContents;
|
||||
} finally {
|
||||
@@ -210,7 +210,7 @@ public class CollectionsManager {
|
||||
}
|
||||
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
addPackage(player, collectionType, addedCards);
|
||||
addPackage(player, "Items added to collection", collectionType, addedCards);
|
||||
}
|
||||
} finally {
|
||||
_readWriteLock.writeLock().unlock();
|
||||
@@ -234,6 +234,12 @@ public class CollectionsManager {
|
||||
mutableCardCollection.addItem(blueprintId2, count2);
|
||||
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
|
||||
DefaultCardCollection newCards = new DefaultCardCollection();
|
||||
newCards.addItem(blueprintId2, count2);
|
||||
|
||||
addPackage(player, "Trading items", collectionType, newCards);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -253,6 +259,11 @@ public class CollectionsManager {
|
||||
mutableCardCollection.addItem(blueprintId, 1);
|
||||
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
|
||||
DefaultCardCollection newCards = new DefaultCardCollection();
|
||||
newCards.addItem(blueprintId, 1);
|
||||
|
||||
addPackage(player, "Items bought", collectionType, newCards);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -272,6 +283,10 @@ public class CollectionsManager {
|
||||
mutableCardCollection.addCurrency(currency);
|
||||
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
|
||||
DefaultCardCollection newCurrency = new DefaultCardCollection();
|
||||
newCurrency.addCurrency(currency);
|
||||
addPackage(player, "Selling items", collectionType, newCurrency);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -280,22 +295,29 @@ public class CollectionsManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void addCurrencyToPlayerCollection(String player, CollectionType collectionType, int currency) {
|
||||
addCurrencyToPlayerCollection(_playerDAO.getPlayer(player), collectionType, currency);
|
||||
public void addCurrencyToPlayerCollection(String player, String reason, CollectionType collectionType, int currency) {
|
||||
addCurrencyToPlayerCollection(_playerDAO.getPlayer(player), reason, collectionType, currency);
|
||||
}
|
||||
|
||||
public void addCurrencyToPlayerCollection(Player player, CollectionType collectionType, int currency) {
|
||||
_readWriteLock.writeLock().lock();
|
||||
try {
|
||||
final CardCollection playerCollection = getPlayerCollection(player, collectionType.getCode());
|
||||
if (playerCollection != null) {
|
||||
MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection);
|
||||
mutableCardCollection.addCurrency(currency);
|
||||
public void addCurrencyToPlayerCollection(Player player, String reason, CollectionType collectionType, int currency) {
|
||||
if (currency > 0) {
|
||||
_readWriteLock.writeLock().lock();
|
||||
try {
|
||||
final CardCollection playerCollection = getPlayerCollection(player, collectionType.getCode());
|
||||
if (playerCollection != null) {
|
||||
MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection);
|
||||
mutableCardCollection.addCurrency(currency);
|
||||
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
setPlayerCollection(player, collectionType.getCode(), mutableCardCollection);
|
||||
|
||||
DefaultCardCollection newCurrency = new DefaultCardCollection();
|
||||
newCurrency.addCurrency(currency);
|
||||
|
||||
addPackage(player, reason, collectionType, newCurrency);
|
||||
}
|
||||
} finally {
|
||||
_readWriteLock.writeLock().unlock();
|
||||
}
|
||||
} finally {
|
||||
_readWriteLock.writeLock().unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,7 +338,7 @@ public class CollectionsManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void addPackage(Player player, CollectionType collectionType, CardCollection cards) {
|
||||
_deliveryService.addPackage(player, collectionType.getFullName(), cards);
|
||||
private void addPackage(Player player, String reason, CollectionType collectionType, CardCollection cards) {
|
||||
_deliveryService.addPackage(player, reason, collectionType.getFullName(), cards);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.gempukku.lotro.collection;
|
||||
|
||||
import com.gempukku.lotro.game.CardCollection;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface DeliveryDAO {
|
||||
public boolean hasUndeliveredPackages(String player);
|
||||
public void addPackage(String player, String reason, String name, CardCollection itemCollection);
|
||||
public Map<String, ? extends CardCollection> consumeUndeliveredPackages(String player);
|
||||
}
|
||||
@@ -1,38 +1,25 @@
|
||||
package com.gempukku.lotro.collection;
|
||||
|
||||
import com.gempukku.lotro.game.CardCollection;
|
||||
import com.gempukku.lotro.game.DefaultCardCollection;
|
||||
import com.gempukku.lotro.game.MutableCardCollection;
|
||||
import com.gempukku.lotro.game.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.locks.ReadWriteLock;
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
|
||||
public class DeliveryService {
|
||||
private Map<String, Map<String, MutableCardCollection>> _undeliveredDeliverables = new HashMap<String, Map<String, MutableCardCollection>>();
|
||||
private DeliveryDAO _deliveryDAO;
|
||||
|
||||
private ReadWriteLock _deliveryLock = new ReentrantReadWriteLock(false);
|
||||
|
||||
public void addPackage(Player player, String packageName, CardCollection itemCollection) {
|
||||
public DeliveryService(DeliveryDAO deliveryDAO) {
|
||||
_deliveryDAO = deliveryDAO;
|
||||
}
|
||||
|
||||
public void addPackage(Player player, String reason, String packageName, CardCollection itemCollection) {
|
||||
_deliveryLock.writeLock().lock();
|
||||
try {
|
||||
Map<String, MutableCardCollection> playerDeliverables = _undeliveredDeliverables.get(player.getName());
|
||||
if (playerDeliverables == null) {
|
||||
playerDeliverables = new HashMap<String, MutableCardCollection>();
|
||||
_undeliveredDeliverables.put(player.getName(), playerDeliverables);
|
||||
}
|
||||
MutableCardCollection deliverablesInCollection = playerDeliverables.get(packageName);
|
||||
if (deliverablesInCollection == null) {
|
||||
deliverablesInCollection = new DefaultCardCollection();
|
||||
playerDeliverables.put(packageName, deliverablesInCollection);
|
||||
}
|
||||
for (Map.Entry<String, CardCollection.Item> itemToAdd : itemCollection.getAll().entrySet()) {
|
||||
String blueprintId = itemToAdd.getKey();
|
||||
int count = itemToAdd.getValue().getCount();
|
||||
deliverablesInCollection.addItem(blueprintId, count);
|
||||
}
|
||||
_deliveryDAO.addPackage(player.getName(), reason, packageName, itemCollection);
|
||||
} finally {
|
||||
_deliveryLock.writeLock().unlock();
|
||||
}
|
||||
@@ -41,7 +28,7 @@ public class DeliveryService {
|
||||
public boolean hasUndeliveredPackages(String player) {
|
||||
_deliveryLock.readLock().lock();
|
||||
try {
|
||||
return _undeliveredDeliverables.containsKey(player);
|
||||
return _deliveryDAO.hasUndeliveredPackages(player);
|
||||
} finally {
|
||||
_deliveryLock.readLock().unlock();
|
||||
}
|
||||
@@ -50,7 +37,7 @@ public class DeliveryService {
|
||||
public Map<String, ? extends CardCollection> consumePackages(Player player) {
|
||||
_deliveryLock.writeLock().lock();
|
||||
try {
|
||||
return _undeliveredDeliverables.remove(player.getName());
|
||||
return _deliveryDAO.consumeUndeliveredPackages(player.getName());
|
||||
} finally {
|
||||
_deliveryLock.writeLock().unlock();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
package com.gempukku.lotro.db;
|
||||
|
||||
import com.gempukku.lotro.collection.CollectionSerializer;
|
||||
import com.gempukku.lotro.collection.DeliveryDAO;
|
||||
import com.gempukku.lotro.game.CardCollection;
|
||||
import com.gempukku.lotro.game.DefaultCardCollection;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.sql.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class DbDeliveryDAO implements DeliveryDAO {
|
||||
private DbAccess _dbAccess;
|
||||
private CollectionSerializer _collectionSerializer;
|
||||
|
||||
public DbDeliveryDAO(DbAccess dbAccess, CollectionSerializer collectionSerializer) {
|
||||
_dbAccess = dbAccess;
|
||||
_collectionSerializer = collectionSerializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPackage(String player, String reason, String name, CardCollection itemCollection) {
|
||||
try {
|
||||
Connection connection = _dbAccess.getDataSource().getConnection();
|
||||
try {
|
||||
String sql = "insert into delivery (player, reason, name, date, collection, delivered) values (?, ?, ?, ?, ?, ?)";
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
try {
|
||||
statement.setString(1, player);
|
||||
statement.setString(2, reason);
|
||||
statement.setString(3, name);
|
||||
statement.setLong(4, System.currentTimeMillis());
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
_collectionSerializer.serializeCollection(itemCollection, baos);
|
||||
statement.setBlob(5, new ByteArrayInputStream(baos.toByteArray()));
|
||||
statement.setInt(6, 0);
|
||||
statement.execute();
|
||||
} finally {
|
||||
statement.close();
|
||||
}
|
||||
} finally {
|
||||
connection.close();
|
||||
}
|
||||
} catch (SQLException exp) {
|
||||
throw new RuntimeException("Unable to insert new delivery", exp);
|
||||
} catch (IOException exp) {
|
||||
throw new RuntimeException("Unable to insert new delivery", exp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasUndeliveredPackages(String player) {
|
||||
try {
|
||||
Connection connection = _dbAccess.getDataSource().getConnection();
|
||||
try {
|
||||
String sql = "select count(*) from delivery where player=? and delivered=0";
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
try {
|
||||
statement.setString(1, player);
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
try {
|
||||
if (resultSet.next())
|
||||
return resultSet.getInt(1) > 0;
|
||||
else
|
||||
return false;
|
||||
} finally {
|
||||
resultSet.close();
|
||||
}
|
||||
} finally {
|
||||
statement.close();
|
||||
}
|
||||
} finally {
|
||||
connection.close();
|
||||
}
|
||||
} catch (SQLException exp) {
|
||||
throw new RuntimeException("Unable to check if there are any undelivered packages", exp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ? extends CardCollection> consumeUndeliveredPackages(String player) {
|
||||
try {
|
||||
Connection connection = _dbAccess.getDataSource().getConnection();
|
||||
try {
|
||||
String sql = "select name, collection from delivery where player=? and delivered=0";
|
||||
|
||||
PreparedStatement statement = connection.prepareStatement(sql);
|
||||
try {
|
||||
statement.setString(1, player);
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
try {
|
||||
Map<String, DefaultCardCollection> result = new HashMap<String, DefaultCardCollection>();
|
||||
while (resultSet.next()) {
|
||||
String name = resultSet.getString(1);
|
||||
|
||||
DefaultCardCollection cardCollection = result.get(name);
|
||||
if (cardCollection == null)
|
||||
cardCollection = new DefaultCardCollection();
|
||||
|
||||
Blob blob = resultSet.getBlob(2);
|
||||
try {
|
||||
InputStream inputStream = blob.getBinaryStream();
|
||||
try {
|
||||
CardCollection retrieved = _collectionSerializer.deserializeCollection(inputStream);
|
||||
cardCollection.addCurrency(retrieved.getCurrency());
|
||||
for (CardCollection.Item item : retrieved.getAll().values())
|
||||
cardCollection.addItem(item.getBlueprintId(), item.getCount());
|
||||
} finally {
|
||||
inputStream.close();
|
||||
}
|
||||
} finally {
|
||||
blob.free();
|
||||
}
|
||||
result.put(name, cardCollection);
|
||||
}
|
||||
return result;
|
||||
} finally {
|
||||
resultSet.close();
|
||||
}
|
||||
} finally {
|
||||
statement.close();
|
||||
}
|
||||
} finally {
|
||||
connection.close();
|
||||
}
|
||||
} catch (SQLException exp) {
|
||||
throw new RuntimeException("Unable to consume undelivered packages", exp);
|
||||
} catch (IOException exp) {
|
||||
throw new RuntimeException("Unable to consume undelivered packages", exp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,7 +101,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue {
|
||||
public synchronized void leavePlayer(CollectionsManager collectionsManager, Player player) {
|
||||
if (_players.contains(player.getName())) {
|
||||
if (_cost > 0)
|
||||
collectionsManager.addCurrencyToPlayerCollection(player, _currencyCollection, _cost);
|
||||
collectionsManager.addCurrencyToPlayerCollection(player, "Return for leaving queue", _currencyCollection, _cost);
|
||||
_players.remove(player.getName());
|
||||
_playerDecks.remove(player.getName());
|
||||
}
|
||||
@@ -111,7 +111,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue {
|
||||
public synchronized void leaveAllPlayers(CollectionsManager collectionsManager) {
|
||||
if (_cost > 0) {
|
||||
for (String player : _players)
|
||||
collectionsManager.addCurrencyToPlayerCollection(player, _currencyCollection, _cost);
|
||||
collectionsManager.addCurrencyToPlayerCollection(player, "Return for leaving queue", _currencyCollection, _cost);
|
||||
}
|
||||
_players.clear();
|
||||
_playerDecks.clear();
|
||||
|
||||
@@ -36,11 +36,11 @@ public abstract class AbstractResource {
|
||||
Integer lastReward = player.getLastLoginReward();
|
||||
if (lastReward == null) {
|
||||
_playerDao.setLastReward(player, latestMonday);
|
||||
_collectionManager.addCurrencyToPlayerCollection(player, new CollectionType("permanent", "My cards"), 20000);
|
||||
_collectionManager.addCurrencyToPlayerCollection(player, "Initial currency balance", new CollectionType("permanent", "My cards"), 20000);
|
||||
} else {
|
||||
if (latestMonday != lastReward) {
|
||||
if (_playerDao.updateLastReward(player, lastReward, latestMonday))
|
||||
_collectionManager.addCurrencyToPlayerCollection(player, new CollectionType("permanent", "My cards"), 5000);
|
||||
_collectionManager.addCurrencyToPlayerCollection(player, "Weekly currency reward", new CollectionType("permanent", "My cards"), 5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gempukku.lotro.server.provider;
|
||||
|
||||
import com.gempukku.lotro.collection.CollectionSerializer;
|
||||
import com.gempukku.lotro.collection.DeliveryDAO;
|
||||
import com.gempukku.lotro.db.*;
|
||||
import com.gempukku.lotro.game.LotroCardBlueprintLibrary;
|
||||
import com.gempukku.lotro.tournament.TournamentDAO;
|
||||
@@ -28,5 +29,6 @@ public class DaoBuilder {
|
||||
objectMap.put(DeckDAO.class, new DbDeckDAO(dbAccess, library));
|
||||
objectMap.put(CollectionDAO.class, new DbCollectionDAO(dbAccess, collectionSerializer));
|
||||
objectMap.put(PlayerDAO.class, new DbPlayerDAO(dbAccess));
|
||||
objectMap.put(DeliveryDAO.class, new DbDeliveryDAO(dbAccess, collectionSerializer));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gempukku.lotro.server.provider;
|
||||
|
||||
import com.gempukku.lotro.chat.ChatServer;
|
||||
import com.gempukku.lotro.collection.CollectionsManager;
|
||||
import com.gempukku.lotro.collection.DeliveryDAO;
|
||||
import com.gempukku.lotro.collection.DeliveryService;
|
||||
import com.gempukku.lotro.db.*;
|
||||
import com.gempukku.lotro.game.GameHistoryService;
|
||||
@@ -33,7 +34,8 @@ public class ServerBuilder {
|
||||
extract(objectMap, GameHistoryService.class)));
|
||||
|
||||
objectMap.put(DeliveryService.class,
|
||||
new DeliveryService());
|
||||
new DeliveryService(
|
||||
extract(objectMap, DeliveryDAO.class)));
|
||||
|
||||
objectMap.put(CollectionsManager.class,
|
||||
new CollectionsManager(
|
||||
|
||||
Reference in New Issue
Block a user