⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neighborhoodplugin.java

📁 传感器网络中的嵌入式操作系统源代码
💻 JAVA
字号:
// $Id: NeighborhoodPlugin.java,v 1.5.4.2 2003/09/18 22:44:24 mdwelsh Exp $package net.tinyos.sim.plugins;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import net.tinyos.message.*;import net.tinyos.sim.*;import net.tinyos.sim.event.*;public class NeighborhoodPlugin extends Plugin implements SimConst {  private static final int numberLinksToRemember = -1;  private LinkHolder chosenEdges = new LinkHolder(numberLinksToRemember, "chosenEdges");  private LinkHolder fixedEdges = new LinkHolder(numberLinksToRemember, "fixedEdges");  private LinkHolder invalidEdges = new LinkHolder(numberLinksToRemember, "invalidEdges");  public void handleEvent(SimEvent event) {    if (event instanceof DebugMsgEvent) {      DebugMsgEvent dme = (DebugMsgEvent)event;      if (dme.getMessage().indexOf("YaoNeighborhoodM: getNeighbors called") != -1 ||	  dme.getMessage().indexOf("YaoRegionM: getNodes called") != -1 ||	  dme.getMessage().indexOf("YaoRegionM: initialize") != -1 ||	  dme.getMessage().indexOf("KNRegionM: initialize") != -1) {	fixedEdges.removeFrom(dme.getMoteID());	chosenEdges.removeFrom(dme.getMoteID());	invalidEdges.removeFrom(dme.getMoteID());	motePanel.refresh();      } else if (dme.getMessage().indexOf("NeighborhoodM: calcEdgesTask running") != -1 ||	  dme.getMessage().indexOf("RegionM: calcEdgesTask running") != -1) {	fixedEdges.removeFrom(dme.getMoteID());	chosenEdges.removeFrom(dme.getMoteID());	invalidEdges.removeFrom(dme.getMoteID());	motePanel.refresh();      } else if (dme.getMessage().indexOf("YaoNeighborhoodM: getNeighbors:") != -1 ||	  dme.getMessage().indexOf("YaoRegionM: getNodes:") != -1 ||	  dme.getMessage().indexOf("KNRegionM: getNodes:") != -1) {	StringTokenizer st = new StringTokenizer(dme.getMessage());	String skip;	skip = st.nextToken();	skip = st.nextToken();	skip = st.nextToken();	skip = st.nextToken();	String nbr = st.nextToken();	int nbr_addr;	try {	  nbr_addr = Integer.parseInt(nbr);	} catch (Exception e) {	  return;	}	nbLink link = new nbLink(dme.getMoteID(), nbr_addr);	fixedEdges.addLink(link);	tv.getMotePanel().refresh();      } else if (dme.getMessage().indexOf("NeighborhoodM: Edge") != -1 ||	  dme.getMessage().indexOf("YaoRegionM: Edge") != -1) {	// For edge crossing messages	//System.err.println(dme.getMessage());      } else if (dme.getMessage().indexOf("NeighborhoodM: Choosing edge") != -1 ||	  dme.getMessage().indexOf("YaoRegionM: Choosing edge") != -1) {	StringTokenizer st = new StringTokenizer(dme.getMessage());	String skip;	skip = st.nextToken();	skip = st.nextToken();	skip = st.nextToken();	String fs = st.nextToken();	skip = st.nextToken();	String ts = st.nextToken();	int from_addr, to_addr;	try {	  from_addr = Integer.parseInt(fs);	  to_addr = Integer.parseInt(ts);	} catch (Exception e) {	  return;	}	nbLink link = new nbLink(from_addr, to_addr);	chosenEdges.addLink(link);	tv.getMotePanel().refresh();      } else if (dme.getMessage().indexOf("NeighborhoodM: Invalidating") != -1 ||	  dme.getMessage().indexOf("RegionM: Invalidating") != -1) {	StringTokenizer st = new StringTokenizer(dme.getMessage());	String skip;	skip = st.nextToken();	skip = st.nextToken();	String fs = st.nextToken();	skip = st.nextToken();	String ts = st.nextToken();	int from_addr, to_addr;	try {	  from_addr = Integer.parseInt(fs);	  to_addr = Integer.parseInt(ts);	} catch (Exception e) {	  return;	}	nbLink link = new nbLink(from_addr, to_addr);	invalidEdges.addLink(link);	motePanel.refresh();      }    } else if (event instanceof AttributeEvent) {      AttributeEvent attributeEvent = (AttributeEvent)event;      switch (attributeEvent.getType()) {	case ATTRIBUTE_CHANGED:	  if (attributeEvent.getAttribute() instanceof MoteCoordinateAttribute)	    motePanel.refresh();      }    }   }  public void register() {    JTextArea ta = new JTextArea(3,40);    ta.setFont(tv.defaultFont);    ta.setEditable(false);    ta.setBackground(Color.lightGray);    ta.setLineWrap(true);    ta.setText("Displays neighborhood relationships from the Neighborhood interface.");    pluginPanel.add(ta);  }  public void deregister() {}  public void reset() {    chosenEdges = new LinkHolder(numberLinksToRemember, "chosenEdges");    fixedEdges = new LinkHolder(numberLinksToRemember, "fixedEdges");    invalidEdges = new LinkHolder(numberLinksToRemember, "invalidEdges");    motePanel.refresh();  }  private void drawLine(Graphics g,       int x1, int y1, int x2, int y2, int lineWidth) {    if (lineWidth == 1)      g.drawLine(x1, y1, x2, y2);    else {      double angle;      double halfWidth = ((double)lineWidth)/2.0;      double deltaX = (double)(x2 - x1);      double deltaY = (double)(y2 - y1);      if (x1 == x2)	angle=Math.PI;      else	angle=Math.atan(deltaY/deltaX)+Math.PI/2;      int xOffset = (int)(halfWidth*Math.cos(angle));      int yOffset = (int)(halfWidth*Math.sin(angle));      int[] xCorners = { x1-xOffset, x2-xOffset+1,	x2+xOffset+1, x1+xOffset };	int[] yCorners = { y1-yOffset, y2-yOffset,	  y2+yOffset+1, y1+yOffset+1 };	  g.fillPolygon(xCorners, yCorners, 4);    }  }  public void draw(Graphics graphics) {    chosenEdges.draw(graphics, Color.gray);    fixedEdges.draw(graphics, Color.green);    invalidEdges.draw(graphics, Color.red);  }  public String toString() {    return "Neighborhood graph";  }  private class nbLink {    private int from;    private int to;    public nbLink(int from, int to) {      this.from = from;      this.to = to;    }    public int getFrom() {      return from;    }    public int getTo() {      return to;    }    public String toString() {      return from+" -> "+to;    }  }  private class LinkHolder {    private Vector holder = new Vector();    private int numLinks;    private String name;    public LinkHolder(int numLinks, String name) {      this.numLinks = numLinks;      this.name = name;    }    public Enumeration getLinks() {      return holder.elements();    }    public void addLink(nbLink link) {      if (holder.size() == numLinks) {	holder.removeElementAt(0);      }      holder.add(link);      //System.err.println(name+": Adding link: "+link+" size "+holder.size());    }    public void removeLink(nbLink link) {      holder.remove(link);    }    public void removeFrom(int id) {      Vector kill = new Vector();      Enumeration enum = getLinks();      while (enum.hasMoreElements()) {	nbLink link = (nbLink)enum.nextElement();	if (link.getFrom() == id) {	  //System.err.println(name+": Removing link: "+link);	  kill.addElement(link);	}      }      holder.removeAll(kill);    }    public void draw(Graphics graphics, Color color) {      Enumeration enum = getLinks();      while (enum.hasMoreElements()) {	nbLink link = (nbLink)enum.nextElement();	//System.err.println(name+": Drawing link: "+link);	int toaddr = link.getTo();	int fromaddr = link.getFrom();	try {	  MoteSimObject moteFrom = state.getMoteSimObject(fromaddr);	  MoteCoordinateAttribute moteFromCoordinate = moteFrom.getCoordinate();	  MoteSimObject moteTo = state.getMoteSimObject(toaddr);	  MoteCoordinateAttribute moteToCoordinate = moteTo.getCoordinate();	  graphics.setColor(color);	  drawLine(graphics,	      (int)cT.simXToGUIX(moteFromCoordinate.getX()),	      (int)cT.simYToGUIY(moteFromCoordinate.getY()),	      (int)cT.simXToGUIX(moteToCoordinate.getX()),	      (int)cT.simYToGUIY(moteToCoordinate.getY()), 4);	} catch (NullPointerException e) {	  // Ignore this link	  continue;	}      }    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -