示例#1
0
  public void updateCurrentPacket(boolean forced) {
    if (!forced && _currentSelectedPacket == _packetTable.getSelectedRow()) return;
    /*try
    {
        DataStructure gp = _gameSessionViewer.getPacket(_currentSelectedPacket);
        if(gp!= null)
            gp.setViewed(false);
    }
    catch (IndexOutOfBoundsException e)
    {

    }*/
    _currentSelectedPacket = _packetTable.getSelectedRow();

    // reset the selected part as we selected another packet
    _currentSelectedPart = null;

    DataPacket gp = _gameSessionViewer.getPacket(_currentSelectedPacket);
    // gp.setViewed(true);
    // System.out.println("Selected row/packet: "+_table.getSelectedRow());

    _hexDumpArea.setText("");
    if (gp.getPacketFormat() != null && gp.isValid()) {
      _packetFormat.setText(gp.getPacketFormat().getPartsStr());

      // colorfull hex dump :P
      // opcode
      if (gp.getPacketId() != null) {
        for (IdPart part : gp.getPacketId().getParts()) {
          int bytes = part.getType().getTypeByteNumber();
          for (int i2 = 0; i2 < bytes; i2++) {
            addStyledText(
                Util.zeropad(Long.toHexString(part.getValue() << (8 * i2) & 0xff), 2).toUpperCase(),
                "op");
            if (i2 < bytes - 1) addStyledText(" ", "op");
          }
          addStyledText(" ", "base");
        }
      }

      // chksum
      if (gp.getProtocol().getChecksumSize() > 0) {
        int size = gp.getProtocol().getChecksumSize();
        for (int i = 1; i < size + 1; i++) {
          addStyledText(
              Util.zeropad(Integer.toHexString(gp.getIdData()[i] & 0xff), 2).toUpperCase(), "chk");
          if (i < size) addStyledText(" ", "chk");
        }
        addStyledText(" ", "base");
      }

      // parsed packet parts
      for (ValuePart part : gp.getValuePartList()) {
        addStyledText(Util.rawHexDump(part.getBytes()), part.getType().getName(), true);
        addStyledText(" ", "base");
      }

      // unparsed data (if any)
      addStyledText(Util.rawHexDump(gp.getUnparsedData()), "base");

      this.addLineBreaksToHexDump(gp.getIdData(), gp.getByteBuffer().array());

      int opSize = 0;
      for (PartType pt : gp.getPacketFormat().getIdParts()) {
        opSize += pt.getTypeByteNumber() * 3;
      }
      DataPartNode root =
          new DataPartNode(gp.getRootNode(), opSize + gp.getProtocol().getChecksumSize() * 3);
      _packetViewTableModel.setRoot(root);
      _packetViewTable.revalidate();
      _packetViewTable.expandAll();
    } else {
      // clear the format
      _packetFormat.setText("");

      // dump everything
      _hexDumpArea.setText("");

      // if we know the opcode but the format was invalid still show the opcode
      if (gp.getFormat() != null) {
        for (IdPart part : gp.getPacketId().getParts()) {
          int bytes = part.getType().getTypeByteNumber();
          for (int i2 = 0; i2 < bytes; i2++) {
            addStyledText(
                Util.zeropad(Long.toHexString(part.getValue() << (8 * i2) & 0xff), 2).toUpperCase(),
                "op");
            if (i2 < bytes - 1) addStyledText(" ", "op");
          }
          addStyledText(" ", "base");
        }
      }

      ViewPane.this.addStyledText(Util.rawHexDump(gp.getData()), "base");

      this.addLineBreaksToHexDump(gp.getIdData(), gp.getByteBuffer().array());

      // no part for u
      _packetViewTableModel.setRoot(null);
    }
  }