www.pudn.com > jnp-src.rar > MessageCopier.java


/*
 * Java Network Programming, Second Edition
 * Merlin Hughes, Michael Shoffner, Derek Hamner
 * Manning Publications Company; ISBN 188477749X
 *
 * http://nitric.com/jnp/
 *
 * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner;
 * all rights reserved; see license.txt for details.
 */

import java.io.*; 
 
public class MessageCopier extends Thread { 
  static private int copierNumber; 
  static private synchronized int nextCopierNum () { return copierNumber ++; } 
 
  protected MessageInput messageIn; 
  protected MessageOutput messageOut; 
 
  public MessageCopier (MessageInput messageIn, MessageOutput messageOut) { 
    super ("MessageCopier-" + nextCopierNum ()); 
    this.messageIn = messageIn; 
    this.messageOut = messageOut; 
  } 
 
  protected boolean finished; 
 
  public void finish () { 
    finished = true; 
    interrupt (); 
  } 
 
  public void run () { 
    try { 
      copy (); 
    } catch (IOException ex) { 
      if (!finished) 
        ex.printStackTrace (); 
    } 
  } 
 
  protected void copy () throws IOException { 
    while (!interrupted ()) { 
      byte[] buffer; 
      synchronized (messageIn) { 
        messageIn.receive (); 
        buffer = new byte[messageIn.available ()]; 
        messageIn.readFully (buffer); 
      } 
      synchronized (messageOut) { 
        messageOut.write (buffer); 
        messageOut.send (); 
      } 
    } 
  } 
}