亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mspastryprotocol.java

?? pastry 協(xié)議在peersim下的仿真環(huán)境。測試無誤。在eclipse下打開源文件夾為工程即可使用和做仿真實驗。
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:


        if (  (!this.nodeId.equals(nexthop)) && (nexthop != null)) {    //send m to nexthop
            transport = (UnreliableTransport) (Network.prototype).getProtocol(tid);
            transport.send(nodeIdtoNode(this.nodeId), nodeIdtoNode(nexthop), m, mspastryid);
        }
        else receiveRoute(m);


    }

    //______________________________________________________________________________________________
    /**
     * Sort the nodes of the network by its nodeIds
     */
    private void sortNet() {
        Network.sort(new Comparator() {
            //______________________________________________________________________________________
            public int compare(Object o1, Object o2) {
                Node n1 = (Node) o1;
                Node n2 = (Node) o2;
                MSPastryProtocol p1 = (MSPastryProtocol) (n1.getProtocol(mspastryid));
                MSPastryProtocol p2 = (MSPastryProtocol) (n2.getProtocol(mspastryid));
                return Util.put0(p1.nodeId).compareTo(Util.put0(p2.nodeId));
                // return p1.nodeId.compareTo(p2.nodeId);
            }
            //______________________________________________________________________________________
            public boolean equals(Object obj) {
                return compare(this, obj) == 0;
            }
            //______________________________________________________________________________________
        });
    }

    //______________________________________________________________________________________________
    /**
     * search the node that is nerares than the specified node
     * @param current Node
     * @return Node
     */
    private Node selectNeighbor(Node current) {
       //scelgo il seed come fatto nello StateBuilder per i rappresentanti
       //il seed sar? quel Node che da m? ha la minor latenza
       int candidates = 10;
       long minLatency = Long.MAX_VALUE;
       int seed = 0;

       for (int i = 0; i < candidates; i++) {
           int randomIndex;
           do {
              randomIndex =  CommonState.r.nextInt(Network.size());
           } while (!Network.get(randomIndex).isUp() );


           long lat = getTr(randomIndex).getLatency(current,Network.get(randomIndex));

           if (lat < minLatency) {
               minLatency = lat;
               seed = randomIndex;
           }
         }

       return Network.get(seed);
   }


    //______________________________________________________________________________________________
    /**
     * Given that this node was correctly initialized (e.g. routing table and  leafset created, and
     * empty) it perform a join requesta to the mspastry according to the protocol specification
     */
    public void join() {
        if (this.nodeId == null) {
            UniformRandomGenerator urg = new UniformRandomGenerator(
                    MSPastryCommonConfig.BITS, CommonState.r);
            this.setNodeId(urg.generate());
            sortNet();
        }

       Message joinrequest = Message.makeJoinRequest(null);
               joinrequest.body = new Message.BodyJoinRequestReply();
       Message.BodyJoinRequestReply body =  (Message.BodyJoinRequestReply )(joinrequest.body);
       body.joiner = this.nodeId;

       body.rt = this.routingTable;

       joinrequest.dest = this.nodeId;

       Node seed = selectNeighbor(nodeIdtoNode(this.nodeId));

       peersim.edsim.EDSimulator.add(0, joinrequest, seed, mspastryid);


    }


    //______________________________________________________________________________________________
    /**
     * shortcut for getting the MSPastry level of the node with index "i" in the network
     * @param i int
     * @return MSPastryProtocol
     */
    public final MSPastryProtocol get(int i) {
        return ((MSPastryProtocol) (Network.get(i)).getProtocol(mspastryid));
    }

    //______________________________________________________________________________________________
    /**
     * shortcut for getting the Transport level of the node with index "i" in the network
     * @param i int
     * @return MSPastryProtocol
     */
    public final Transport getTr(int i) {
        return ((Transport) (Network.get(i)).getProtocol(tid));
    }

    //______________________________________________________________________________________________
    /**
     * This primitive provide the sending of the data to dest, by encapsulating it into a LOOKUP
     * Message
     *
     * @param recipient BigInteger
     * @param data Object
     */
    public void send(BigInteger recipient, Object data) {
    	Message m = new Message(data);
    	m.dest = recipient;
    	m.src = this.nodeId;
    	m.timestamp = CommonState.getTime();

    	/*
    	 * starting by the current pastry node (this.NodeId), until destination
    	*/
      Node me = nodeIdtoNode(this.nodeId);
      EDSimulator.add(0, m, me, mspastryid);
    }

    //______________________________________________________________________________________________
    private static final boolean cond1(BigInteger k, BigInteger i, BigInteger j) {
        return k.subtract(j).abs().compareTo(k.subtract(i).abs()) < 0;
    }

    private static final boolean cond2(BigInteger k, BigInteger j, int r) {
        return Util.prefixLen(k, j) >= r;
    }


    //______________________________________________________________________________________________
    /**
     * @param myNode Node
     * @param myPid int
     * @param m Message
     */
    void performJoinRequest(Node myNode, int myPid, Message m) {
        // aggiungi alla m.rt la riga N di myNode.R,
        // dove commonprefixlen vale n-1
        // (calcolata tra il nodo destinatatio (j) e (il nodeId di myNode)
        MSPastryProtocol myP = ((MSPastryProtocol) myNode.getProtocol(myPid));
        Message.BodyJoinRequestReply body = (Message.BodyJoinRequestReply)m.body;

        if (nodeId.equals(body.joiner)) return;

        int n = Util.prefixLen(nodeId, body.joiner) + 1;

        body.rt.copyRowFrom(myP.routingTable, n);
    }



    //______________________________________________________________________________________________
    /**
     * see MSPastry protocol "performJoinReply" primitive
     */
    private void probeLS() {
        e("probeLS\n");
        BigInteger[] leafs = this.leafSet.listAllNodes();

        for (int i = 0; i < leafs.length; i++) {
            transport = (UnreliableTransport) (Network.prototype).getProtocol(tid);

            Message m = new Message(Message.MSG_LSPROBEREQUEST, null);
            m.dest = this.nodeId; //using m.dest to contain the source of the probe request


            transport.send(nodeIdtoNode(this.nodeId), nodeIdtoNode(leafs[i]), m, mspastryid);
        }

    }


    //______________________________________________________________________________________________
    /**
     * see MSPastry protocol "performJoinReply" primitive
     * @param myNode Node
     * @param myPid int
     * @param m Message
     */
    void performJoinReply(Node myNode, int myPid, Message m) {
        // Ri.add(R u L)           (i = myself)
        // Li.add(L)

        Message.BodyJoinRequestReply reply = (Message.BodyJoinRequestReply) m.body;
        //this.routingTable = (RoutingTable) reply.rt.clone();
        this.routingTable = reply.rt;

        BigInteger[] l = reply.ls.listAllNodes();

        for (int j = 0; j < l.length; j++) {
            int row, col;

            row = Util.prefixLen(this.nodeId, l[j]);
            col = Util.charToIndex(Util.put0(l[j]).charAt(row)); /// prima era:col = Util.charToIndex(Util.put0(l[j]).charAt(row + 1));

            this.routingTable.set(row, col, l[j]);
        }

        // poch? this.leafSet e' vuoto, la add() viene fatta tramite assegnazione diretta.
        this.leafSet = (LeafSet) reply.ls.clone();
        this.leafSet.nodeId = this.nodeId;


        probeLS();

    }
    //______________________________________________________________________________________________
    /**
     * see MSPastry protocol "performLSProbeRequest" primitive
     * @param m Message
     */
    private void performLSProbeRequest(Message m) {

        this.leafSet.push(m.dest);

        int row = Util.prefixLen(this.nodeId, m.dest);
        int col = Util.charToIndex(Util.put0(m.dest).charAt(row)); /// prima era:col = Util.charToIndex(Util.put0(l[j]).charAt(row + 1));

        BigInteger cell = this.routingTable.get(row, col);
        if (cell!=null) {

         transport = (UnreliableTransport) (Network.prototype).getProtocol(tid);

          long oldLat = transport.getLatency(nodeIdtoNode(this.nodeId), nodeIdtoNode(cell));
          long newLat = transport.getLatency(nodeIdtoNode(this.nodeId), nodeIdtoNode(m.dest));
            if ( newLat > oldLat )
                return;
        }

         this.routingTable.set(row, col, m.dest);
    }

    //______________________________________________________________________________________________
    /**
     * the cleaning service is called occasionally in order to remove from the tables of this node
     * failed entrie.
     * @param myNode Node
     * @param myPid int
     * @param m Message
     */
    private void cleaningService(Node myNode, int myPid, Message m) {
        // cleaning tables...

        BigInteger bCheck;
        Node nCheck;
        for (int irow = 0; irow < routingTable.rows; irow++)
         for (int icol = 0; icol < routingTable.cols; icol++) {
             bCheck = routingTable.get(irow, icol);
             nCheck = nodeIdtoNode(bCheck);
             if ((nCheck == null) || (!nCheck.isUp()))
                routingTable.set(irow, icol, null);
         }

        BigInteger[] bCheck2 = leafSet.listAllNodes();
        for (int i = 0; i < bCheck2.length; i++) {
            nCheck = nodeIdtoNode(bCheck2[i]);
            if ((nCheck == null) || (!nCheck.isUp()))
             leafSet.removeNodeId(bCheck2[i]);
        }

        long delay = 1000 + CommonState.r.nextLong(1000);
        EDSimulator.add(delay, m, myNode, myPid);
    }

    //______________________________________________________________________________________________
    /**
     * manage the peersim receiving of the events
     * @param myNode Node
     * @param myPid int
     * @param event Object
     */
    public void processEvent(Node myNode, int myPid, Object event) {


        if (!cleaningScheduled) {
            long delay = 1000 + CommonState.r.nextLong(1000);
            Message service = new Message(Message.MSG_SERVICEPOLL, "");
            service.dest = nodeId;
            EDSimulator.add(delay, service, myNode, myPid);
            cleaningScheduled =true;
        }

        /**
         * Parse message content
         * Activate the correct event manager fot the partiular event
         */
        this.mspastryid = myPid;

        Message m = (Message) event;

        switch (m.messageType) {
        case Message.MSG_LOOKUP:
            route(m, myNode);
            break;

        case Message.MSG_JOINREQUEST:
            performJoinRequest(myNode, myPid, m);
            route(m, myNode);
            break;

        case Message.MSG_JOINREPLY:
            performJoinReply(myNode, myPid, m);
            break;

        case Message.MSG_SERVICEPOLL:
            cleaningService( myNode,  myPid,  m);
            break;
        case Message.MSG_LSPROBEREQUEST:
            performLSProbeRequest(m);
            break;
        }


    }

    //______________________________________________________________________________________________
    /**
     * set the current NodeId
     *
     * @param tmp BigInteger
     */
    public void setNodeId(BigInteger tmp) {
        this.nodeId = tmp;
        leafSet.nodeId = tmp;

    }

    //______________________________________________________________________________________________
    /**
     * debug only
     * @param o Object
     */
    private static void e(Object o) { if (MSPastryCommonConfig.DEBUG) System.err.println(o);}

    /**
     * debug only
     * @param o Object
     */
    private static void o(Object o) { if (MSPastryCommonConfig.DEBUG) System.out.println(o);}

    //______________________________________________________________________________________________
} // End of class

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品中文字幕欧美| 一个色综合av| 国产美女久久久久| 26uuu精品一区二区三区四区在线| 日本欧美在线观看| 欧美成人性战久久| 国产一区不卡视频| 亚洲国产激情av| 91欧美一区二区| 亚洲成a人在线观看| 欧美电视剧在线观看完整版| 国内精品在线播放| 国产精品美女一区二区| 欧美亚男人的天堂| 国内一区二区在线| 亚洲美女少妇撒尿| 日韩一区二区精品在线观看| 国产精品一区二区三区四区| 《视频一区视频二区| 555夜色666亚洲国产免| 九色porny丨国产精品| 国产精品免费视频观看| 91浏览器在线视频| 看片网站欧美日韩| 国产精品久久久久久久久图文区| 91美女片黄在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 久久精品99国产精品日本| 欧美xxxx老人做受| 91偷拍与自偷拍精品| 另类调教123区| 亚洲女同一区二区| 日韩一级完整毛片| 不卡电影免费在线播放一区| 偷拍自拍另类欧美| 国产精品美女久久久久久久久久久 | 日韩视频一区二区三区| 粉嫩绯色av一区二区在线观看| 亚洲成在人线在线播放| 国产视频一区二区在线| 3d动漫精品啪啪| 成人黄色av电影| 久久国产成人午夜av影院| 亚洲欧美日韩一区| 337p日本欧洲亚洲大胆精品| 欧美日韩在线播| 国产激情一区二区三区| 午夜伊人狠狠久久| 中文字幕综合网| 日韩免费视频一区二区| 在线观看日韩电影| 国产精品一区二区三区四区| 日韩在线卡一卡二| 一区二区三区**美女毛片| 欧美韩国一区二区| 中文字幕av不卡| 欧美zozozo| 日韩欧美高清一区| 在线播放中文一区| 欧美日韩情趣电影| 国产91精品露脸国语对白| 精品日韩欧美一区二区| 中文字幕第一区二区| 99久久99久久精品免费看蜜桃| 久久精品国产成人一区二区三区 | 成人动漫视频在线| 亚洲国产成人av网| 亚洲美女淫视频| 国产精品久久久久影院| 国产区在线观看成人精品| 日韩视频一区在线观看| 欧美亚洲国产一区二区三区va | 国产欧美精品日韩区二区麻豆天美| 欧美精品精品一区| 欧日韩精品视频| av午夜精品一区二区三区| 黄网站免费久久| 国产精品1区2区| 懂色av一区二区三区蜜臀| 国产老妇另类xxxxx| 麻豆精品新av中文字幕| 精品美女在线播放| 在线观看91av| 欧美美女一区二区三区| 日韩欧美精品三级| 日韩欧美综合一区| 亚洲视频网在线直播| 亚洲免费观看高清| 日韩毛片高清在线播放| 精品福利在线导航| 欧美电影免费观看高清完整版在线 | 日韩精品一区二区三区在线播放| 欧美日韩一区久久| 欧美三级欧美一级| 欧美精品三级日韩久久| 欧美裸体一区二区三区| 欧美精品久久天天躁| 欧美成人女星排名| 久久久亚洲高清| 国产精品视频看| 亚洲高清三级视频| 九九热在线视频观看这里只有精品| 捆绑调教美女网站视频一区| 精品一区二区免费| 国产成人综合自拍| 色视频一区二区| 欧美日韩国产另类不卡| 精品国精品国产尤物美女| 中文字幕第一区综合| 亚洲国产日韩a在线播放| 久久黄色级2电影| 成人午夜短视频| 国产精品网站在线观看| 91精品婷婷国产综合久久性色| 欧美大片一区二区| 国产精品免费aⅴ片在线观看| 亚洲一二三四区| 国产老妇另类xxxxx| 欧美亚洲一区二区在线观看| 777久久久精品| 中文av一区特黄| 天堂久久久久va久久久久| 成人永久免费视频| 91精品久久久久久久99蜜桃| 亚洲国产精品精华液ab| 日韩国产在线观看一区| 成人国产精品免费观看动漫| 欧美一级二级三级蜜桃| 亚洲欧洲成人自拍| 精品综合久久久久久8888| 色先锋久久av资源部| 亚洲精品一区二区三区蜜桃下载 | 久久久噜噜噜久久人人看| 亚洲高清三级视频| 91网站黄www| 国产午夜精品在线观看| 麻豆成人综合网| 精品视频一区 二区 三区| 国产精品青草久久| 国产一区二区三区不卡在线观看| 欧美高清视频www夜色资源网| 久久久高清一区二区三区| 亚洲福利视频导航| eeuss鲁一区二区三区| 日韩精品在线看片z| 亚洲一区二区三区在线播放| av动漫一区二区| 久久久亚洲午夜电影| 日韩成人dvd| 在线视频国内一区二区| 中文字幕精品一区| 久久国产成人午夜av影院| 欧美日韩国产经典色站一区二区三区| 亚洲国产精品ⅴa在线观看| 久久精品国产亚洲高清剧情介绍 | 国产成人啪免费观看软件| 欧美精品一二三区| 亚洲色图20p| 成人不卡免费av| 色婷婷av一区| 欧美成人bangbros| 亚洲福利一区二区| 欧美午夜影院一区| 依依成人精品视频| 91蜜桃传媒精品久久久一区二区| 国产精品日日摸夜夜摸av| 风间由美性色一区二区三区| 久久久久国产免费免费| 国产在线观看免费一区| 精品国产伦一区二区三区免费| 国产精品123区| 精品国产乱码91久久久久久网站| 日韩精品一二三区| 欧美日韩免费观看一区二区三区| 亚洲一区二区三区在线看| 欧美日本在线看| 日韩电影一区二区三区| 日韩精品中文字幕在线不卡尤物| 国内精品伊人久久久久av影院 | 国产一区二区视频在线| 久久久蜜桃精品| 91在线观看视频| 亚洲成av人**亚洲成av**| 欧美一区日韩一区| 国产一区二区三区精品欧美日韩一区二区三区| 26uuu亚洲综合色| av一区二区三区在线| 国产精品福利av| 老司机精品视频一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 色一情一伦一子一伦一区| 亚洲午夜久久久久久久久久久| 欧美女孩性生活视频| 九色综合狠狠综合久久| 日本一区二区免费在线| 在线精品视频免费观看| 久久超级碰视频| 亚洲天堂久久久久久久| 欧美日韩精品电影| 久久99国内精品|