import java.util.*; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.applet.*; public class ClientRenderApplet extends Applet implements MouseListener { Socket mySocket; InetAddress myAddress, hostAddress; InputStream myInputStream; ObjectInputStream myOIS; OutputStream myOutputStream; ObjectOutputStream myOOS; String myHostName; int hostPort; boolean gotWorld; Renderer renderer; World sentWorld; Dimension wDim; String currentStatus, currentStatus2; Graphics g; Color darkBlue; public void init() { Graphics gtemp = getGraphics(); g = gtemp.create(); currentStatus = "Getting my address..."; currentStatus2 = " "; writeStatus(); try { myAddress = InetAddress.getLocalHost(); myHostName = myAddress.getHostName(); currentStatus = "My address is " + myAddress; } catch (UnknownHostException e) { currentStatus = "Could not find an IP address."; } finally { writeStatus(); } darkBlue = new Color(0, 0, 64); this.addMouseListener(this); hostPort = Integer.parseInt(getParameter("Port")); try { System.out.println("HostAddress = " + getParameter("HostAddress")); hostAddress = InetAddress.getByName(getParameter("HostAddress")); } catch (UnknownHostException e) { currentStatus = "Couldn't get hostAddr. " + e.getMessage(); } finally { writeStatus(); } gotWorld = false; } public void start() { } public void mouseClicked(MouseEvent me) { doTheThing(); } public void doTheThing() { while (true) { currentStatus = "Trying to make connection..."; // System.out.println(currentStatus); currentStatus2 = " "; writeStatus(); try { mySocket = new Socket(hostAddress, hostPort); currentStatus2 = "Socket opened."; } catch (Exception e) { currentStatus2 = "Render server not accepting connections."; } finally { writeStatus(); } try { currentStatus = "Talking to render server."; writeStatus(); myOutputStream = mySocket.getOutputStream(); myOOS = new ObjectOutputStream(myOutputStream); currentStatus2 = "Sending requirements."; writeStatus(); if (gotWorld) myOOS.writeObject(new Character('n')); else myOOS.writeObject(new Character('y')); //myOOS.close(); //myOutputStream.close(); myInputStream = mySocket.getInputStream(); myOIS = new ObjectInputStream(myInputStream); currentStatus2 = "Receiving data."; writeStatus(); if (!gotWorld) { wDim = (Dimension) myOIS.readObject(); sentWorld = (World) myOIS.readObject(); } int whichLine = ((Integer) myOIS.readObject()).intValue(); myOIS.close(); myInputStream.close(); mySocket.close(); // System.out.println(sentWorld); if (!gotWorld) { renderer = new Renderer(sentWorld); gotWorld = true; } long start = System.currentTimeMillis(); Scanline line = renderer.calculateOneScanline( wDim, whichLine); long stop = System.currentTimeMillis(); System.out.println("Total time is " + (stop-start)); // System.out.println("Got out of renderer"); mySocket = new Socket(hostAddress, hostPort); currentStatus2 = "Socket opened."; writeStatus(); myOutputStream = mySocket.getOutputStream(); myOOS = new ObjectOutputStream(myOutputStream); myOOS.writeObject(new Character('r')); myOOS.writeObject(new Integer(whichLine)); myOOS.writeObject(line); myOOS.flush(); myOOS.close(); drawTheLine(line); } catch (ConnectException e) { currentStatus = e.getMessage() + ": renderer offline."; System.out.println(currentStatus); break; } catch (SocketException e) { currentStatus = e.getMessage() + "; trying again."; System.out.println(currentStatus); } catch (EOFException e) { currentStatus = e.getMessage() + "; trying again."; System.out.println(currentStatus); } catch (Exception e) { currentStatus = e.getMessage(); System.out.println(currentStatus); e.printStackTrace(); break; } finally { writeStatus(); } } } public void mouseReleased(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void paint(Graphics g) { g.setColor(Color.black); g.drawString("Status: ", 20, 20); writeStatus(); } private void writeStatus() { g.setColor(darkBlue); g.fillRect(20, 35, 550, 40); g.fillRect(20, 85, 550, 40); g.setColor(Color.white); if (currentStatus != null) g.drawString(currentStatus, 30, 60); if (currentStatus2 != null) g.drawString(currentStatus2, 30, 110); } private void drawTheLine(Scanline line) { int i; for (i=0; i