
com.tvd12.gamebox.manager.SynchronizedPlayerManager Maven / Gradle / Ivy
package com.tvd12.gamebox.manager;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.function.Predicate;
import java.util.function.Supplier;
import com.tvd12.gamebox.entity.Player;
import lombok.Getter;
public class SynchronizedPlayerManager extends AbstractPlayerManager
{
@Getter
protected final Object synchronizedLock = new Object();
public SynchronizedPlayerManager() {
this(999999999);
}
public SynchronizedPlayerManager(int maxPlayer) {
super(maxPlayer);
}
protected SynchronizedPlayerManager(Builder, ?> builder) {
super(builder);
}
@Override
public P getPlayer(String username) {
synchronized (synchronizedLock) {
return super.getPlayer(username);
}
}
@Override
public P getPlayer(String username, Supplier
playerSupplier) {
synchronized (synchronizedLock) {
return super.getPlayer(username, playerSupplier);
}
}
@Override
public List
getPlayerList() {
synchronized (synchronizedLock) {
return super.getPlayerList();
}
}
@Override
public List
getPlayerList(Predicate
predicate) {
synchronized (synchronizedLock) {
return super.getPlayerList(predicate);
}
}
@Override
public List getPlayerNames() {
synchronized (synchronizedLock) {
return super.getPlayerNames();
}
}
@Override
public boolean containsPlayer(String username) {
synchronized (synchronizedLock) {
return super.containsPlayer(username);
}
}
@Override
public void addPlayer(P player, boolean failIfAdded) {
synchronized (synchronizedLock) {
addPlayer0(player, failIfAdded);
}
logger.info("{} add player: {}, locks.size = {}, playersByName.size = {}", getMessagePrefix(), player, locks.size(), playersByName.size());
}
@Override
public void addPlayers(Collection players, boolean failIfAdded) {
synchronized (synchronizedLock) {
addPlayers0(players, failIfAdded);
}
logger.info("{} add players: {}, locks.size = {}, playersByName.size = {}", getMessagePrefix(), players, locks.size(), playersByName.size());
}
@Override
public P removePlayer(P player) {
synchronized (synchronizedLock) {
removePlayer0(player);
}
logger.info("{} remove player: {}, locks.size = {}, playersByName.size = {}", getMessagePrefix(), player, locks.size(), playersByName.size());
return player;
}
@Override
public void removePlayers(Collection
players) {
synchronized (synchronizedLock) {
removePlayers0(players);
}
logger.info("{} remove players: {}, locks.size = {}, playersByName.size = {}", getMessagePrefix(), players, locks.size(), playersByName.size());
}
@Override
public int getPlayerCount() {
synchronized (synchronizedLock) {
return super.getPlayerCount();
}
}
@Override
public boolean available() {
synchronized (synchronizedLock) {
return super.available();
}
}
@Override
public Lock getLock(String username) {
synchronized (synchronizedLock) {
return super.getLock(username);
}
}
@Override
public void removeLock(String username) {
synchronized (synchronizedLock) {
super.removeLock(username);
}
}
@Override
public boolean isEmpty() {
synchronized (synchronizedLock) {
return super.isEmpty();
}
}
@Override
public void clear() {
synchronized (synchronizedLock) {
super.clear();
}
}
public static Builder, ?> builder() {
return new Builder<>();
}
public static class Builder>
extends AbstractPlayerManager.Builder {
@Override
protected PlayerManager newProduct() {
return new SynchronizedPlayerManager<>(this);
}
}
}