/*
 * @(#)ReloadImage.java	0.1 2002/03/23
 *
 * Copyright (c) 2000 Hiroshi Okada
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials provided
 * with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


import java.awt.*;
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.net.*;

/**
 * This is reload program for webcam
 *
 * Example applet tag
 *
 * <applet codebase="./" code=ReloadImageApplet.class width=320 height=240>
 *   <param name=imagesource value="/CGI-PATH/cam.cgi">
 * </applet>
 */
public class ReloadImageApplet extends Applet implements Runnable{

  Thread reloadThread = null;
  boolean runFlag = false;
  Image image = null;
  final static int WAIT_MSEC = 300;
  
  public void start(){
    runFlag = true;
    reloadThread = new Thread( this);
    reloadThread.start();
  }

  public void stop(){
    runFlag = false;
    reloadThread = null;
  }


  public void run(){
    while( runFlag){
      try{
        MediaTracker mt = new MediaTracker(this);
        String ts = Long.toString( new Date().getTime());
        URL imageurl = new URL( getCodeBase(),
                                getParameter("imagesource") +
                                  "?p=" + ts);
        System.err.println( ts);
        Image image = getImage( imageurl);
        mt.addImage( image, 0);
        mt.waitForAll(); 
        Graphics g = this.getGraphics();
        g.drawImage( image, 0, 0, this);
        this.image = image;
        Thread.sleep( WAIT_MSEC);
      } catch (Exception e) { System.err.println( e.toString());}
      
    }
  }

 public void paint(Graphics g) {
   if( image != null){
     g.drawImage( image, 0, 0, this);
   }
   
 }

}

