Package jNab.ext.helperPlugins

Source Code of jNab.ext.helperPlugins.GreenOrangeRedWithEarsPlugin

package jNab.ext.helperPlugins;

import jNab.core.bunny.Bunny;
import jNab.core.events.PingEventListener;
import jNab.core.events.StopEventListener;
import jNab.core.plugins.AbstractPlugin;
import jNab.core.protocol.MessageBlock;
import jNab.core.protocol.Packet;
import jNab.core.protocol.PingIntervalBlock;

/**
* Plugin simulating a monitoring. The bunny plays a choreography illustrating the level of what is monitored: - Low
* level: the three belly leds are blinking at 1Hz, in green, for 20 seconds. Both ears are pointed. - Medium level: the three
* belly leds are blinking at 1Hz, in orange, for 20 seconds. Left ear is pointed, right ear is floppy. - High level: the three belly
* leds are blinking at 1Hz, in red, for 20 seconds. Both ears are floppy.
*
* The level of what is monitored is simulated, starting at medium level and switching (medium, high, low, ...) every 60 seconds.
*
* @author Sylvain Gizard
* @author Sebastien Jean
*/
public class GreenOrangeRedWithEarsPlugin extends AbstractPlugin implements PingEventListener, StopEventListener
{
    /**
     * Plugin name.
     */
    private static String PLUGIN_NAME = "GreenOrangeRedWithEars_Plugin";

    /**
     * Set of parameters supported by the plugin;
     */
    private static String[] PARAMETERS = {};

    /**
     * Level (0 for low, 1 for medium, 2 for high) of the monitored process.
     */
    private int level;

    /**
     * The last time a level switch occured.
     */
    private long lastSwitchingTime;

    /**
     * Creating a new plugin instance.
     */
    public GreenOrangeRedWithEarsPlugin()
    {
  super(PLUGIN_NAME, PARAMETERS);
  this.level = 1;
  this.lastSwitchingTime = System.currentTimeMillis();
    }

    /**
     * Internal method used to retrieve the name of the choreography associated with the current level.
     *
     * @return the name of the choreography associated with the current consumption level.
     */
    private String getChoreography()
    {
  switch (this.level)
  {
  case 0:
      return "GreenBlinkingWithEars";
  case 1:
      return "OrangeBlinkingWithEars";
  default:
      return "RedBlinkingWithEars";
  }
    }

    /**
     * Playing the choreography associated to the current level, and switching the level if needed.
     *
     * @see jNab.core.events.PingEventListener#onPing()
     */
    public void onPing()
    {
  // Preparing a new packet
  Packet p = new Packet();
 
  // Asking the bunny to ping 20s later (i.e. when the choreography has finished playing)
  p.addBlock(new PingIntervalBlock(20));
  MessageBlock mb = new MessageBlock(12345);
 
  // Playing the choreography associated to current level.
  mb.addPlayChoreographyFromLibraryCommand(this.getChoreography());
  mb.addWaitPreviousEndCommand();
  p.addBlock(mb);
  this.bunny.addPacket(p);
 
  // Switching level if needed
  if (System.currentTimeMillis() - this.lastSwitchingTime > 60000)
  {
      this.level = (this.level + 1) % 3;
      this.lastSwitchingTime = System.currentTimeMillis();
  }
    }

    /**
     * @see jNab.core.events.StopEventListener#onEndOfMessage()
     */
    public void onEndOfMessage()
    {
  // When choreography has finished playing, bunny notifies a end-of-message
  // Then it is asked to ping immediately
  Packet p = new Packet();
  p.addBlock(new PingIntervalBlock(1));
  this.bunny.addPacket(p);
    }

    /**
     * @see jNab.core.events.StopEventListener#onSingleClickWhilePlaying()
     */
    public void onSingleClickWhilePlaying()
    {
  // If some click occurs while the choreography is playing, it is handled as a single-click event
  // A choreography is sent to raise both ears and bunny is asked to ping immediately after (to be able to send
  // packets generated by single-click event handling)
  this.bunny.handleEvent(Bunny.SINGLE_CLICK_EVENT, null);
  Packet p = new Packet();
  p.addBlock(new PingIntervalBlock(1));
  MessageBlock mb = new MessageBlock(12345);
  mb.addPlayChoreographyFromLibraryCommand("raisedEars");
  p.addBlock(mb);
  this.bunny.forcePacket(p);
    }
}
TOP

Related Classes of jNab.ext.helperPlugins.GreenOrangeRedWithEarsPlugin

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.