From 60d478bb1eb9a1b8332fc58a9f81e72c3f43ae23 Mon Sep 17 00:00:00 2001 From: MickWerf Date: Sun, 7 Jun 2020 14:12:48 +0200 Subject: [PATCH] Added automatic updates server side when data is changed --- core/src/netwerkprog/game/server/Server.java | 2 +- .../game/server/controllers/DataController.java | 16 +++++++++------- .../server/controllers/SessionController.java | 8 +++++++- .../game/util/data/DataChangeCallback.java | 5 +++++ 4 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 core/src/netwerkprog/game/util/data/DataChangeCallback.java diff --git a/core/src/netwerkprog/game/server/Server.java b/core/src/netwerkprog/game/server/Server.java index fbb5004..96bc1b0 100644 --- a/core/src/netwerkprog/game/server/Server.java +++ b/core/src/netwerkprog/game/server/Server.java @@ -13,7 +13,7 @@ public class Server { public void start() { this.sessionController = new SessionController(this); - this.dataController = new DataController(); + this.dataController = new DataController(sessionController); this.gameThreads = new HashMap<>(); this.sessionThread = new Thread(sessionController); diff --git a/core/src/netwerkprog/game/server/controllers/DataController.java b/core/src/netwerkprog/game/server/controllers/DataController.java index a5ecf54..4ea357b 100644 --- a/core/src/netwerkprog/game/server/controllers/DataController.java +++ b/core/src/netwerkprog/game/server/controllers/DataController.java @@ -1,23 +1,23 @@ package netwerkprog.game.server.controllers; -import netwerkprog.game.util.data.CharacterData; -import netwerkprog.game.util.data.Data; -import netwerkprog.game.util.data.DataCallback; -import netwerkprog.game.util.data.DataSource; +import netwerkprog.game.util.data.*; import netwerkprog.game.util.game.GameCharacter; import java.util.Arrays; import java.util.HashSet; public class DataController implements DataCallback { + private final DataChangeCallback callback; private final HashSet gameCharacters; - public DataController() { + public DataController(DataChangeCallback callback) { + this.callback = callback; gameCharacters = new HashSet<>(); } public void addCharacter(GameCharacter gameCharacter) { this.gameCharacters.add(gameCharacter); + callback.onDataChange(new CharacterData(gameCharacter.getName(), gameCharacter)); } public void addAllCharacters(GameCharacter... gameCharacters) { @@ -26,10 +26,12 @@ public class DataController implements DataCallback { public void removeCharacter(String name) { this.gameCharacters.removeIf(character -> character.getName().equals(name)); + callback.onDataChange(new CharacterData(name, getCharacter(name))); //todo modify Character data to allow for removal. } - public void removeCharacter(GameCharacter character) { - this.gameCharacters.remove(character); + public void removeCharacter(GameCharacter gameCharacter) { + this.gameCharacters.remove(gameCharacter); + callback.onDataChange(new CharacterData(gameCharacter.getName(), gameCharacter)); //todo modify Character data to allow for removal. } public void clearCharacters() { diff --git a/core/src/netwerkprog/game/server/controllers/SessionController.java b/core/src/netwerkprog/game/server/controllers/SessionController.java index 4014704..40a0293 100644 --- a/core/src/netwerkprog/game/server/controllers/SessionController.java +++ b/core/src/netwerkprog/game/server/controllers/SessionController.java @@ -5,6 +5,7 @@ import netwerkprog.game.server.ServerClient; import netwerkprog.game.util.application.Controller; import netwerkprog.game.util.data.ConnectionData; import netwerkprog.game.util.data.Data; +import netwerkprog.game.util.data.DataChangeCallback; import java.io.IOException; import java.io.ObjectInputStream; @@ -18,7 +19,7 @@ import java.util.Set; /** * The sessionController manages any connections from new clients and assigns individual threads to said clients. */ -public class SessionController extends Controller { +public class SessionController extends Controller implements DataChangeCallback { private Server server; private ServerSocket serverSocket; private final ArrayList clients = new ArrayList<>(); @@ -163,4 +164,9 @@ public class SessionController extends Controller { } System.out.println("[SERVER] networking shutdown "); } + + @Override + public void onDataChange(Data data) { + serverMessage(data); + } } diff --git a/core/src/netwerkprog/game/util/data/DataChangeCallback.java b/core/src/netwerkprog/game/util/data/DataChangeCallback.java new file mode 100644 index 0000000..ea78a7f --- /dev/null +++ b/core/src/netwerkprog/game/util/data/DataChangeCallback.java @@ -0,0 +1,5 @@ +package netwerkprog.game.util.data; + +public interface DataChangeCallback { + void onDataChange(Data data); +}