From 6a4e157605299fa42b25b3fd5cffd1c6a5d4132b Mon Sep 17 00:00:00 2001 From: ole Date: Sat, 30 Nov 2024 17:09:44 +0100 Subject: [PATCH] add: Network implementation --- src/HitResponse.java | 14 ++++++++++++++ src/LocalPlayer.java | 16 +++++++++++++++- src/OnlinePlayer.java | 9 ++++++++- src/OnlinePlayer_1_1_0.java | 38 +++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/HitResponse.java b/src/HitResponse.java index 8f1d8ad..89f713a 100644 --- a/src/HitResponse.java +++ b/src/HitResponse.java @@ -8,6 +8,15 @@ public class HitResponse { this.type = type; this.point = point; } + + public HitResponse (int typeIndex, Point point) { + if (typeIndex >= 0 && typeIndex < HitResponseType.values().length) { + this.type = HitResponseType.values()[typeIndex]; + this.point = point; + } else { + throw new IllegalArgumentException(); + } + } public HitResponseType getHitResponse() { return this.type; @@ -20,4 +29,9 @@ public class HitResponse { public void setType(HitResponseType type) { this.type = type; } + + @Override + public String toString() { + return this.getPoint().toString() + " " + this.type.ordinal(); + } } diff --git a/src/LocalPlayer.java b/src/LocalPlayer.java index cfa7cab..8e13a7a 100644 --- a/src/LocalPlayer.java +++ b/src/LocalPlayer.java @@ -3,6 +3,20 @@ public class LocalPlayer extends Player { LocalPlayer(int size) { super(size); } - + + @Override + public synchronized void receiveShoot(Point point) { + HitResponse hitResponse = board.getHitResponsOnPoint(point); + if (!(hitResponse == null)){ + enemy.receiveHit(hitResponse); + } else { + enemy.receiveHit(this.board.hit(point)); + } + } + + @Override + public synchronized void receiveHit(HitResponse hitResponse) { + enemy.board.addHits(hitResponse); + } } \ No newline at end of file diff --git a/src/OnlinePlayer.java b/src/OnlinePlayer.java index f3aaaf8..df62263 100644 --- a/src/OnlinePlayer.java +++ b/src/OnlinePlayer.java @@ -1,12 +1,19 @@ public abstract class OnlinePlayer extends Player implements AsyncSocketListener{ - private AsyncSocket socket; + protected AsyncSocket socket; public OnlinePlayer(int size, AsyncSocket socket) { super(size); this.socket = socket; + socket.setHandler(this); //TODO Auto-generated constructor stub } public abstract void receive(String message); + @Override + public abstract void receiveShoot(Point point); + + @Override + public abstract void receiveHit(HitResponse hitResponse); + } diff --git a/src/OnlinePlayer_1_1_0.java b/src/OnlinePlayer_1_1_0.java index b199952..d14e197 100644 --- a/src/OnlinePlayer_1_1_0.java +++ b/src/OnlinePlayer_1_1_0.java @@ -5,11 +5,49 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer { super(size, socket); } + + @Override public void receive(String message) { SocketPackage p = new SocketPackage(message); // TODO: parse package + switch (p.getName()) { + case "SHOOT": + if (Point.isValidSyntax(p.getData())){ + Point point = new Point(p.getData()); + this.enemy.receiveShoot(point); + } + break; + + case "HIT": + List data = p.splitData(); + if (data.size()==2){ + Point point = new Point(data.get(0)); + int typeIndex = Integer.parseInt(data.get(1)); + if (Point.isValidSyntax(data.get(0)) && typeIndex >= 0 && typeIndex < HitResponseType.values().length){ + this.enemy.receiveHit(new HitResponse(typeIndex, point)); + } + } + break; + + case "CHAT": + //TODO CHAT + break; + + default: + //nichts passier da Paket ungültig + break; + } } + @Override + public synchronized void receiveShoot(Point point){ + super.socket.send(new SocketPackage("SHOOT",point.toString())); + } + + @Override + public synchronized void receiveHit(HitResponse hitResponse) { + super.socket.send(new SocketPackage("HIT", hitResponse.toString())); + } } \ No newline at end of file