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

📄 simparamtcp.java

📁 一个小型网络仿真器的实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  }

  private class DialogListener implements ActionListener,
                                            ListSelectionListener {
    public void valueChanged(ListSelectionEvent e) {
    }

    public void actionPerformed(ActionEvent e) {
      String command=e.getActionCommand();

      if(command.equals("TCP Properties...")) {
        PropDialogListener listener=new PropDialogListener();
        listener.dialog=new JDialog(theGUI.getMainFrame(),"TCP Properties",true);
        listener.dialog.getContentPane().setLayout(new BoxLayout(
                  listener.dialog.getContentPane(),BoxLayout.Y_AXIS));
        JPanel aPanel=new JPanel();
        aPanel.add(new JLabel("Processing delay (usecs):"));
        aPanel.add(listener.txtDelay=new JTextField(String.valueOf(tcp_delay),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("Delay variation (usecs):"));
        aPanel.add(listener.txtDelayvar=new JTextField(String.valueOf(tcp_delayvar),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("Max window size (bytes):"));
        aPanel.add(listener.txtMaxwin=new JTextField(String.valueOf(tcp_maxwin),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("Max segment size (bytes):"));
        aPanel.add(listener.txtMaxseg=new JTextField(String.valueOf(tcp_maxseg),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("RTT Alpha (~0.125):"));
        aPanel.add(listener.txtAlpha=new JTextField(String.valueOf(rtt_alpha),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("RTT Beta (~0.25):"));
        aPanel.add(listener.txtBeta=new JTextField(String.valueOf(rtt_beta),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("RTT Lower Bound (seconds):"));
        aPanel.add(listener.txtLBound=new JTextField(String.valueOf(rtt_lbound),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("RTT Upper Bound (seconds):"));
        aPanel.add(listener.txtUBound=new JTextField(String.valueOf(rtt_ubound),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("TCP Congestion Control:"));
        String [] tags=new String[3];
        tags[0]="Standard";
        tags[1]="Tahoe";
        tags[2]="Reno";
        aPanel.add(listener.cmbTCPCC=new JComboBox(tags));
        listener.cmbTCPCC.setSelectedIndex(tcp_cc);
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(new JLabel("Logging every (ticks) (e.g. 1, 100):"));
        aPanel.add(listener.txtLogFac=new JTextField(String.valueOf(log_factor),7));
        listener.dialog.getContentPane().add(aPanel);
        aPanel=new JPanel();
        aPanel.add(listener.btnOK=new JButton("OK"));
        aPanel.add(listener.btnCancel=new JButton("Cancel"));
        listener.dialog.getContentPane().add(aPanel);
        listener.dialog.getRootPane().setDefaultButton(listener.btnOK);
        listener.btnOK.addActionListener(listener);
        listener.btnCancel.addActionListener(listener);
        listener.dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        listener.dialog.pack();
        Dimension ddim=listener.dialog.getPreferredSize();
        Dimension sdim=Toolkit.getDefaultToolkit().getScreenSize();
        listener.dialog.setLocation((sdim.width-ddim.width)/2,(sdim.height-ddim.height)/2);
        listener.dialog.show();
      }
      else if(command.equals("Copy Properties to All")) {
        //well, need to find all SimParamTCP in the topology and update all of them!
        java.util.List components=getOwner().getSim().getSimComponents();
        for(int i=0;i<components.size();i++) {
          SimComponent comp=(SimComponent)components.get(i);
          SimParameter [] parms=comp.getParameters();
          for(int j=0;j<parms.length;j++) {
            if(parms[j]==me()) continue; //skip myself
            if(parms[j] instanceof SimParamTCP) {
              SimParamTCP thattcp=(SimParamTCP)parms[j];
              thattcp.tcp_delay=tcp_delay;
              thattcp.tcp_delayvar=tcp_delayvar;
              thattcp.tcp_maxwin=tcp_maxwin;
              thattcp.tcp_maxseg=tcp_maxseg;
              thattcp.rtt_alpha=rtt_alpha;
              thattcp.rtt_beta=rtt_beta;
              thattcp.rtt_lbound=rtt_lbound;
              thattcp.rtt_ubound=rtt_ubound;
              thattcp.tcp_cc=tcp_cc;
              thattcp.log_factor=log_factor;
            }
          }
        }
      }
      else if(command.equals("Close")) {
        ctableDialog.dispose();
      }
    }
  }

//helper for monitoring changes in the simulation (e.g. to refresh table)
  private void checkLinks() {
    //check if the owner is still there...
    if(!getOwner().getSim().getSimComponents().contains(getOwner())) {
      if(ctableDialog!=null) ctableDialog.dispose();
    }
  }

//the table model
  private class MyTableModel extends javax.swing.table.AbstractTableModel {
    public int getRowCount() {
      return tcp.connectionCount();
    }
    public int getColumnCount() {
      return 5;
    }
    public Object getValueAt(int row,int col) {
      int valueip;
      String ip;
      switch(col) {
        case 0:
          valueip=tcp.queryTCB_srcip(row);
          ip=String.valueOf((valueip>>24)&0xff)+".";
          ip+=String.valueOf((valueip>>16)&0xff)+".";
          ip+=String.valueOf((valueip>>8)&0xff)+".";
          ip+=String.valueOf(valueip&0xff);
          return ip;
        case 1:
          return String.valueOf(tcp.queryTCB_srcport(row));
        case 2:
          valueip=tcp.queryTCB_destip(row);
          ip=String.valueOf((valueip>>24)&0xff)+".";
          ip+=String.valueOf((valueip>>16)&0xff)+".";
          ip+=String.valueOf((valueip>>8)&0xff)+".";
          ip+=String.valueOf(valueip&0xff);
          return ip;
        case 3:
          return String.valueOf(tcp.queryTCB_destport(row));
        case 4:
          String stat=tcp.queryTCBStatus(row);
          if(stat==null) return "N/A";
          return stat;
      }
      return null;
    }
    public String getColumnName(int col) {
      switch(col) {
        case 0: return "Source IP";
        case 1: return "Source Port";
        case 2: return "Dest IP";
        case 3: return "Dest Port";
        case 4: return "Status";
      }
      return "N/A";
    }
  }

  private JComponent createNewCTableDialog() {
  //the listener
    DialogListener listener=new DialogListener();

  //prepare the table
    table=new JTable(new MyTableModel());
    JScrollPane scrollPane=new JScrollPane(table);
    table.setPreferredScrollableViewportSize(new Dimension(400,100));
    table.getSelectionModel().addListSelectionListener(listener);
    table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

  //prepare buttons panel
    JPanel compPanel=new JPanel();
    JButton btnProp=new JButton("TCP Properties...");
    btnProp.addActionListener(listener);
    compPanel.add(btnProp);
    JButton btnCopy=new JButton("Copy Properties to All");
    btnCopy.addActionListener(listener);
    compPanel.add(btnCopy);
    JButton btnClose=new JButton("Close");
    btnClose.addActionListener(listener);
    compPanel.add(btnClose);

  //now the outer panel
    JPanel outerpane=new JPanel();
    GridBagLayout gl=new GridBagLayout();
    outerpane.setLayout(gl);
    GridBagConstraints gc=new GridBagConstraints();
    gc.fill=GridBagConstraints.BOTH;
    gc.gridx=0; gc.gridy=0;
    gl.setConstraints(compPanel,gc);
    outerpane.add(compPanel);
    gc.gridy=1; gc.weightx=1; gc.weighty=1;
    gl.setConstraints(scrollPane,gc);
    outerpane.add(scrollPane);

    return outerpane;
  }

  public void actionPerformed(ActionEvent e) {
    if(ctableDialog==null) {
      ctableDialog=new SimDialog(theGUI.getMainFrame(),getOwner().getName()
                                 +" - "+getName(),getOwner().getSim(),theGUI) {
          public void componentsChanged() { checkLinks(); }
        };

      ctableDialog.getContentPane().add(createNewCTableDialog());
      ctableDialog.addWindowListener(new WindowAdapter() {
          public void windowClosed(WindowEvent e) {
            ctableDialog=null;
          }
        });
      ctableDialog.pack();
      Dimension dsize=ctableDialog.getSize();
      Dimension scrsize=Toolkit.getDefaultToolkit().getScreenSize();
      ctableDialog.setLocation((scrsize.width-dsize.width)/2,(scrsize.height-dsize.height)/2);

      ctableDialog.show();
    }
    else
      ctableDialog.requestFocus();
  }

  private SimParamTCP me() {
    return this;
  }
}

⌨️ 快捷键说明

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