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

📄 testformddbpacket.java

📁 java B++树 一个很好的算法来实现这些问题 推荐!
💻 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 + -