/* Distributed Systems: Practical Exercise 2 This class is responsible for constructing and updating the network according to the user actions on the GUI canvas. You should not change anything in this file. This template file (C) The University of Edinburgh, 2002 Author: Yussuf Abu Shaaban */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; public class Simulator extends Canvas implements MouseListener{ private Network network; private Point temp1 = null; private Node nodeSelected = null; public Simulator(){ super(); network = new Network(this); this.setBackground(Color.white); addMouseListener(this); } public void paint(Graphics g){ network.paint(g); } public void mouseReleased(MouseEvent e){ if((e.getModifiers()&e.BUTTON3_MASK) !=0){ if(temp1 == null){ temp1 = e.getPoint(); } else{ network.addChannel(temp1, e.getPoint()); temp1 = null; repaint(); } } } public void mouseClicked(MouseEvent e){ Node n = network.nodeSelected(e); if((e.getModifiers()&e.BUTTON1_MASK) !=0){ if(n == null){ network.addNode(e.getPoint()); } else{ nodeSelected = n; } repaint(); } else if((e.getModifiers()&e.BUTTON2_MASK) !=0){ network.setFailed(n); repaint(); } } public void startRingElection(){ RingNode starter = null; for(int i = 0; i < network.generalNodes.size(); i++){ Node temp = (Node) network.generalNodes.elementAt(i); network.getNodes().insertElementAt(new RingNode(temp), i); if(((RingNode)network.getNodes().elementAt(i)).compareTo( nodeSelected) == 0){ starter = (RingNode) network.getNodes().elementAt(i); } } network.resetNetwork(); new Thread(starter).start(); } public void startBullyElection(){ BullyNode starter = null; for(int i = 0; i < network.generalNodes.size(); i++){ Node temp = (Node) network.generalNodes.elementAt(i); network.getNodes().insertElementAt(new BullyNode(temp), i); if(((BullyNode)network.getNodes().elementAt(i)).compareTo( nodeSelected) == 0){ starter = (BullyNode) network.getNodes().elementAt(i); } } network.resetNetwork(); new Thread(starter).start(); } public void mousePressed(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }