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

📄 nistmessengerapplet.java

📁 是一个用java实现的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * NISTMessengerApplet.java
 *
 * Created on December 11, 2003, 3:51 PM
 */

package gov.nist.applet.phone.ua.gui;

import gov.nist.applet.phone.media.messaging.VoiceRecorder;
import gov.nist.applet.phone.ua.ChatSessionManager;
import gov.nist.applet.phone.ua.Configuration;
import gov.nist.applet.phone.ua.RegisterStatus;
import gov.nist.applet.phone.ua.MessengerController;
import gov.nist.applet.phone.ua.MessengerManager;
import gov.nist.applet.phone.ua.StopMessenger;
import gov.nist.applet.phone.ua.presence.Subscriber;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.Socket;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager;

//import netscape.javascript.JSObject;
/**
 *
 * @author  DERUELLE Jean
 */
public class NISTMessengerApplet
	extends javax.swing.JApplet
	implements NISTMessengerGUI {
	Configuration configuration;
	/*MVC attributes*/
	private MessengerManager sipMeetingManager;
	private MessengerController controllerMeeting;
	private ChatSessionManager chatSessionManager;
	/**
	 * GUI variables.
	 */
	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JButton addContactButton;
	private javax.swing.JMenuBar fileMenuBar1;
	private javax.swing.JLabel imageLabel;
	private javax.swing.JLabel jLabel1;
	private javax.swing.JMenu jMenu5;
	private javax.swing.JMenuItem jMenuItemConfiguration;
	private javax.swing.JMenuItem jMenuItemRegister;
	private javax.swing.JMenuItem jMenuItemUnregister;
	private javax.swing.JMenu jMenuStatus;
	private javax.swing.JPanel mainPanel;
	private javax.swing.JButton removeContactButton;
	// End of variables declaration//GEN-END:variables
	private javax.swing.JList jList1;
	private DefaultListModel listModel;
	private JRadioButtonMenuItem onlineJRadioButtonMenuItem;
	private JRadioButtonMenuItem awayJRadioButtonMenuItem;
	private JRadioButtonMenuItem offlineJRadioButtonMenuItem;
	private JRadioButtonMenuItem busyJRadioButtonMenuItem;
	private ButtonGroup statusGroup;
	private boolean useResponder = false;
	//private JSObject document=null;
	/**
	 * 
	 */
	public void init() {
		if (!checkForJMF()) {
			JEditorPane jEditorPane = new JEditorPane();
			JOptionPane.showMessageDialog(
				this,
				"Please install the latest version of JMF from "
					+ "the link provided on the webpage\n",
				"Java Media Framework not installed on your computer",
				JOptionPane.ERROR_MESSAGE);
			return;
		}
		System.out.println("initializing Applet");
		configuration = new Configuration();
		configuration.outboundProxy = getParameter("PROXYADDRESS");
		if (configuration.outboundProxy == null) {
			JOptionPane.showMessageDialog(
				this,
				"JSP configuration Missing PROXYADDRESS");
			return;
		}
		if (getParameter("RESPONDER") != null)
			useResponder = true;
		System.out.println(
			"outbound proxy address " + configuration.outboundProxy);
		try {
			configuration.proxyPort =
				Integer.parseInt(getParameter("PROXYPORT"));
		} catch (Exception nfe) {
			nfe.printStackTrace();
			JOptionPane.showMessageDialog(
				this,
				"JSP configuration error bad PROXYPORT "
					+ configuration.proxyPort);
		}
		System.out.println("outbound proxy port " + configuration.proxyPort);

		configuration.signalingTransport = getParameter("SIGNALINGTRANSPORT");
		if (configuration.signalingTransport == null) {
			JOptionPane.showMessageDialog(
				this,
				"JSP Configuration ERROR SINGALINGTRANSPORT param missing");
			return;
		}
		configuration.mediaTransport = getParameter("MEDIATRANSPORT");
		if (configuration.mediaTransport == null) {
			JOptionPane.showMessageDialog(
				this,
				"JSP Configuration ERROR MEDIATRANSPORT param missing");
			return;
		}
		configuration.userURI = getParameter("USERURI");
		if (configuration.userURI == null) {
			JOptionPane.showMessageDialog(
				this,
				"JSP Configuration ERROR USERURI param missing");
			return;
		}
		System.out.println(configuration.userURI);

		try {
			//open socket to web server to ensure you to get correct local IP
			String serverAddr = getParameter("SERVERADDR");
			int serverPort = Integer.parseInt(getParameter("SERVERPORT"));

			Socket socket = new Socket(serverAddr, serverPort);
			configuration.stackIPAddress =
				socket.getLocalAddress().getHostAddress();
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "JSP Configuration ERROR ");
			return;
		}

		configuration.contactIPAddress = getParameter("MYADDRESS");
		System.out.println(configuration.stackIPAddress);
		try {
			UIManager.setLookAndFeel(
				UIManager.getCrossPlatformLookAndFeelClassName());
		} catch (ClassNotFoundException cnfe) {
			cnfe.printStackTrace();
		} catch (InstantiationException ie) {
			ie.printStackTrace();
		} catch (IllegalAccessException iae) {
			iae.printStackTrace();
		} catch (UnsupportedLookAndFeelException ulafe) {
			ulafe.printStackTrace();
		}

		/*JSObject jsobject = JSObject.getWindow(this);
		document = (JSObject) jsobject.getMember("document");*/
	}
	/**
	 * 
	 */
	public void start() {
		final JApplet object = this;
		chatSessionManager = new ChatSessionManager();
		sipMeetingManager = new MessengerManager(configuration, this);
		/*String cookieContacts = getCookieContacts();
		System.out.println(cookieContacts);
		if (cookieContacts != null) {
			Vector contacts = parseCookieContacts(cookieContacts);
			sipMeetingManager.setContactList(contacts);
		}*/
		//sipMeetingManager.addObserver(this);
		controllerMeeting =
			new MessengerController(
				sipMeetingManager,
				chatSessionManager,
				this);
		initComponents();
		listModel = new DefaultListModel();

		//Create the list and put it in a scroll pane.
		jList1 = new JList(listModel);
		jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jList1.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					String contactAddress =
						(String) listModel.elementAt(jList1.getSelectedIndex());
					if (contactAddress.trim().indexOf('(') != -1)
						contactAddress =
							contactAddress.substring(
								0,
								contactAddress.trim().indexOf("("));
					//check if a chat frame has already been opened
					ChatFrame chatFrame =
						(ChatFrame) chatSessionManager.getChatFrame(
							contactAddress);
					if (chatFrame == null) {
						//emulate button click
						chatFrame =
							new ChatFrame(
								object,
								contactAddress,
								sipMeetingManager,
								chatSessionManager);
						chatSessionManager.addChatSession(
							contactAddress,
							chatFrame);
						chatFrame.show();
					} else {
						chatFrame.show();
					}
				}
			}
		});

		JScrollPane listScrollPane = new JScrollPane(jList1);
		listScrollPane.setBounds(10, 100, 200, 250);
		mainPanel.add(listScrollPane);
		getContentPane().add(mainPanel);
		Image image = getImage(getCodeBase(), "short_nisthome_banner.jpg");
		if (image != null)
			imageLabel.setIcon(new ImageIcon(image));
		this.resize(320, 520);
		sipMeetingManager.unRegisterAndReRegister();

		if (useResponder) {
			addContactButton.setEnabled(false);
			removeContactButton.setEnabled(false);
			controllerMeeting.addContact("responder@nist.gov");
		}
		//this.show();	
	}
	/**
	 * Call when the applet is stopped and cleaned 
	 */
	public void destroy() {
		chatSessionManager.closeAllSessions();
		if (!VoiceRecorder.isClosed())
			VoiceRecorder.getInstance().close();
		if (sipMeetingManager
			.getRegisterStatus()
			.equalsIgnoreCase(RegisterStatus.REGISTERED))
			sipMeetingManager.unRegister();
		//write a one more new cookie
		//storeContactsInCookie();
		new StopMessenger(sipMeetingManager.getMessageListener());
	}

	/**
	 * Call when the applet is stopped and cleaned 
	 */
	public void stop() {
		chatSessionManager.closeAllSessions();
		if (!VoiceRecorder.isClosed())
			VoiceRecorder.getInstance().close();
		if (sipMeetingManager
			.getRegisterStatus()
			.equalsIgnoreCase(RegisterStatus.REGISTERED))
			sipMeetingManager.unRegister();
		new StopMessenger(sipMeetingManager.getMessageListener());
	}
	/**
	 * 
	 *
	 */
	protected void unRegister() {
		if (sipMeetingManager
			.getRegisterStatus()
			.equalsIgnoreCase(RegisterStatus.REGISTERED)) {
			if (chatSessionManager.hasActiveSessions()) {
				int response =
					javax.swing.JOptionPane.showConfirmDialog(
						null,
						" All current sessions will be closed,\n"
							+ " do you still want to close the application ?",
						"Close the Application",
						javax.swing.JOptionPane.YES_NO_OPTION,
						javax.swing.JOptionPane.QUESTION_MESSAGE);
				if (response == javax.swing.JOptionPane.NO_OPTION)
					return;
				else if (response == javax.swing.JOptionPane.YES_OPTION) {
					chatSessionManager.closeAllSessions();
				}
			}
			sipMeetingManager.unRegister();
		}
	}
	/**
	 *      
	 * @param serverPort
	 * @return
	public void queryServerForIpAddress(int serverPort){    	        
	    String host=getCodeBase().getHost();
		System.out.println("Query Server "+host+":"+serverPort+" to get my own ip address");
	    Socket socket=null;
	    try{
	        socket=new Socket(host,serverPort);
	    }
	    catch(java.net.UnknownHostException uhe){
	        uhe.printStackTrace();
	    }
	    catch(java.io.IOException ioe){
	        ioe.printStackTrace();
	    }   
		String ipAddress=null;
		String localAddress=socket.getLocalAddress().getHostAddress();		     	
	    try{
	        java.io.InputStream in=socket.getInputStream();
	        java.io.BufferedReader bin=new java.io.BufferedReader(
	        	new java.io.InputStreamReader(in));
	        ipAddress=bin.readLine();
	        in.close();
	        bin.close();
	        socket.close();            
	    }
	    catch(java.io.IOException ioe){
	        ioe.printStackTrace();
	    }                
		System.out.println("localAddress : "+localAddress);
		System.out.println("NATAddress : "+ipAddress);
		configuration.stackIPAddress=localAddress;
		configuration.contactIPAddress=ipAddress;
	}
	 */

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	private void initComponents() { //GEN-BEGIN:initComponents
		mainPanel = new javax.swing.JPanel();
		imageLabel = new javax.swing.JLabel();
		addContactButton = new javax.swing.JButton();
		removeContactButton = new javax.swing.JButton();
		jLabel1 = new javax.swing.JLabel();
		fileMenuBar1 = new javax.swing.JMenuBar();
		jMenu5 = new javax.swing.JMenu();
		jMenuItemConfiguration = new javax.swing.JMenuItem();
		jMenuItemRegister = new javax.swing.JMenuItem();
		jMenuItemUnregister = new javax.swing.JMenuItem();
		jMenuStatus = new javax.swing.JMenu();

		onlineJRadioButtonMenuItem = new JRadioButtonMenuItem("Online");

⌨️ 快捷键说明

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