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

📄 javistrace.java

📁 The Java Network Simulator is a Java implementation of the ns-2 simulator originally from Berkeley.n
💻 JAVA
字号:

package jns.trace;

import jns.Simulator;
import jns.element.*;
import jns.element.Element;
import jns.element.Link;
import jns.element.Node;
import jns.util.Preferences;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.GZIPOutputStream;


public class JavisTrace extends Trace
{

    private Hashtable m_handlers;
    private BufferedWriter m_writer;


    /**
     Create a new Javis trace object that will write to the file with the
     supplied name. If the name ends with ".gz", then the output will be
     written in compressed form (Javis is capable of reading compressed
     input, NAM isn't, so beware).
     Compressed output is recommended because trace-files do get big.
     */
    public JavisTrace(String filename) throws IOException
    {
        super();

        m_handlers = new Hashtable();
        registerHandler("LinkEvent", new JavisLinkHandler());
        registerHandler("HopEvent", new JavisPacketHandler());
        registerHandler("ReceiveEvent", new JavisPacketHandler());
        registerHandler("EnqueueEvent", new JavisPacketHandler());
        registerHandler("DequeueEvent", new JavisPacketHandler());
        registerHandler("LinkDropEvent", new JavisPacketHandler());
        registerHandler("QueueDropEvent", new JavisPacketHandler());

        if(filename.endsWith(".gz"))
            m_writer = new BufferedWriter(new OutputStreamWriter(
                    new GZIPOutputStream(new FileOutputStream(filename))));
        else
            m_writer = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(filename)));
    }


    public void writePreamble() throws IOException
    {

        // Write a little comment at the beginning

        m_writer.write("# Trace file generated by JNS Version " +
                       Preferences.VERSION + ".");
        m_writer.newLine();


        // Now write the initial network configuration

        Enumeration e = Simulator.getInstance().enumerateElements();

        while(e.hasMoreElements())
        {
            Element curelement = (Element) e.nextElement();

            // I don't see how to get around instanceof. We could add functions to
            // Node and Link, but that would make them Javis specific. I'll leave
            // it like this.

            if(curelement instanceof Node)
            {

                // TODO: Determine correct node ID from IP address. there is no quick
                // fix, DON'T HACK IT!
                Node node = (Node) curelement;

                m_writer.write("n -t * ");
                m_writer.write("-a " + node.getNumber() + " ");
                m_writer.write("-s " + node.getNumber() + " ");
                m_writer.write("-S UP -v circle -c black");

                m_writer.newLine();
            }
            else if(curelement instanceof Link)
            {
                Link link = (Link) curelement;

                m_writer.write("l -t * ");
                m_writer.write("-s " +
                               link.getOutgoingInterface().getNode().getNumber() +
                               " ");
                m_writer.write("-d " +
                               link.getIncomingInterface().getNode().getNumber() +
                               " ");
                m_writer.write("-S UP ");
                m_writer.write("-r " + link.getBandwidth() + " ");
                m_writer.write("-D " + link.getDelay() + " ");

                m_writer.newLine();

            }
        }

    }


    public void registerHandler(String eventname, JavisHandler handler)
    {
        m_handlers.put(eventname, handler);
    }


    public void handleEvent(Event e) throws IOException
    {
        JavisHandler handler = (JavisHandler) m_handlers.get(e.getName());
        if(handler != null)
            handler.handleEvent(e, m_writer);
    }


    public void writePostamble() throws IOException
    {
        m_writer.close();
    }

}

⌨️ 快捷键说明

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