From a27ab784026afba0386f17956443c9ef53f7b0a4 Mon Sep 17 00:00:00 2001 From: Sebastian Rieger Date: Mon, 22 Oct 2018 00:33:12 +0200 Subject: [PATCH] initial version --- .../rmi/RMIMandelbrotCalculationsServer2.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer2.java diff --git a/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer2.java b/VerteilteSysteme-Examples/src/verteiltesysteme/mandelbrot/rmi/RMIMandelbrotCalculationsServer2.java new file mode 100644 index 0000000..a0feee9 --- /dev/null +++ b/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; + } + +}