Skip to content

Commit

Permalink
add some events
Browse files Browse the repository at this point in the history
  • Loading branch information
Brokkonaut committed Sep 28, 2022
1 parent fe13390 commit 0220a81
Show file tree
Hide file tree
Showing 12 changed files with 159 additions and 8 deletions.
17 changes: 11 additions & 6 deletions src/main/java/de/cubeside/globalserver/ClientConnection.java
Expand Up @@ -205,16 +205,17 @@ void setClient(ClientConfig client) {
this.client = client;
}

public boolean addPlayer(UUID uuid, String name, long joinTime) {
public OnlinePlayer addPlayer(UUID uuid, String name, long joinTime) {
if (playersOnline.containsKey(uuid)) {
return false;
return null;
}
playersOnline.put(uuid, new OnlinePlayer(uuid, name, joinTime));
return true;
OnlinePlayer joined = new OnlinePlayer(uuid, name, joinTime);
playersOnline.put(uuid, joined);
return joined;
}

public boolean removePlayer(UUID uuid) {
return playersOnline.remove(uuid) != null;
public OnlinePlayer removePlayer(UUID uuid) {
return playersOnline.remove(uuid);
}

public boolean hasPlayer(UUID uuid) {
Expand Down Expand Up @@ -384,4 +385,8 @@ public void sendData(String server, String channel, UUID targetUuid, String targ
}
}
}

public OnlinePlayer getPlayer(UUID uuid) {
return playersOnline.get(uuid);
}
}
30 changes: 28 additions & 2 deletions src/main/java/de/cubeside/globalserver/GlobalServer.java
Expand Up @@ -12,6 +12,13 @@
import de.cubeside.globalserver.command.ServersCommand;
import de.cubeside.globalserver.command.StopCommand;
import de.cubeside.globalserver.event.EventBus;
import de.cubeside.globalserver.event.clientconnection.ClientConnectionDissolveEvent;
import de.cubeside.globalserver.event.clientconnection.ClientConnectionEstablishedEvent;
import de.cubeside.globalserver.event.globalserver.GlobalServerStartedEvent;
import de.cubeside.globalserver.event.globalserver.GlobalServerStoppedEvent;
import de.cubeside.globalserver.event.globalserver.GlobalServerStoppingEvent;
import de.cubeside.globalserver.event.player.PlayerJoinedEvent;
import de.cubeside.globalserver.event.player.PlayerQuitEvent;
import de.cubeside.globalserver.plugin.Plugin;
import de.cubeside.globalserver.plugin.PluginLoadException;
import de.cubeside.globalserver.plugin.PluginManager;
Expand Down Expand Up @@ -222,6 +229,12 @@ void run() {
LOGGER.error("Could not bind to " + port + ": " + e.getMessage());
return;
}
readLock.lock();
try {
getEventBus().dispatchEvent(new GlobalServerStartedEvent(this));
} finally {
readLock.unlock();
}
while (true) {
readLock.lock();
try {
Expand Down Expand Up @@ -251,6 +264,8 @@ void run() {
try {
listener.shutdown();

getEventBus().dispatchEvent(new GlobalServerStoppingEvent(this));

for (ClientConnection cc : new ArrayList<>(pendingConnections)) {
cc.closeConnection();
}
Expand All @@ -260,6 +275,8 @@ void run() {
}
connections.clear();

getEventBus().dispatchEvent(new GlobalServerStoppedEvent(this));

for (Plugin plugin : pluginManager.getPlugins()) {
LOGGER.info("Unloading plugin " + plugin.getDescription().getName() + " " + plugin.getDescription().getVersion());
plugin.onUnload();
Expand Down Expand Up @@ -339,6 +356,10 @@ void removeConnection(ClientConnection connection) {
cc.sendServerOffline(connection.getAccount());
}
}
for (OnlinePlayer player : connection.getPlayers()) {
getEventBus().dispatchEvent(new PlayerQuitEvent(connection, player));
}
getEventBus().dispatchEvent(new ClientConnectionDissolveEvent(connection));
}
} finally {
writeLock.unlock();
Expand Down Expand Up @@ -381,6 +402,7 @@ ClientConfig processLogin(ClientConnection connection, String account, byte[] pa
}
}
}
getEventBus().dispatchEvent(new ClientConnectionEstablishedEvent(connection));
return config;
} finally {
writeLock.unlock();
Expand All @@ -390,12 +412,14 @@ ClientConfig processLogin(ClientConnection connection, String account, byte[] pa
void processPlayerOnline(ClientConnection connection, UUID uuid, String name, long joinTime) {
writeLock.lock();
try {
if (connection.addPlayer(uuid, name, joinTime)) {
OnlinePlayer joined = connection.addPlayer(uuid, name, joinTime);
if (joined != null) {
for (ClientConnection cc : connections) {
if (cc != connection) {
cc.sendPlayerOnline(connection.getAccount(), uuid, name, joinTime);
}
}
getEventBus().dispatchEvent(new PlayerJoinedEvent(connection, joined));
}
} finally {
writeLock.unlock();
Expand All @@ -405,12 +429,14 @@ void processPlayerOnline(ClientConnection connection, UUID uuid, String name, lo
void processPlayerOffline(ClientConnection connection, UUID uuid) {
writeLock.lock();
try {
if (connection.removePlayer(uuid)) {
OnlinePlayer player = connection.removePlayer(uuid);
if (player != null) {
for (ClientConnection cc : connections) {
if (cc != connection) {
cc.sendPlayerOffline(connection.getAccount(), uuid);
}
}
getEventBus().dispatchEvent(new PlayerQuitEvent(connection, player));
}
} finally {
writeLock.unlock();
Expand Down
@@ -0,0 +1,9 @@
package de.cubeside.globalserver.event.clientconnection;

import de.cubeside.globalserver.ClientConnection;

public class ClientConnectionDissolveEvent extends ClientConnectionEvent {
public ClientConnectionDissolveEvent(ClientConnection clientConnection) {
super(clientConnection);
}
}
@@ -0,0 +1,9 @@
package de.cubeside.globalserver.event.clientconnection;

import de.cubeside.globalserver.ClientConnection;

public class ClientConnectionEstablishedEvent extends ClientConnectionEvent {
public ClientConnectionEstablishedEvent(ClientConnection clientConnection) {
super(clientConnection);
}
}
@@ -0,0 +1,16 @@
package de.cubeside.globalserver.event.clientconnection;

import de.cubeside.globalserver.ClientConnection;
import de.cubeside.globalserver.event.Event;

public class ClientConnectionEvent extends Event {
private final ClientConnection clientConnection;

public ClientConnectionEvent(ClientConnection clientConnection) {
this.clientConnection = clientConnection;
}

public ClientConnection getClientConnection() {
return clientConnection;
}
}
@@ -0,0 +1,16 @@
package de.cubeside.globalserver.event.globalserver;

import de.cubeside.globalserver.GlobalServer;
import de.cubeside.globalserver.event.Event;

public class GlobalServerEvent extends Event {
private final GlobalServer globalServer;

public GlobalServerEvent(GlobalServer globalServer) {
this.globalServer = globalServer;
}

public GlobalServer getGlobalServer() {
return globalServer;
}
}
@@ -0,0 +1,9 @@
package de.cubeside.globalserver.event.globalserver;

import de.cubeside.globalserver.GlobalServer;

public class GlobalServerStartedEvent extends GlobalServerEvent {
public GlobalServerStartedEvent(GlobalServer globalServer) {
super(globalServer);
}
}
@@ -0,0 +1,9 @@
package de.cubeside.globalserver.event.globalserver;

import de.cubeside.globalserver.GlobalServer;

public class GlobalServerStoppedEvent extends GlobalServerEvent {
public GlobalServerStoppedEvent(GlobalServer globalServer) {
super(globalServer);
}
}
@@ -0,0 +1,9 @@
package de.cubeside.globalserver.event.globalserver;

import de.cubeside.globalserver.GlobalServer;

public class GlobalServerStoppingEvent extends GlobalServerEvent {
public GlobalServerStoppingEvent(GlobalServer globalServer) {
super(globalServer);
}
}
@@ -0,0 +1,23 @@
package de.cubeside.globalserver.event.player;

import de.cubeside.globalserver.ClientConnection;
import de.cubeside.globalserver.OnlinePlayer;
import de.cubeside.globalserver.event.Event;

public class PlayerEvent extends Event {
private final OnlinePlayer onlinePlayer;
private final ClientConnection clientConnection;

public PlayerEvent(ClientConnection clientConnection, OnlinePlayer onlinePlayer) {
this.clientConnection = clientConnection;
this.onlinePlayer = onlinePlayer;
}

public OnlinePlayer getOnlinePlayer() {
return onlinePlayer;
}

public ClientConnection getClientConnection() {
return clientConnection;
}
}
@@ -0,0 +1,10 @@
package de.cubeside.globalserver.event.player;

import de.cubeside.globalserver.ClientConnection;
import de.cubeside.globalserver.OnlinePlayer;

public class PlayerJoinedEvent extends PlayerEvent {
public PlayerJoinedEvent(ClientConnection clientConnection, OnlinePlayer onlinePlayer) {
super(clientConnection, onlinePlayer);
}
}
@@ -0,0 +1,10 @@
package de.cubeside.globalserver.event.player;

import de.cubeside.globalserver.ClientConnection;
import de.cubeside.globalserver.OnlinePlayer;

public class PlayerQuitEvent extends PlayerEvent {
public PlayerQuitEvent(ClientConnection clientConnection, OnlinePlayer onlinePlayer) {
super(clientConnection, onlinePlayer);
}
}

0 comments on commit 0220a81

Please sign in to comment.