📄 testformddbpacket.java
字号:
package cq_result_trans.test;
import mddb.packets.*;
import java.awt.*;
import mddb.client.*;
import java.util.*;
import java.io.*;
import java.sql.*;
public class TestForMddbPacket {
private MddbPacket extractFrameToPacket( StringTokenizer st ) {
MddbPacket packet = new MddbPacket();
String sTemp;
ArrayList aTemp;
synchronized( this ) {
try {
packet.setSrcAddr( getPoint( st.nextToken() ) ); //得到SrcNodeAddr
packet.setSrcId( Long.parseLong( st.nextToken() ) ); //得到发送节点的ID
packet.setDestAddr( getPoint( st.nextToken() ) ); //得到DestNodeAddr
packet.setPathLength( Integer.parseInt( st.nextToken() ) ); //得到路径长度
//
sTemp = st.nextToken();
//提取路由表信息
aTemp = new ArrayList();
while( ! sTemp.equals( "EndOfList" ) ) {
aTemp.add( getPoint( sTemp ) );
sTemp = st.nextToken();
}
packet.setRoutineList( aTemp );
//提取类型信息
packet.setType( Integer.parseInt( st.nextToken() ) );
//获得时间戳
packet.setTimeStamp( Long.parseLong( st.nextToken() ) );
if( !st.nextToken().equals( "EndOfHeader" ) ) { //跳过包头结束标志
return null;
}
//取得数据--跳过结尾标志“EndOfData”
StringBuffer sb = new StringBuffer();
sTemp = null;
while( st.hasMoreTokens() &&
! ( sTemp = st.nextToken() ).equals( "EndOfData" ) ) {
sb.append( st.nextToken() + "@" );
}
//在结尾加上分隔符"@"来去除掉没有数据的情况
if( sTemp.equals( "EndOfData" ) ) {
sb.append( "@" );
}
packet.setData( sb.toString() );
}
catch( Exception e ) {
e.printStackTrace();
return null;
}
}
//清理
sTemp = null;
aTemp = null;
return packet;
}
//从发送的字符串中分析出节点位置
private Point getPoint( String s ) {
int x, y;
StringTokenizer st = new StringTokenizer( s, ":" );
x = Integer.parseInt( st.nextToken() );
y = Integer.parseInt( st.nextToken() );
return new Point( x, y );
}
private void addHeader( MddbPacket mp, int frameType, StringBuffer result ) {
//1.写入桢的类型
result.append( frameType + "@" );
//2.位置信息用X:Y的形式写入--源节点位置
result.append( ( int ) ( mp.getSrcAddr().getX() ) + ":" +
( int ) ( mp.getSrcAddr().getY() ) + "@" );
//3.源节点ID
result.append( mp.getSrcId() + "@" );
//4.目的节点位置
result.append( ( int ) ( mp.getDestAddr().getX() ) + ":" +
( int ) ( mp.getDestAddr().getY() ) + "@" );
//5.路径长度
result.append( mp.getPathLength() + "@" );
//6.写入包路由表--用字符串“EndOfList”结束
for( int i = 0; i < mp.getRoutineList().size(); i++ ) {
result.append( ( int ) ( ( ( Point )mp.getRoutineList().get( i ) ).
getX() ) + ":" +
( int ) ( ( ( Point )mp.getRoutineList().get( i ) ).
getY() ) + "@" );
}
result.append( "EndOfList@" );
result.append( mp.getType() + "@" );
result.append( mp.getTimeStamp() + "@" );
result.append( "EndOfHeader@" );
}
//7.为桢添加数据部分--以EndOfData作结
private void addData( MddbPacket mp, int frameType, StringBuffer result ) {
if( frameType == MddbPacket.FRAME_GROUP_PKG ) {
if( mp.getType() == MddbPacket.NET_RM ||
mp.getType() == MddbPacket.NET_RRM ||
mp.getType() == MddbPacket.NET_DELAY ) {
result.append( "@EndOfData" );
}
else {
result.append( mp.getData() );
result.append( "@EndOfData" );
}
}
else if( frameType == MddbPacket.FRAME_ROUTINE_PKG ) {
//TODO:对路由包的处理
}
else {
//TODO:对查询包的处理
}
}
public static void mains( String[] s ) {
//new TestForMddbPacket().simulate();
StringBuffer sb = new StringBuffer();
String ss = sb.toString();
}
public void simulate()
{
ArrayList temp = new ArrayList();
temp.add( new Point(100,100) );
temp.add( new Point(200,200) );
MddbPacket reHelloPacket = new MddbPacket( new Point(100,100),
(long)99,
new Point(200,200) ,
0,
temp,
MddbPacket.NET_RHELLO,
11119999
);
//System.out.println("ReceivePacket'sNodeId="+srcNode.ID);
StringBuffer sb = new StringBuffer();
//加入masterId
sb.append( 12345 + "@" );
//加入成员数--至少是1
sb.append( 1 + "@" ); //应该至少有一个成员--自己
//加入HeighbourList的值
HashMap neighbourList = new HashMap();
neighbourList.put(new Long(111),new Long(222));
neighbourList.put(new Long(333),new Long(444));
Set eSet = neighbourList.entrySet();
Iterator iter = eSet.iterator();
while( iter.hasNext() ) {
Map.Entry entry = ( Map.Entry )iter.next();
sb.append( ( ( Long )entry.getKey() ).longValue() + ":" );
sb.append( ( ( Long )entry.getValue() ).longValue() + "@" );
}
reHelloPacket.setData( sb.toString() );
sb = new StringBuffer();
addHeader(reHelloPacket,-1,sb);
addData(reHelloPacket,-1,sb);
byte[] data = sb.toString().getBytes();
StringTokenizer st = new StringTokenizer( new String( data ), "@" );
int frameType = Integer.parseInt( st.nextToken() );
this.extractFrameToPacket(st);
}
public static void mainss(String[] s){
SynTest st = new SynTest();
Accessor as1 = new Accessor(st,1);
Accessor as2 = new Accessor(st,2);
as1.start();
as2.start();
}
public static void main(String[] s)
{
Object[] obj = new Object[3];
obj[0] = new Long(999);
obj[1] = new Long(888);
obj[2] = new Long(777);
StringBuffer sb = new StringBuffer();
sb.append(obj[0]+":");
sb.append(obj[1]+":");
sb.append(obj[2]+":");
System.out.println(sb.toString());
}
}
class Accessor extends Thread{
SynTest sst;
int id;
public Accessor(SynTest st,int id){
sst = st;
this.id = id;
}
public synchronized void run(){
try{
synchronized(sst){
while( true ) {
System.out.print( "this is in " + id + " " );
sst.synDeth();
sleep( 1000 );
}
}
}catch(Exception e){}
}
}
class SynTest{
void synDeth(){
synchronized(this)
{
System.out.println("In Syn of SynTest");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -