Browse Source

Merge branch 'master' of ssh://git@gogs.informatik.hs-fulda.de/srieger/verteilte-systeme-bsc-ai-examples.git

master
Sebastian Rieger 6 years ago
parent
commit
c80a7ebdd9
  1. BIN
      VerteilteSysteme-Examples/build/RMIEchoServer.jar
  2. BIN
      VerteilteSysteme-Examples/build/RMIMandelbrotCalculationsServer.jar
  3. BIN
      VerteilteSysteme-Examples/build/TCPPerfServer.jar
  4. BIN
      VerteilteSysteme-Examples/build/TCPServer.jar
  5. BIN
      VerteilteSysteme-Examples/build/TCPServerMulti.jar
  6. BIN
      VerteilteSysteme-Examples/build/TCPTimeCounterRESTServer.jar
  7. BIN
      VerteilteSysteme-Examples/build/TCPTimeCounterServer.jar
  8. BIN
      VerteilteSysteme-Examples/build/UDPServer.jar
  9. BIN
      VerteilteSysteme-Examples/build/UDPServerMulti.jar
  10. BIN
      VerteilteSysteme-Examples/build/UDPTimeCounterServer.jar
  11. 64
      VerteilteSysteme-Examples/src/verteiltesysteme/aws/TCPTimeCounterRESTServer.java
  12. 27
      VerteilteSysteme-Examples/src/verteiltesysteme/aws/TCPTimeCounterRESTService.java
  13. 636
      VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java
  14. 211
      VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java
  15. 115
      VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer2.java
  16. 2
      VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/TCPClient.java
  17. 4
      VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/TCPServer.java
  18. 2
      VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/UDPClient.java
  19. 5
      VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/UDPServer.java

BIN
VerteilteSysteme-Examples/build/RMIEchoServer.jar

BIN
VerteilteSysteme-Examples/build/RMIMandelbrotCalculationsServer.jar

BIN
VerteilteSysteme-Examples/build/TCPPerfServer.jar

BIN
VerteilteSysteme-Examples/build/TCPServer.jar

BIN
VerteilteSysteme-Examples/build/TCPServerMulti.jar

BIN
VerteilteSysteme-Examples/build/TCPTimeCounterRESTServer.jar

BIN
VerteilteSysteme-Examples/build/TCPTimeCounterServer.jar

BIN
VerteilteSysteme-Examples/build/UDPServer.jar

BIN
VerteilteSysteme-Examples/build/UDPServerMulti.jar

BIN
VerteilteSysteme-Examples/build/UDPTimeCounterServer.jar

64
VerteilteSysteme-Examples/src/verteiltesysteme/aws/TCPTimeCounterRESTServer.java

@ -1,32 +1,52 @@
/* Beispiel angelehnt an http://www.torsten-horn.de/techdocs/jee-rest.htm */
package verteiltesysteme.aws;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;
import org.glassfish.grizzly.http.server.ErrorPageGenerator;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.grizzly.http.server.Request;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;
public class TCPTimeCounterRESTServer
{
public static void main( String[] args ) throws IOException, InterruptedException
{
String baseUrl = ( args.length > 0 ) ? args[0] : "http://0.0.0.0:36042";
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
URI.create( baseUrl ), new ResourceConfig( TCPTimeCounterRESTService.class ), false );
Runtime.getRuntime().addShutdownHook( new Thread( new Runnable() {
@Override
public void run() {
server.shutdownNow();
}
} ) );
server.start();
System.out.println("Grizzly-HTTP-Server gestartet");
System.out.println("Stoppen des Grizzly-HTTP-Servers mit: Strg+C\n");
System.out.println("RESTful Web Service URL: " + baseUrl + TCPTimeCounterRESTService.webContextPath);
Thread.currentThread().join();
}
public class TCPTimeCounterRESTServer {
public static void main(String[] args) throws IOException, InterruptedException {
String baseUrl = (args.length > 0) ? args[0] : "http://0.0.0.0:36042";
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(baseUrl),
new ResourceConfig(TCPTimeCounterRESTService.class), false);
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
server.shutdownNow();
}
}));
ErrorPageGenerator epg = new ErrorPageGenerator() {
@Override
public String generate(Request request, int status, String reasonPhrase, String description,
Throwable exception) {
StringBuilder sb = new StringBuilder();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
exception.printStackTrace(ps);
ps.close();
sb.append(new String(baos.toByteArray()));
System.out.println(sb.toString());
return sb.toString();
}
};
server.getServerConfiguration().setDefaultErrorPageGenerator(epg);
server.start();
System.out.println("Grizzly-HTTP-Server gestartet");
System.out.println("Stoppen des Grizzly-HTTP-Servers mit: Strg+C\n");
System.out.println("RESTful Web Service URL: " + baseUrl + TCPTimeCounterRESTService.webContextPath);
Thread.currentThread().join();
}
}

