📄 rumor.java
字号:
//generate nodes
for(i = 0;i<50;i++)
{
//SensorNode senserNodes[i] = new SensorNode();//
sensorNodes[i] = new SensorNode("sensorNode");
//generate sensor node in the inspect area in random
sensorNodes[i].iX_position = (int)(380*Math.random() + 400);
sensorNodes[i].iY_position = (int)(280*Math.random() + 100);
}
//link the 51th node to sink
sensorNodes[50] = sinkNode;
//reflash neighbor node table
SensorNet.sinkNode.findNeighborNode(sensorNodes);
}
void FindRoute(SensorNode sensorNodes[],String strInterstThings)
{
FindingThread CFromSensorNode = new FindingThread(sensorNodes,"tempiture","fromSensorNode");
FindingThread CFromSinkNode = new FindingThread(sensorNodes,"tempiture","fromSink");
CFromSensorNode.start();
CFromSinkNode.start();
}
void PaintNet(Graphics g)
{
int i,j;
//draw inspect area
g.drawRect(400,100,380,280);
// g.drawRect(400-SensorNode.iSize,100-SensorNode.iSize,380+SensorNode.iSize,280+SensorNode.iSize);
//draw sensor nodes and sink
for(i = 0;i <= 50;i++)
{
g.drawOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);
if(i==50)
{
g.drawString("Sink",sensorNodes[i].iX_position,sensorNodes[i].iY_position);
}
else
{
g.drawString(Integer.toString(i),sensorNodes[i].iX_position,sensorNodes[i].iY_position);
}
}
//draw the sink node,合并到上式
//g.drawOval(50,50,8,8);
for(i = 0;i<= 50;i++)
{
if(sensorNodes[i].CInterstThings[0].strFromWho.equals("fromSink"))
{
g.setColor(new Color(10,25,200));
g.fillOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);
}
if(sensorNodes[i].CInterstThings[0].strFromWho.equals("fromSensorNode"))
{
g.setColor(new Color(200,5,0));
g.fillOval(sensorNodes[i].iX_position,sensorNodes[i].iY_position,sensorNodes[i].iSize,sensorNodes[i].iSize);
}
}
}
void PaintRoute(Graphics g,SensorNode []sensorNodes)
{
// 这句是错误的,每进入这个函数bFinish都变成了false
// 造成画图只能画一次,所以每次构造都要考虑全局变量
// SensorNode CTempNode = new SensorNode("CTempNode");
SensorNode CTempNode;
int iNextX_pos = 0;
int iNextY_pos = 0;
int iIndex = 50;
//实际上将指针交给了CTempNode,在循环中破坏了原数据
//搞的我调试了半天
// CTempNode = SensorNet.sinkNode;
CTempNode = SensorNet.sensorNodes[iIndex];
//avoid for dead circle
int iCircle = 50;
while((iIndex != 0)&&((iCircle--)>0))
{
if(CTempNode.CInterstThings[0].strFromWho.equals("fromSink"))
{
iNextX_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iToNode].iX_position;
iNextY_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iToNode].iY_position;
iIndex = CTempNode.CInterstThings[0].iToNode;
// System.out.println("in SinkPass");
}
else if(CTempNode.CInterstThings[0].strFromWho.equals("fromSensorNode"))
{
iNextX_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iFromNode].iX_position;
iNextY_pos = SensorNet.sensorNodes[CTempNode.CInterstThings[0].iFromNode].iY_position;
iIndex = CTempNode.CInterstThings[0].iFromNode;
// System.out.println("in SensorNodePass");
}
g.setColor(new Color(150,15,0));
g.drawLine(CTempNode.iX_position, CTempNode.iY_position,iNextX_pos,iNextY_pos);
//for debug
/*
System.out.println("in paintRoute");
System.out.println(CTempNode.CInterstThings[0].iToNode);
System.out.println(InterstThing.bFinish);
*/
CTempNode = SensorNet.sensorNodes[iIndex];
};
}
public void paint(Graphics CGraphics)
{
//draw the GUI_interface
PaintNet(CGraphics);
//draw ronte map
if(InterstThing.bFinish)
{
PaintRoute(CGraphics,this.sensorNodes);
}
}
}
class FindingThread extends Thread
{
SensorNode [] sensorNodes;
String strFromWho;
String strInterstThing = new String("tempitrue");
FindingThread(SensorNode [] sensorNodes, String strInterstThing,String strFromWho)
{
this.sensorNodes = sensorNodes;
this.strFromWho = new String(strFromWho);
this.strInterstThing = new String(strInterstThing);
//for debug
//System.out.println("in Thraed");
}
public void run()
{
int iTempNodeNum = 0;
int iFromNode = 0;
int i = 0;
if(this.strFromWho.equals("fromSensorNode"))
{
iTempNodeNum = 0;
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep = 0;
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].strFromWho = "fromSensorNode";
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iSelfNode = 0;
}
else if(this.strFromWho.equals("fromSink"))
{
iTempNodeNum = 50;
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep = 0;
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].strFromWho = "fromSink";
SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iSelfNode= 50;
}
do
{
iFromNode = iTempNodeNum;
//for debug
/*
System.out.println("beforSendMsg----"+iFromNode);
System.out.println("node-step:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iStep);
System.out.println("oldtime:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].ioldTime);
System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iToNode);
*/
iTempNodeNum = sensorNodes[iFromNode].SendMsg(SensorNet.sensorNodes[iFromNode].CInterstThings[0],iFromNode);
/*
System.out.println("beforGotMsg----"+iFromNode);
System.out.println("node-step:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iStep);
System.out.println("oldtime:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].ioldTime);
System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iToNode);
*/
sensorNodes[iTempNodeNum].GotMsg(SensorNet.sensorNodes[iFromNode].CInterstThings[0],iTempNodeNum);
/*
System.out.println("behidGotMsg----"+iFromNode);
System.out.println("node-step:"+SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].iStep);
System.out.println("oldtime:"+SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].ioldTime);
System.out.println("toNode:"+SensorNet.sensorNodes[iFromNode].CInterstThings[0].iFromNode);
*/
try{Thread.sleep(10);}
catch(InterruptedException e){System.out.println(e);}
}while((SensorNet.sensorNodes[iTempNodeNum].CInterstThings[0].ioldTime!=0)&&(!InterstThing.bFinish));
// System.out.println(iTempNodeNum);
System.out.println("finish Thread by:"+InterstThing.bFinish);
stop();
}
}
/*
public class rumor extends Frame implements ActionListener
{
rumor()
{
super.setTitle("Rumor Route");
super.setSize(900,600);
super.setResizable(true);
}
public static void main(String [] args)
{
rumor CMainFrame = new rumor();
SensorNet CSensorNet = new SensorNet();
Button CButtonReflash = new Button("Reflash");
//add eliment
CMainFrame.add(CSensorNet,BorderLayout.CENTER);
CMainFrame.add(CButtonReflash,BorderLayout.SOUTH);
CButtonReflash.addActionListener(CMainFrame);
CMainFrame.addWindowListener(new WindowEventHandler());
CMainFrame.pack();
CMainFrame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
this.repaint();
}
}
*/
public class rumor extends WindowAdapter implements ActionListener
{
Frame CMainFrame;
SensorNet CSensorNet;
Button CButtonReflash;
Button CButtonRestart;
rumor()
{
Frame CMainFrame = new Frame("Rumor Routing");
CSensorNet = new SensorNet();
CButtonReflash = new Button("Reflash");
CButtonRestart = new Button("Restart");
CMainFrame.setLayout(new FlowLayout());
CMainFrame.setTitle("Rumor Route");
CMainFrame.setSize(900,600);
CMainFrame.setResizable(true);
//add eliment
CMainFrame.add(CSensorNet);//,BorderLayout.CENTER);
CMainFrame.add(CButtonReflash);//,BorderLayout.SOUTH);
CMainFrame.add(CButtonRestart);//,BorderLayout.SOUTH);
CButtonReflash.addActionListener(this);
CButtonRestart.addActionListener(this);
CMainFrame.addWindowListener(this);
CMainFrame.pack();
CMainFrame.setVisible(true);
}
public static void main(String [] args)
{
new rumor();
}
public void actionPerformed(ActionEvent e)
{
String strEventButton = "";
strEventButton = ((Button)e.getSource()).getLabel();
if(strEventButton.equals("Reflash"))
{
this.CSensorNet.repaint();
}
else if(strEventButton.equals("Restart"))
{
new SensorNet();
}
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -