// Autor: Stephan Bazalka // Matr.Nr.: 0225725 // Bsp: 4100 (Token-Ring-Netzwerk) package netzwerk; import eprog.*; import netzwerk.*; public class Network extends EprogIO { short time = 0; String[] packet = new String[3]; String[] query = new String[2]; String[][] nodes = new String[10][2]; short numberOfNodes = 0; Node currentNode; Packet paket; Node[] nodeArray; // Konstruktor public Network(String[][] inputNodes, String[] inputPacket, short inputTime, String[] inputQuery) { nodes = inputNodes; packet = inputPacket; time = inputTime; query = inputQuery; numberOfNodes = (short)nodes.length; Node start = null; } // Netzwerk konstruieren public Node[] buildNetwork() { int count = 0; boolean found = false; Node[] nodeArray1 = new Node[numberOfNodes+1]; nodeArray = nodeArray1; // Knoten initialisieren for(count = numberOfNodes-1; count >= 0; count--) { switch(nodes[count][1].charAt(0)) { case 'F': nodeArray[count] = new Fileserver(nodes[count][0], nodeArray[count+1]); break; case 'K': nodeArray[count] = new Node(nodes[count][0], nodeArray[count+1]); break; case 'P': nodeArray[count] = new Printserver(nodes[count][0], nodeArray[count+1]); break; case 'W': nodeArray[count] = new Workstation(nodes[count][0], nodeArray[count+1]); break; default: } } nodeArray[numberOfNodes-1].setNext(nodeArray[0]); return nodeArray; } // Abfrage bearbeiten public String runQuery(Node[] nodeArray) { // Paket erzeugen Packet paket1 = new Packet(packet, time); paket = paket1; // currentNode des Pakets bzw. Variable currentNode auf Absender setzen paket.setCurrentNode(whereIsPacket()); // Je nach Abfragetyp entsprechende Funktion aufrufen switch(query[0].charAt(0)) { case 'p':return storeOrPrint(); case 'q':return query(); case 's':return storeOrPrint(); case 'w':return where(); default:return "FALSCHE EINGABE"; } } // Funktionen zur Bearbeitung der Abfrage // Wo ist das Paket nach x Zeitschritten? private String where() { int i=0; // Paket x Zeitschritte zirkulieren und bearbeiten lassen for(i=0; i= timeOver) { return "0"; } else { return Integer.toString(timeOver-time+1); } // Wenn es nicht gespeichert/gedruckt, dafür aber gelöscht wurde, // gibt es die Zeit an, die es noch bis zur sendenden Workstation braucht. } else { if(paket.isDeleted()==true) { return Integer.toString(time-timeOver); } else { return "FALSCHE EINGABE"; } } } // Für Abfrage des Inhalts private String query() { int i=0; // Paket x Zeitschritte zirkulieren und bearbeiten lassen for(i=0;i