Skip to content
Snippets Groups Projects
Select Git revision
  • fd4a63490e78dda122f7c14e33d0833e81da9b23
  • master default protected
2 results

method.py

Blame
  • DrawingController.java 7.58 KiB
    package server;
    
    import remote.IDrawingController;
    import remote.IDrawingUpdate;
    
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import java.util.ArrayList;
    
    public class DrawingController extends UnicastRemoteObject implements IDrawingController {
    
        private final static int AREA_WIDTH = 600;
        private final static int AREA_HEIGHT = 600;
    
        private Server server;
    //    private SerializableImage bufferedImage;
        private BufferedImage bufferedImage;
        private Graphics2D g2;
    
        private ArrayList<Shape> shapeList;
        private ArrayList<Color> colorList;
        private ArrayList<Integer> strokeSizeList;
    
        private ArrayList<String> textList;
        private ArrayList<Font> fontList;
        private ArrayList<Point> textStartPointList;
    
    
        protected DrawingController(Server server) throws RemoteException {
            this.server = server;
    
    //        this.bufferedImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
    //        g2 = (Graphics2D) bufferedImage.getGraphics();
    //        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
            this.bufferedImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
            g2 = (Graphics2D) bufferedImage.getGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
    
            this.shapeList = new ArrayList<Shape>();
            this.colorList = new ArrayList<Color>();
            this.strokeSizeList = new ArrayList<Integer>();
    
            this.textList = new ArrayList<String>();
            this.fontList = new ArrayList<Font>();
            this.textStartPointList = new ArrayList<Point>();
        }
    
        @Override
        public boolean broadcastText(String fromClient, String text, Font font, Point startPoint) throws RemoteException {
            System.out.print("Broadcasting drawing to everyone...");
    
            textList.add(text);
            fontList.add(font);
            textStartPointList.add(startPoint);
    
    
            g2 = (Graphics2D) bufferedImage.getGraphics();
            g2.setFont(font);
            g2.drawString(text, startPoint.x, startPoint.y);
            g2 = (Graphics2D) bufferedImage.getGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
    
            IDrawingUpdate client;
    
            for( User u : server.users )
            {
                if (!u.getUserName().equals(fromClient)) {
                    client = u.getIDrawingUpdate();
                    client.notifyTextDrawing(fromClient, text, font, startPoint);
                }
            }
    
            System.out.print("...DONE\n");
    
            return true;
        }
    
    
        @Override
        public boolean broadcastDrawing(String fromClient, Shape drawing, String mode, Color color, int strokeSize) throws RemoteException {
            System.out.print("Broadcasting drawing to everyone...");
    
            shapeList.add(drawing);
            colorList.add(color);
            strokeSizeList.add(strokeSize);
    
            g2 = (Graphics2D) bufferedImage.getGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            switch (mode) {
                case "OVAL":
                case "RECTANGLE":
                case "CIRCLE":
                case "FREEHAND":
                case "LINE":
                    g2.setColor(color);
                    // g2.fill(drawing);    /// Uncomment the line to fill the shapes with color ///
                    g2.setStroke(new BasicStroke(strokeSize));
                    g2.draw(drawing);
                    break;
                case "TEXT":
                case "ERASE":
                default:
                    break;
            }
            g2 = (Graphics2D) bufferedImage.getGraphics();
    
            g2.setColor(color);
    
    
    
            IDrawingUpdate client;
    
            for( User u : server.users )
            {
                if (!u.getUserName().equals(fromClient)) {
                    client = u.getIDrawingUpdate();
                    client.notifyDrawing(fromClient, drawing, mode, color, strokeSize);
                }
            }
    
            System.out.print("...DONE\n");
    
            return true;
        }
    
        public boolean broadcastDraggingDrawing(String fromClient, Shape drawing, String mode, Color color, int strokeSize) throws RemoteException {
            System.out.print("Broadcasting dragging drawing to everyone...");
    
            if (mode.equals("FREEHAND")) {
                shapeList.add(drawing);
                colorList.add(color);
                strokeSizeList.add(strokeSize);
            }
    
            g2 = (Graphics2D) bufferedImage.getGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            switch (mode) {
                case "FREEHAND":
                    g2.setColor(color);
                    g2.setStroke(new BasicStroke(strokeSize));
                    g2.draw(drawing);
                    break;
    
                case "ERASE":
                    g2.setColor(Color.WHITE);
                    g2.fill(drawing);
                    g2.draw(drawing);
                    break;
    
                default:
                    break;
            }
            g2 = (Graphics2D) bufferedImage.getGraphics();
    
            g2.setColor(color);
    
    
            IDrawingUpdate client;
    
            for( User u : server.users )
            {
                if (!u.getUserName().equals(fromClient)) {
                    client = u.getIDrawingUpdate();
                    client.notifyDraggingDrawing(fromClient, drawing, mode, color, strokeSize);
                }
            }
    
            System.out.print("...DONE\n");
    
            return true;
        }
    
        public boolean broadcastClearCanvas(String fromClient) throws RemoteException {
            System.out.print("Broadcasting canvas clearance to everyone...");
    
            IDrawingUpdate client;
    
            this.shapeList.clear();
            this.colorList.clear();
            this.strokeSizeList.clear();
    
            this.textList.clear();
            this.fontList.clear();
            this.textStartPointList.clear();
    
            BufferedImage image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
            g2 = (Graphics2D) image.getGraphics();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
            for( User u : server.users )
            {
                if (!u.getUserName().equals(fromClient)) {
                    client = u.getIDrawingUpdate();
                    client.notifyCanvasClearance(fromClient);
                }
            }
    
            System.out.print("...DONE\n");
    
            return true;
        }
    
        public BufferedImage getCurrentImage() throws RemoteException {
            return bufferedImage;
        }
    
        public void getImage(String fromClient) throws RemoteException {
    //        if (bufferedImage.getImage().)
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            IDrawingUpdate client;
            try {
                javax.imageio.ImageIO.write(bufferedImage, "png", baos);
                baos.flush();
            }
            catch (IOException err) {
                err.printStackTrace();
            }
    
            for( User u : server.users )
            {
                if (u.getUserName().equals(fromClient)) {
                    client = u.getIDrawingUpdate();
                    client.receiveImage(baos.toByteArray());
                }
            }
        }
    
        public ArrayList<Shape> getShapeList() {
            return shapeList;
        }
    
        public ArrayList<Color> getColorList() {
            return colorList;
        }
    
        public ArrayList<Integer> getStrokeSizeList() {
            return strokeSizeList;
        }
    
        public ArrayList<String> getTextList() {
            return textList;
        }
    
        public ArrayList<Font> getFontList() {
            return fontList;
        }
    
        public ArrayList<Point> getTextStartPointList() {
            return textStartPointList;
        }
    }