TopCards.javaDrawer.java

Drawer.java

import objectdraw.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

// This class manages the communication for the user doing the drawing.
public class Drawer extends ActiveObject {
   // UI component that displays the guesser's guesses.
   private Label guessLabel;
   
   // Server connection
   private ServerSocket drawingServer;
   
   // Socket that the drawer uses to communicate with the guesser
   private Socket drawingSocket;
   
   // Output stream used to write Lines to the guesser.
   private ObjectOutputStream out;
   
   // Stream that guesses arrive on
   private BufferedReader guessStream;
   
   private static final int TIMEOUT = 60000;  // 1 minute
      
   // Create a new drawer.  The drawer acts as a server.
   // Parameters:
   //     pictionaryPort - the port that Pictionary uses for communication
   //     theGuessLabel - the UI component where guesses should be displayed
   //        when they arrive over the socket's input stream
   public Drawer (int pictionaryPort, Label theGuessLabel) {
      guessLabel = theGuessLabel;
      try {
         // Register as a server
         drawingServer = new ServerSocket (pictionaryPort);
         
         // Set a timeout for how long to wait for the client to connect.
         drawingServer.setSoTimeout (TIMEOUT);
      
         // Wait for the client to connect.
         drawingSocket = drawingServer.accept();
      
         // Initialize the output stream used to send Lines to the guesser.
         out = new ObjectOutputStream (
                  drawingSocket.getOutputStream());

         // Initialize the input stream where the guesses arrive.
         guessStream = new BufferedReader (
                     new InputStreamReader (
                        drawingSocket.getInputStream()));
      } catch (InterruptedIOException e) {
         System.out.println ("Connection timed out.  Closing server.");
         close();
         return;
      } catch (IOException e) {
         System.out.println ("Could not create server.");
         System.out.println (e);
         close();
         return;
      }   
      start();
   }
   
   // Accept user guesses on the input stream and display them in the 
   // guess label.
   public void run () {    
      // -- Repeatedly display the guesses to the drawer as they arrive.
      // -- quit when guessStream goes away (i.e., readLine() throws exception)
      // Your code here!
      
      // Clean up by closing the stream, socket, and shutting down the server
      // connection.
      close();       
   }
   
   // Write a line onto the output stream so that the guesser can see it.
   // Be sure to close() if anything goes wrong.
   // Parameter
   //     nextScribble - the line to pass to the guesser
   public void writeLine (Line nextScribble) {
      // your code here
   }

   public void quit () {
      close();
   }
   
   // Close everything that is still open.
   private void close () {
      try {
         if (out != null) {
             out.close();
          }
      } catch (IOException e) { }
      try {
         if (guessStream != null)
         {
            guessStream.close();
         }
      } catch (IOException e) { }
      try {
         if (drawingSocket != null)
         {
            drawingSocket.close();
         }
      } catch (IOException e) { }
      try {
         if (drawingServer != null)
         {
            drawingServer.close();
         }
      } catch (IOException e) { }
   }
}

TopCards.javaDrawer.java