27
VerteilteSysteme-Examples/src/verteiltesysteme/aws/TCPTimeCounterRESTService.java

@ -14,18 +14,15 @@ public class TCPTimeCounterRESTService {
static final String bucketName = "vertsys-counter";
static final String bucketRegion = "eu-central-1";
static final String dnsNameELB = "cloudcomp-loadbalancer-1492513132.eu-central-1.elb.amazonaws.com";
static final int portELBTarget = 36042;
private Long getCounter() {
// Verbindung zu S3
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(bucketRegion).build();
return new Long(s3Client.getObjectAsString(bucketName, bucketRegion));
}
private boolean setCounter(Long counter) {
// Verbindung zu S3
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(bucketRegion).build();
s3Client.putObject(bucketName, bucketRegion, new Long(counter).toString());
return true;
}
@ -41,8 +38,11 @@ public class TCPTimeCounterRESTService {
public String getCounterHtml() {
return "<html><head><title>TCPTimeCounter REST Service</title>" +
"<meta http-equiv=\"refresh\" content=\"5\"/></head><body>" +
"<h2>Cloud Computing HS Fulda - TCPTimeCounter REST Service</h2>"+
"<p><b>HTML-Output:</b> " + getCounter() + "</p></body></html>";
"<h2>HS Fulda - TCPTimeCounter REST Service</h2>"+
"<p><b>HTML-Output:</b> " + getCounter() + "</p></body>"+
"<form method=POST action=\"/counter\">" +
"<input type=\"hidden\" name=\"input\" value=\"1\">"+
"<input type=\"submit\" value=\"Increment\"></form></body></html>";
}
@GET
@ -68,12 +68,13 @@ public class TCPTimeCounterRESTService {
Long currentCounterValue = getCounter();
currentCounterValue = currentCounterValue + (new Long(input)).longValue();
setCounter(currentCounterValue);
return "<html><head><title>TCPTimeCounter REST Service</title></head></body>" +
"<h2>Cloud Computing HS Fulda - TCPTimeCounter REST Service</h2>" +
"<p><b>HTML-Output:</b> counter increased by " +
input + " to " + currentCounterValue + "</p>" +
"<form method=POST action=\"http://" + dnsNameELB + ":" + portELBTarget + webContextPath +"\">" +
"<input name=\"input\" value=\"\"></form></body></html>";
return "<html><head><title>TCPTimeCounter REST Service</title>" +
"<meta http-equiv=\"refresh\" content=\"5\"/></head><body>" +
"<h2>HS Fulda - TCPTimeCounter REST Service</h2>"+
"<p><b>HTML-Output:</b> " + getCounter() + "</p></body>"+
"<form method=POST action=\"/counter\">" +
"<input type=\"hidden\" name=\"input\" value=\"1\">"+
"<input type=\"submit\" value=\"Increment\"></form></body></html>";
}
@POST

636
VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/MGuiRMI.java

@ -31,282 +31,402 @@ import javax.swing.event.ChangeListener;
class MyJLabel extends JLabel {
/**
*
*/
private static final long serialVersionUID = -7750935382747799343L;
int boxULx, boxULy, boxW, boxH;
MyJLabel() {
super();
}
MyJLabel(String s) {
super(s);
}
void setBox(int boxULx, int boxULy, int boxW, int boxH) {
this.boxULx = boxULx;
this.boxULy = boxULy;
this.boxW = boxW;
this.boxH = boxH;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawRect(this.boxULx, this.boxULy, this.boxW, this.boxH);
}
/**
*
*/
private static final long serialVersionUID = -7750935382747799343L;
int boxULx, boxULy, boxW, boxH;
MyJLabel() {
super();
}
MyJLabel(String s) {
super(s);
}
void setBox(int boxULx, int boxULy, int boxW, int boxH) {
this.boxULx = boxULx;
this.boxULy = boxULy;
this.boxW = boxW;
this.boxH = boxH;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawRect(this.boxULx, this.boxULy, this.boxW, this.boxH);
}
}
public class MGuiRMI implements ActionListener, ChangeListener, MouseListener, MouseMotionListener {
// GUI elements
JFrame frame;
JPanel panel;
JButton endButton;
JButton backButton;
JButton calcButton;
JTextField hostTextField;
JSlider maxIterations;
class RMIMandelbrotCalculationThread extends Thread {
MyJLabel view;
JLabel message;
int nrIterations;
// box management
int boxULx, boxULy, boxW, boxH;
boolean dragging = false;
// this one does all the calculating work
RMIMandelbrotCalculationsInterface remoteCalcObj;
// how many points in the image?
// change if you want a higher resolution
int boxULx, boxULy, boxW, boxH;
public static int RESX = 600;
public static int RESY = 600;
MGuiRMI() {
// set up GUI
this.frame = new JFrame("Mandelbrotmenge");
this.panel = new JPanel();
this.endButton = new JButton("Ende");
this.panel.add(this.endButton);
this.backButton = new JButton("Zurück");
this.panel.add(this.backButton);
this.calcButton = new JButton("Rechnen");
this.hostTextField = new JTextField(20);
this.hostTextField.setText("localhost");
this.panel.add(this.calcButton);
this.panel.add(this.hostTextField);
this.frame.add(this.panel);
this.frame.setSize(700, 720);
this.frame.setVisible(true);
this.view = new MyJLabel();
this.maxIterations = new JSlider(0, 50, 30);
this.panel.add(this.maxIterations);
this.panel.add(this.view);
this.message = new JLabel("Status");
this.message.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.frame.add(this.message,BorderLayout.SOUTH);
this.endButton.addActionListener(this);
this.backButton.addActionListener(this);
this.calcButton.addActionListener(this);
this.maxIterations.addChangeListener(this);
this.maxIterations.setMajorTickSpacing(10);
this.maxIterations.setPaintTicks(true);
this.maxIterations.setPaintLabels(true);
this.view.addMouseListener(this);
this.view.addMouseMotionListener(this);
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Non-Gui stuff
this.nrIterations = 1000;
}
// visualization related stuff, do not touch!
int[] generateLookupTable(int nrHues) {
int[] tmp = new int[nrHues + 1];
int cycle = 2048;
for (int i = 0; i < nrHues; i++) {
float hue = 1 * ((float) (i % cycle)) / cycle/* ((float)nrHues) */ ;
tmp[i] = Color.HSBtoRGB(hue, 0.8f, 1.0f);
}
tmp[0] = Color.HSBtoRGB(0f, 1.0f, 0.0f);
return tmp;
}
// visualization
static void applyLookupTable(int[] data, int[] dest, int[] lookupTable) {
for (int i = 0; i < data.length; i++) {
dest[i] = lookupTable[data[i]];
}
}
// here we check what the buttons do
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == this.endButton) {
System.out.println("Ende");
System.exit(0);
} else
if (ae.getSource() == this.backButton) {
System.out.println("Zurueck");
// Zoom und Ausschnitt zurücksetzen
double ULx = -0.16099999999999995;
double ULy = -0.9365333333333333;
double LRx = -0.03533333333333327;
double LRy = -0.8108666666666666;
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.view.repaint();
if (this.remoteCalcObj == null)
Boolean upperPart;
int maxIterations;
RMIMandelbrotCalculationThread(Boolean upperPart, MyJLabel view, RMIMandelbrotCalculationsInterface remoteCalcObj, int maxIterations) {
this.view = view;
this.remoteCalcObj = remoteCalcObj;
this.upperPart = upperPart;
this.maxIterations = maxIterations;
}
// visualization related stuff, do not touch!
int[] generateLookupTable(int nrHues) {
int[] tmp = new int[nrHues + 1];
int cycle = 2048;
for (int i = 0; i < nrHues; i++) {
float hue = 1 * ((float) (i % cycle)) / cycle/* ((float)nrHues) */ ;
tmp[i] = Color.HSBtoRGB(hue, 0.8f, 1.0f);
}
tmp[0] = Color.HSBtoRGB(0f, 1.0f, 0.0f);
return tmp;
}
public void run() {
try {
long timestampStart = System.currentTimeMillis();
double ULx = this.remoteCalcObj.getULx();
double ULy = this.remoteCalcObj.getULy();
double LRx = this.remoteCalcObj.getLRx();
double LRy = this.remoteCalcObj.getLRy();
System.out.println("actual="+ULx + "/" + ULy + "/" + LRx + "/" + LRy);
double w = LRx - ULx;
double h = LRy - ULy;
// AG change define box such that it contains only upper half of apple man :-)
if (this.upperPart == true)
{
String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgeführt";
this.message.setText(message);
System.out.println(message);
boxULx = 0 ; boxULy = 0; boxW = MGuiRMI.RESX ; boxH = MGuiRMI.RESY/2;
}
else
{
try {
this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.message.setText("Ausschnitt zurückgesetzt");
}
} else
if (ae.getSource() == this.calcButton) {
String hostname = this.hostTextField.getText();
System.out.println("Verbinde mit RMI Registry auf Host: " + hostname);
try {
Registry registry = LocateRegistry.getRegistry(hostname);
this.remoteCalcObj = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface");
System.out.println("Rechnen");
long timestampStart = System.currentTimeMillis();
//this.boxW = this.boxW / 2;
//MGuiRMI.RESX = MGuiRMI.RESX / 2;
double ULx = 0;
double ULy = 0;
double LRx = 0;
double LRy = 0;
ULx = this.remoteCalcObj.getULx();
ULy = this.remoteCalcObj.getULy();
LRx = this.remoteCalcObj.getLRx();
LRy = this.remoteCalcObj.getLRy();
double w = LRx - ULx;
double h = LRy - ULy;
ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
w *= this.boxW / (double) (RESX);
h *= this.boxH / (double) (RESX);
LRx = ULx + w;
LRy = ULy + h;
System.out.println(ULx + "/" + ULy + "/" + LRx + "/" + LRy);
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
int[] colors = null;
//this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
this.remoteCalcObj.iterateAllPoints(this.maxIterations.getValue() * 1000, MGuiRMI.RESX, MGuiRMI.RESY);
int[] lookupTable = generateLookupTable(this.maxIterations.getValue() * 1000);
colors = new int[MGuiRMI.RESX * MGuiRMI.RESY];
MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY, BufferedImage.TYPE_INT_ARGB);
colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY, colors, 0, MGuiRMI.RESX);
this.view.setIcon(new ImageIcon(colorImage));
this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.view.repaint();
long timestampEnd = System.currentTimeMillis();
String timeElapsed = "Dauer: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
System.out.println(timeElapsed);
this.message.setText(timeElapsed);
} catch (RemoteException | NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// for lower half:
boxULx = 0 ; boxULy = RESY/2; boxW = RESX ; boxH = RESY/2;
}
}
}
public void mousePressed(MouseEvent e) {
this.boxULx = e.getX();
this.boxULy = e.getY();
this.boxW = 1;
this.boxH = 1;
this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
}
public void mouseDragged(MouseEvent e) {
this.boxW = e.getX() - this.boxULx + 1;
this.boxH = e.getY() - this.boxULy + 1;
int m = Math.min(boxW, boxH);
this.boxW = m;
this.boxH = m;
this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
this.view.repaint();
}
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
this.view.repaint();
this.message.setText("Gesetzt: boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
}
}
public void mouseMoved(MouseEvent e) {
}
ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
w *= this.boxW / (double) (RESX);
h *= this.boxH / (double) (RESY);
LRx = ULx + w;
LRy = ULy + h;
System.out.println("computed="+ULx + "/" + ULy + "/" + LRx + "/" + LRy);
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
// end alex
int[] colors = null;
this.remoteCalcObj.iterateAllPoints(this.maxIterations * 1000, MGuiRMI.RESX, MGuiRMI.RESY/2);
/*
int[] lookupTable = generateLookupTable(this.maxIterations.getValue() * 1000);
colors = new int[MGuiRMI.RESX * MGuiRMI.RESY];
MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY, BufferedImage.TYPE_INT_ARGB);
colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY, colors, 0, MGuiRMI.RESX);
this.view.setIcon(new ImageIcon(colorImage));
this.view.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.view.repaint();
public void mouseExited(MouseEvent e) {
}
long timestampEnd = System.currentTimeMillis();
public void mouseEntered(MouseEvent e) {
}
String timeElapsed = "Dauer: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
System.out.println(timeElapsed);
this.message.setText(timeElapsed);
* */
public void mouseClicked(MouseEvent e) {
}
int[] lookupTable = generateLookupTable(this.maxIterations * 1000);
colors = new int[MGuiRMI.RESX * MGuiRMI.RESY/2];
MGuiRMI.applyLookupTable(remoteCalcObj.getResult(), colors, lookupTable);
// process a new slider value
public void stateChanged(ChangeEvent ce) {
if (ce.getSource() == this.maxIterations) {
// System.out.println("Neuer Wert");
this.nrIterations = this.maxIterations.getValue() * 1000;
BufferedImage colorImage = new BufferedImage(MGuiRMI.RESX, MGuiRMI.RESY/2, BufferedImage.TYPE_INT_ARGB);
colorImage.setRGB(0, 0, MGuiRMI.RESX, MGuiRMI.RESY/2, colors, 0, MGuiRMI.RESX);
this.view.setIcon(new ImageIcon(colorImage));
long timestampEnd = System.currentTimeMillis();
String timeElapsed = "Zeit: " + ((timestampEnd - timestampStart) / 1000.0) + " sec";
System.out.println(timeElapsed);
//this.view.setText(timeElapsed);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class MGuiRMI implements ActionListener, ChangeListener, MouseListener, MouseMotionListener {
// main, just instantiate an MGui object, gives control to the Gui
public static void main(String[] args) {
@SuppressWarnings("unused")
MGuiRMI gui = new MGuiRMI();
}
// GUI elements
JFrame frame;
JPanel panel;
JButton endButton;
JButton backButton;
JButton calcButton;
JTextField hostTextField;
JSlider maxIterations;
MyJLabel viewUpper;
MyJLabel viewLower;
JLabel message;
int nrIterations;
// box management
int boxULx, boxULy, boxW, boxH;
boolean dragging = false;
// this one does all the calculating work
RMIMandelbrotCalculationsInterface remoteCalcObj;
RMIMandelbrotCalculationsInterface remoteCalcObj2;
// how many points in the image?
// change if you want a higher resolution
public static int RESX = 600;
public static int RESY = 600;
MGuiRMI() {
// set up GUI
this.frame = new JFrame("Mandelbrotmenge");
this.panel = new JPanel();
this.endButton = new JButton("Ende");
this.panel.add(this.endButton);
this.backButton = new JButton("Zurück");
this.panel.add(this.backButton);
this.calcButton = new JButton("Rechnen");
this.hostTextField = new JTextField(20);
this.hostTextField.setText("localhost");
this.panel.add(this.calcButton);
this.panel.add(this.hostTextField);
this.frame.add(this.panel);
this.frame.setSize(700, 720);
this.frame.setVisible(true);
this.viewUpper = new MyJLabel();
this.viewLower = new MyJLabel();
this.maxIterations = new JSlider(0, 50, 30);
this.panel.add(this.maxIterations);
this.panel.add(this.viewUpper);
this.panel.add(this.viewLower);
this.message = new JLabel("Status");
this.message.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.frame.add(this.message,BorderLayout.SOUTH);
this.endButton.addActionListener(this);
this.backButton.addActionListener(this);
this.calcButton.addActionListener(this);
this.maxIterations.addChangeListener(this);
this.maxIterations.setMajorTickSpacing(10);
this.maxIterations.setPaintTicks(true);
this.maxIterations.setPaintLabels(true);
this.viewUpper.addMouseListener(this);
this.viewUpper.addMouseMotionListener(this);
this.viewLower.addMouseListener(this);
this.viewLower.addMouseMotionListener(this);
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Non-Gui stuff
this.nrIterations = 1000;
}
// visualization
static void applyLookupTable(int[] data, int[] dest, int[] lookupTable) {
for (int i = 0; i < data.length; i++) {
dest[i] = lookupTable[data[i]];
}
}
// here we check what the buttons do
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == this.endButton) {
System.out.println("Ende");
System.exit(0);
} else
if (ae.getSource() == this.backButton) {
System.out.println("Zurueck");
// Zoom und Ausschnitt zurücksetzen
double ULx = -2;
double ULy = 2;
double LRx = 2;
double LRy = -2;
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.viewUpper.repaint();
this.viewLower.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.viewLower.repaint();
if (this.remoteCalcObj == null)
{
String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgeführt";
this.message.setText(message);
System.out.println(message);
}
else
{
try {
this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.message.setText("Ausschnitt zurückgesetzt");
}
if (this.remoteCalcObj2 == null)
{
String message = "Fehler: noch nicht verbunden, noch keine Berechnung durchgeführt";
this.message.setText(message);
System.out.println(message);
}
else
{
try {
this.remoteCalcObj2.setView(ULx, ULy, LRx, LRy);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.message.setText("Ausschnitt zurückgesetzt");
}
} else
if (ae.getSource() == this.calcButton) {
String hostname = this.hostTextField.getText();
System.out.println("Verbinde mit RMI Registry auf Host: " + hostname);
try {
Registry registry = LocateRegistry.getRegistry(hostname);
this.remoteCalcObj = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface");
this.remoteCalcObj2 = (RMIMandelbrotCalculationsInterface) registry.lookup("RMIMandelbrotCalculationsInterface2");
/** CODE SEBASTIAN
System.out.println("Rechnen");
long timestampStart = System.currentTimeMillis();
//this.boxW = this.boxW / 2;
//MGuiRMI.RESX = MGuiRMI.RESX / 2;
double ULx = 0;
double ULy = 0;
double LRx = 0;
double LRy = 0;
ULx = this.remoteCalcObj.getULx();
ULy = this.remoteCalcObj.getULy();
LRx = this.remoteCalcObj.getLRx();
LRy = this.remoteCalcObj.getLRy();
double w = LRx - ULx;
double h = LRy - ULy;
ULx = ULx + w * this.boxULx / (double) MGuiRMI.RESX;
ULy = ULy + h * this.boxULy / (double) MGuiRMI.RESY;
w *= this.boxW / (double) (RESX);
h *= this.boxH / (double) (RESX);
LRx = ULx + w;
LRy = ULy + h;
System.out.println(ULx + "/" + ULy + "/" + LRx + "/" + LRy);
this.boxULx = 0;
this.boxULy = 0;
this.boxW = MGuiRMI.RESX;
this.boxH = MGuiRMI.RESY;
int[] colors = null;
//this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
this.remoteCalcObj.setView(ULx, ULy, LRx, LRy);
end */
/* Code Alex */
System.out.println("Rechnen");
RMIMandelbrotCalculationThread rmimct = new RMIMandelbrotCalculationThread(true, this.viewUpper, this.remoteCalcObj, maxIterations.getValue());
new Thread(rmimct).start();
RMIMandelbrotCalculationThread rmimct2 = new RMIMandelbrotCalculationThread(false, this.viewLower, this.remoteCalcObj2, maxIterations.getValue());
new Thread(rmimct2).start();
} catch (RemoteException | NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// Zoom not wirking for lower...
public void mousePressed(MouseEvent e) {
this.boxULx = e.getX();
this.boxULy = e.getY();
this.boxW = 1;
this.boxH = 1;
this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
}
public void mouseDragged(MouseEvent e) {
this.boxW = e.getX() - this.boxULx + 1;
this.boxH = e.getY() - this.boxULy + 1;
int m = Math.min(boxW, boxH);
this.boxW = m;
this.boxH = m;
this.viewUpper.setBox(this.boxULx, this.boxULy, this.boxW, this.boxH);
this.message.setText("boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
this.viewUpper.repaint();
}
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
this.viewUpper.repaint();
this.message.setText("Gesetzt: boxULx: " + this.boxULx + " boxULy: " + this.boxULy + " boxW: " + this.boxW + " boxH: " + this.boxH);
}
}
public void mouseMoved(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
// process a new slider value
public void stateChanged(ChangeEvent ce) {
if (ce.getSource() == this.maxIterations) {
// System.out.println("Neuer Wert");
this.nrIterations = this.maxIterations.getValue() * 1000;
}
}
// main, just instantiate an MGui object, gives control to the Gui
public static void main(String[] args) {
@SuppressWarnings("unused")
MGuiRMI gui = new MGuiRMI();
}
}

211
VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer.java

@ -21,53 +21,53 @@ class LoopbackSocketFactory extends RMISocketFactory {
.createSocket(host, port);
}
}
*/
*/
class Complex {
double r;
double i;
Complex() {
r = 0.0;
i = 0.0;
}
Complex(double r, double i) {
this.r = r;
this.i = i;
}
void mulBy(Complex other) {
double rTmp = this.r * other.r - this.i * other.i;
this.i = this.r * other.i + this.i * other.r;
this.r = rTmp;
}
void add(Complex other) {
this.r += other.r;
this.i += other.i;
}
void sub(Complex other) {
this.r -= other.r;
this.i -= other.i;
}
double absValue() {
return Math.sqrt(this.r * this.r + this.i * this.i);
}
double r;
double i;
Complex() {
r = 0.0;
i = 0.0;
}
Complex(double r, double i) {
this.r = r;
this.i = i;
}
void mulBy(Complex other) {
double rTmp = this.r * other.r - this.i * other.i;
this.i = this.r * other.i + this.i * other.r;
this.r = rTmp;
}
void add(Complex other) {
this.r += other.r;
this.i += other.i;
}
void sub(Complex other) {
this.r -= other.r;
this.i -= other.i;
}
double absValue() {
return Math.sqrt(this.r * this.r + this.i * this.i);
}
}
public class RMIMandelbrotCalculationsServer implements RMIMandelbrotCalculationsInterface {
public RMIMandelbrotCalculationsServer() {}
public static void main(String args[]) {
try {
//RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
RMIMandelbrotCalculationsServer obj = new RMIMandelbrotCalculationsServer();
RMIMandelbrotCalculationsInterface stub = (RMIMandelbrotCalculationsInterface) UnicastRemoteObject.exportObject(obj, 0);
//RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
RMIMandelbrotCalculationsServer obj = new RMIMandelbrotCalculationsServer();
RMIMandelbrotCalculationsInterface stub = (RMIMandelbrotCalculationsInterface) UnicastRemoteObject.exportObject(obj, 0);
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
@ -79,73 +79,72 @@ public class RMIMandelbrotCalculationsServer implements RMIMandelbrotCalculation
e.printStackTrace();
}
}
// hier wird das Ergebnis von iterateAll() gespeichert
protected int[] result = null;
// der augenblicklich gewaehlte Ausschnitt
//double ULx = -2, ULy = -2, LRx = 2, LRy = 2;
double ULx = -0.16099999999999995, ULy = -0.9365333333333333, LRx = -0.03533333333333327, LRy = -0.8108666666666666;
int iterateOnePoint(Complex c, int maxIterations, double maxModulus) {
Complex z = new Complex(0., 0.);
for (int i = 0; i < maxIterations; i++) {
z.mulBy(z);
z.add(c);
double m = z.absValue();
if (m > maxModulus) {
return i;
}
}
return maxIterations;
}
public void iterateAllPoints(int maxIterations, double nrPointsX, double nrPointsY) {
this.result = new int[(int) (nrPointsX * nrPointsY)];
int counter = 0;
double stepX = (this.LRx - this.ULx) / nrPointsX;
double stepY = (this.LRy - this.ULy) / nrPointsY;
double i = this.ULy;
for (int cy = 0; cy < nrPointsY; cy++) {
double r = this.ULx;
for (int cx = 0; cx < nrPointsX; cx++) {
Complex c = new Complex(r, i);
this.result[counter] = maxIterations - this.iterateOnePoint(c, maxIterations, 2.0);
counter += 1;
r += stepX;
}
i += stepY;
}
}
public int[] getResult() {
return this.result;
}
public double getULx() {
return this.ULx;
}
public double getLRx() {
return this.LRx;
}
public double getULy() {
return this.ULy;
}
public double getLRy() {
return this.LRy;
}
public void setView(double ULx, double ULy, double LRx, double LRy) {
this.ULx = ULx;
this.ULy = ULy;
this.LRx = LRx;
this.LRy = LRy;
}
// hier wird das Ergebnis von iterateAll() gespeichert
protected int[] result = null;
// der augenblicklich gewaehlte Ausschnitt
double ULx = -2, ULy = 2, LRx = 2, LRy = -2;
int iterateOnePoint(Complex c, int maxIterations, double maxModulus) {
Complex z = new Complex(0., 0.);
for (int i = 0; i < maxIterations; i++) {
z.mulBy(z);
z.add(c);
double m = z.absValue();
if (m > maxModulus) {
return i;
}
}
return maxIterations;
}
public void iterateAllPoints(int maxIterations, double nrPointsX, double nrPointsY) {
this.result = new int[(int) (nrPointsX * nrPointsY)];
int counter = 0;
double stepX = (this.LRx - this.ULx) / nrPointsX;
double stepY = (this.LRy - this.ULy) / nrPointsY;
double i = this.ULy;
for (int cy = 0; cy < nrPointsY; cy++) {
double r = this.ULx;
for (int cx = 0; cx < nrPointsX; cx++) {
Complex c = new Complex(r, i);
this.result[counter] = maxIterations - this.iterateOnePoint(c, maxIterations, 2.0);
counter += 1;
r += stepX;
}
i += stepY;
}
}
public int[] getResult() {
return this.result;
}
public double getULx() {
return this.ULx;
}
public double getLRx() {
return this.LRx;
}
public double getULy() {
return this.ULy;
}
public double getLRy() {
return this.LRy;
}
public void setView(double ULx, double ULy, double LRx, double LRy) {
this.ULx = ULx;
this.ULy = ULy;
this.LRx = LRx;
this.LRy = LRy;
}
}

115
VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer2.java

@ -0,0 +1,115 @@
package verteiltesysteme.mandelbrot.rmi;
//import java.io.IOException;
//import java.net.InetAddress;
//import java.net.ServerSocket;
//import java.net.Socket;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
//import java.rmi.server.RMISocketFactory;
import java.rmi.server.UnicastRemoteObject;
/*
class LoopbackSocketFactory extends RMISocketFactory {
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port, 5, InetAddress.getByName("127.0.0.1"));
}
public Socket createSocket(String host, int port) throws IOException {
// just call the default client socket factory
return RMISocketFactory.getDefaultSocketFactory()
.createSocket(host, port);
}
}
*/
public class RMIMandelbrotCalculationsServer2 implements RMIMandelbrotCalculationsInterface {
public RMIMandelbrotCalculationsServer2() {}
public static void main(String args[]) {
try {
//RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
RMIMandelbrotCalculationsServer2 obj = new RMIMandelbrotCalculationsServer2();
RMIMandelbrotCalculationsInterface stub = (RMIMandelbrotCalculationsInterface) UnicastRemoteObject.exportObject(obj, 0);
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("RMIMandelbrotCalculationsInterface2", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
// hier wird das Ergebnis von iterateAll() gespeichert
protected int[] result = null;
// der augenblicklich gewaehlte Ausschnitt
double ULx = -2, ULy = 2, LRx = 2, LRy = -2;
int iterateOnePoint(Complex c, int maxIterations, double maxModulus) {
Complex z = new Complex(0., 0.);
for (int i = 0; i < maxIterations; i++) {
z.mulBy(z);
z.add(c);
double m = z.absValue();
if (m > maxModulus) {
return i;
}
}
return maxIterations;
}
public void iterateAllPoints(int maxIterations, double nrPointsX, double nrPointsY) {
this.result = new int[(int) (nrPointsX * nrPointsY)];
int counter = 0;
double stepX = (this.LRx - this.ULx) / nrPointsX;
double stepY = (this.LRy - this.ULy) / nrPointsY;
double i = this.ULy;
for (int cy = 0; cy < nrPointsY; cy++) {
double r = this.ULx;
for (int cx = 0; cx < nrPointsX; cx++) {
Complex c = new Complex(r, i);
this.result[counter] = maxIterations - this.iterateOnePoint(c, maxIterations, 2.0);
counter += 1;
r += stepX;
}
i += stepY;
}
}
public int[] getResult() {
return this.result;
}
public double getULx() {
return this.ULx;
}
public double getLRx() {
return this.LRx;
}
public double getULy() {
return this.ULy;
}
public double getLRy() {
return this.LRy;
}
public void setView(double ULx, double ULy, double LRx, double LRy) {
this.ULx = ULx;
this.ULy = ULy;
this.LRx = LRx;
this.LRy = LRy;
}
}

2
VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/TCPClient.java

@ -18,6 +18,8 @@ class TCPClient {
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("Enter message to sent to the server:");
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();

4
VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/TCPServer.java

@ -15,9 +15,13 @@ class TCPServer {
@SuppressWarnings("resource")
ServerSocket welcomeSocket = new ServerSocket(tcpPort);
System.out.println("TCP Server started. Waiting for incoming requests...");
while (true) {
Socket connectionSocket = welcomeSocket.accept();
System.out.println("Received request from client " + connectionSocket.getInetAddress() + ":" + connectionSocket.getPort() + " generating response...");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

2
VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/UDPClient.java

@ -15,6 +15,8 @@ class UDPClient {
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
System.out.println("Enter message to sent to the server:");
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();

5
VerteilteSysteme-Examples/src/verteiltesysteme/socket/simple/UDPServer.java

@ -12,6 +12,8 @@ class UDPServer {
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
System.out.println("UDP Server started. Waiting for incoming requests...");
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
@ -19,8 +21,9 @@ class UDPServer {
InetAddress IPAddress = receivePacket.getAddress();
int clientSrcPort = receivePacket.getPort();
System.out.println("Received request from client " + IPAddress + ":" + clientSrcPort + " generating response...");
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, clientSrcPort);

Loading…
Cancel
Save