Package org.zkoss.zktest.test

Source Code of org.zkoss.zktest.test.CometServerPush$WorkingThread

/* CometServerPush.java

{{IS_NOTE
  Purpose:
   
  Description:
   
  History:
    Nov 20, 2008 11:31:54 AM , Created by jumperchen
}}IS_NOTE

Copyright (C) 2008 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
  This program is distributed under GPL Version 3.0 in the hope that
  it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zktest.test;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;

import org.zkoss.lang.Threads;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.DesktopUnavailableException;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zul.Image;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Messagebox;

/**
* @author jumperchen
*
*/
public class CometServerPush {

  public static void start(Component info, Component listbox)
      throws InterruptedException {
    final Desktop desktop = Executions.getCurrent().getDesktop();
    if (desktop.isServerPushEnabled()) {
      Messagebox.show("Already started");
    } else {
      desktop.enableServerPush(true);
      new WorkingThread(info, listbox).start();
    }
  }

  public static void stop() throws InterruptedException {
    final Desktop desktop = Executions.getCurrent().getDesktop();
    if (desktop.isServerPushEnabled()) {
      desktop.enableServerPush(false);
    } else {
      Messagebox.show("Already stopped");
    }
  }

  private static class WorkingThread extends Thread {
    private static Color colors[] = { Color.blue, Color.cyan, Color.green,
        Color.magenta, Color.orange, Color.pink, Color.red,
        Color.yellow, Color.lightGray, Color.white };

    private Ellipse2D.Float[] ellipses;

    private double esize[];

    private float estroke[];

    private double maxSize;

    private final Desktop _desktop;

    private final Component _info;

    private final Listbox _listbox;

    private int _width = 150;

    private int _height = 150;

    private WorkingThread(Component info, Component listbox) {
      _desktop = info.getDesktop();
      _info = info;
      _listbox = (Listbox) listbox;
    }

    public void run() {
      try {
        while (true) {
          if (_info.getDesktop() == null
              || !_desktop.isServerPushEnabled()) {
            _desktop.enableServerPush(false);
            return;
          }
          Executions.activate(_desktop);
          try {
            ((Image) _info).setContent(paint());
          } finally {
            Executions.deactivate(_desktop);
          }
          Threads.sleep(1000);
        }
      } catch (DesktopUnavailableException ex) {
        System.out.println("The server push thread interrupted");
      } catch (InterruptedException e) {
        System.out.println("The server push thread interrupted");
      }
    }

    public void init(int size) {
      if (size == 60)
        size = 8;
      else if (size == 40)
        size = 12;

      // an array of type Ellipse2D.Float
      ellipses = new Ellipse2D.Float[size];

      // a double array initialized to the length of the ellipses array
      esize = new double[ellipses.length];

      // a float array initialized to the length of the ellipses array
      estroke = new float[ellipses.length];
    }

    public void getRandomXY(int i, double size, int w, int h) {
      esize[i] = size;
      estroke[i] = 1.0f;
      double x = Math.random() * (w - (maxSize / 2));
      double y = Math.random() * (h - (maxSize / 2));
      ellipses[i].setFrame(x, y, size, size);
    }

    public BufferedImage paint() {
      int size;
      try {
        size = Integer.parseInt(_listbox.getSelectedItem().getLabel());
      } catch (NumberFormatException e) {
        size = 20;
      }

      init(size);
      // fills the ellipses array with Ellipse2D.Float objects
      for (int i = 0; i < ellipses.length; i++) {
        ellipses[i] = new Ellipse2D.Float();
        // gets location for each ellipse with the given random size
        getRandomXY(i, size * Math.random(), _width, _height);
      }

      BufferedImage bi = new BufferedImage(_width, _height,
          BufferedImage.TYPE_INT_RGB);

      Graphics2D g2 = bi.createGraphics();
      g2.setBackground(Color.BLACK);
      g2.clearRect(0, 0, _width, _height);
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
          RenderingHints.VALUE_ANTIALIAS_ON);

      // sets the color and stroke size and draws each ellipse
      for (int i = 0; i < ellipses.length; i++) {
        g2.setColor(colors[i % colors.length]);
        g2.setStroke(new BasicStroke(estroke[i]));
        g2.draw(ellipses[i]);
      }

      g2.dispose();
      return bi;
    }
  }
}
TOP

Related Classes of org.zkoss.zktest.test.CometServerPush$WorkingThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.