Archived
0

переведен функционал keep alive на сетевой модуль

This commit is contained in:
2018-09-16 20:47:37 +03:00
parent cb8566ae02
commit 3ee1b16c92
8 changed files with 68 additions and 68 deletions

View File

@@ -24,22 +24,14 @@ import static org.slf4j.helpers.MessageFormatter.format;
@Slf4j
@Component
public class H2PlayerManager implements PlayerManager, Runnable {
public class H2PlayerManager implements PlayerManager {
@Setter
@Autowired
private H2PlayerDAO h2playerDao;
private List<H2Player> playerList = Collections.synchronizedList(new ArrayList<>());
private final Object lock = new Object();
@Setter
private int keepAliveInterval = 1;
@Autowired
private World world;
@PostConstruct
public void init() {
(new Thread(this, "KeepAlive")).start();
}
@Override
public Player createPlayer(String name, EntityLocation location, World world) {
//TODO в дальнейшем следует в этом методе только имплементацию Player
@@ -65,11 +57,8 @@ public class H2PlayerManager implements PlayerManager, Runnable {
public void joinServer(Player player) {
//TODO в дальнейшем следует именно этому методу передать функции инсерта в БД
H2Player h2Player = (H2Player) player;
synchronized (lock) {
playerList.add(h2Player);
h2Player.setOnline(true);
lock.notify();
}
playerList.add(h2Player);
h2Player.setOnline(true);
}
@Override
@@ -79,13 +68,9 @@ public class H2PlayerManager implements PlayerManager, Runnable {
h2playerDao.update(h2Player);
} catch (SQLException e) {
log.error(format("Update player '{}'", h2Player.getName()).getMessage(), e);
synchronized (lock) {
playerList.remove(h2Player);
}
playerList.remove(h2Player);
} finally {
h2Player.setId(0);
h2Player.setOnline(false);
h2Player.setWorld(null);
h2Player.getLoadedChunks().clear();
}
}
@@ -153,27 +138,4 @@ public class H2PlayerManager implements PlayerManager, Runnable {
return h2Player;
}
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
while(getCountPlayers() == 0) {
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
return;
}
}
}
getBroadcastChannel().sendKeepAlive();
try {
Thread.sleep(keepAliveInterval);
} catch (InterruptedException e) {
return;
}
}
}
}