FileDocCategorySizeDatePackage
ViewRtpStreamInfo.javaAPI DocJMF 2.1.1e5519Mon May 12 12:20:34 BST 2003jmapps.rtp

ViewRtpStreamInfo.java

/*
 * @(#)ViewRtpStreamInfo.java	1.3 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

package jmapps.rtp;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.media.rtp.*;

import com.sun.media.util.JMFI18N;
import com.sun.media.rtp.util.Signed;

import jmapps.ui.*;


public class ViewRtpStreamInfo extends JMPanel {

    private SessionManager          mngrSession;
    private RTPStream               stream;
    private UpdateThread            threadUpdate = null;

    private JMPanel     panelContent = null;
    private JMPanel     panelLabels = null;
    private JMPanel     panelData = null;
    private Label       fieldOwner;
    private Label       fieldSsrc;
    private Label       fieldLostPdu;
    private Label       fieldProcessedPdu;
    private Label       fieldMisorderedPdu;
    private Label       fieldInvalidPdu;
    private Label       fieldDuplicatePdu;

    private static final String LABEL_NAME              = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.owner" );
    private static final String LABEL_SSRC              = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.ssrc" );
    private static final String LABEL_LOST_PDU          = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.lostpdu" );
    private static final String LABEL_PROCESSED_PDU     = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.processedpdu" );
    private static final String LABEL_MISORDERED_PDU    = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.misorderedpdu" );
    private static final String LABEL_INVALID_PDU       = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.invalidpdu" );
    private static final String LABEL_DUPLICATE_PDU     = JMFI18N.getResource ( "jmstudio.rtpsessionctrl.stream.duplicatepdu" );


    public ViewRtpStreamInfo ( SessionManager mgrSession, RTPStream stream ) {
	    super ();

        this.mngrSession = mngrSession;
        this.stream = stream;
        try {
            init();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void addNotify () {
        super.addNotify ();

        if ( threadUpdate == null )
            threadUpdate = new UpdateThread ();
        threadUpdate.start ();
    }

    public void removeNotify () {
        if ( threadUpdate != null ) {
            threadUpdate.terminate ();
            threadUpdate = null;
        }

        super.removeNotify ();
    }

    private void init () throws Exception {
        Label       label;

        this.setLayout ( new BorderLayout(6,6) );

        panelContent = new JMPanel ( new BorderLayout(6,6) );
        this.add ( panelContent, BorderLayout.NORTH );

        panelLabels = new JMPanel ( new GridLayout(0,1,0,0) );
        panelContent.add ( panelLabels, BorderLayout.WEST );
        panelData = new JMPanel ( new GridLayout(0,1,0,0) );
        panelContent.add ( panelData, BorderLayout.CENTER );

        label = new Label ( LABEL_NAME );
        panelLabels.add ( label );
        fieldOwner = new Label ();
        panelData.add ( fieldOwner );

        label = new Label ( LABEL_SSRC );
        panelLabels.add ( label );
        fieldSsrc = new Label ();
        panelData.add ( fieldSsrc );

        if ( stream instanceof ReceiveStream ) {
            label = new Label ( LABEL_LOST_PDU );
            panelLabels.add ( label );
            fieldLostPdu = new Label ();
            panelData.add ( fieldLostPdu );

            label = new Label ( LABEL_PROCESSED_PDU );
            panelLabels.add ( label );
            fieldProcessedPdu = new Label ();
            panelData.add ( fieldProcessedPdu );

            label = new Label ( LABEL_MISORDERED_PDU );
            panelLabels.add ( label );
            fieldMisorderedPdu = new Label ();
            panelData.add ( fieldMisorderedPdu );

            label = new Label ( LABEL_INVALID_PDU );
            panelLabels.add ( label );
            fieldInvalidPdu = new Label ();
            panelData.add ( fieldInvalidPdu );

            label = new Label ( LABEL_DUPLICATE_PDU );
            panelLabels.add ( label );
            fieldDuplicatePdu = new Label ();
            panelData.add ( fieldDuplicatePdu );
        }

        updateFields ();
    }

    private void updateFields () {
        ReceptionStats  stats;

        fieldOwner.setText ( stream.getParticipant().getCNAME() );
        fieldSsrc.setText ( "" + Signed.UnsignedInt((int)stream.getSSRC()) );

        if ( stream instanceof ReceiveStream ) {
            stats = ((ReceiveStream)stream).getSourceReceptionStats ();

            fieldLostPdu.setText ( "" + stats.getPDUlost() );
            fieldProcessedPdu.setText ( "" + stats.getPDUProcessed() );
            fieldMisorderedPdu.setText ( "" + stats.getPDUMisOrd() );
            fieldInvalidPdu.setText ( "" + stats.getPDUInvalid() );
            fieldDuplicatePdu.setText ( "" + stats.getPDUDuplicate() );
        }
    }


    private class UpdateThread extends Thread {

        private boolean     boolTerminate = false;

        public UpdateThread () {
        }

        public void terminate () {
            boolTerminate = true;
        }


        public void run () {
            while ( boolTerminate == false ) {
                try {
                    sleep ( 1000 );
                    updateFields ();
                }
                catch ( Exception exception ) {
                }
            }
        }
    }

}