ClientChat.java
上传用户:annion2008
上传日期:2021-03-11
资源大小:38k
文件大小:8k
源码类别:

中间件编程

开发平台:

Java

  1. /**
  2.  * Class ClientChat
  3.  * @author Xiangyu Ye
  4.  *
  5.  */
  6. import chat.*;
  7. import chat.servidor.*;
  8. import chat.cliente.*;
  9. import java.awt.*;
  10. import java.awt.event.*;
  11. import javax.swing.*;
  12. import java.util.*;
  13. import org.omg.CORBA.*;
  14. import org.omg.CosNaming.*;
  15. import org.omg.CosNaming.NamingContextExtPackage.*;
  16. import org.omg.PortableServer.*;
  17. import org.omg.PortableServer.POA;
  18. public class ClientChat extends JFrame implements ActionListener {
  19.     private JTextField txtMensagem;
  20.     private JTextArea textArea;
  21.     private JList lstID;
  22.     private DefaultListModel lstModelID;
  23.     private JPanel pnlMensagem, pnlBotao, pnlEnviar;
  24.     private JButton btnEnviar, btnConectar, btnDesconectar;
  25.     public String nick;
  26.     private ClientListener chatClientListener;
  27.     private ChatService chatService;
  28.     /** Construtor */
  29.     public ClientChat(String servidor, String apelido) {
  30.         nick = apelido;
  31.   
  32.         this.initComponents();
  33.         try {
  34.    
  35.             Properties props = new Properties();
  36.             props.put("org.omg.CORBA.ORBInitialPort", "6666");
  37.             props.put("org.omg.CORBA.ORBInitialHost", servidor);
  38.             String[] args = {};
  39.         ORB orb = ORB.init(args, props);
  40.             POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
  41.             rootpoa.the_POAManager().activate();
  42.             ClientChatListener listener = new ClientChatListener(this);
  43.             org.omg.CORBA.Object refListener = rootpoa.servant_to_reference(listener);
  44.             chatClientListener = ClientListenerHelper.narrow(refListener);
  45.     
  46.             org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
  47.  
  48.             NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
  49.     
  50.            String name = "ChatService";
  51.            chatService  = ChatServiceHelper.narrow(ncRef.resolve_str(name));
  52.         } catch (Exception e) {
  53.             System.out.println(e);
  54.         } //catch
  55.     } //construtor
  56.     private void initComponents() {
  57.         textArea = new JTextArea();
  58.         lstModelID = new DefaultListModel();
  59.         lstID = new JList(lstModelID);
  60.         pnlMensagem = new JPanel();
  61.         txtMensagem = new JTextField();
  62.         pnlEnviar = new JPanel();
  63.         btnEnviar = new JButton();
  64.         pnlBotao = new JPanel();
  65.         btnConectar = new JButton();
  66.         btnDesconectar = new JButton();
  67.         this.getContentPane().setLayout(new java.awt.BorderLayout(2, 0));
  68.         this.setTitle("Chat Cliente - " + nick);
  69.         addWindowListener(new java.awt.event.WindowAdapter() {
  70.             public void windowClosing(java.awt.event.WindowEvent evt) {
  71.                 exitForm(evt);
  72.             }
  73.         });
  74.         textArea.setColumns(30);
  75.         textArea.setEditable(false);
  76.         textArea.setBorder(null);
  77.         JScrollPane areaScrollPane = new JScrollPane(textArea);
  78.         areaScrollPane.setPreferredSize(new Dimension(300, 280));
  79.         this.getContentPane().add(areaScrollPane, BorderLayout.CENTER);
  80.         lstID.setFixedCellWidth(20);
  81.         lstID.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  82.         JScrollPane listScrollPane = new JScrollPane(lstID);
  83.         listScrollPane.setPreferredSize(new Dimension(100, 280));
  84.         this.getContentPane().add(listScrollPane, BorderLayout.EAST);
  85.         pnlMensagem.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 2));
  86.         pnlMensagem.setBorder(new javax.swing.border.EtchedBorder());
  87.         pnlMensagem.setPreferredSize(new Dimension(440, 35));
  88.         txtMensagem.setColumns(30);
  89.         pnlMensagem.add(txtMensagem);
  90.         pnlEnviar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
  91.         pnlEnviar.setPreferredSize(new Dimension(102, 28));
  92.         btnEnviar.setMnemonic('E');
  93.         btnEnviar.setText("En");
  94.         btnEnviar.addActionListener(this);
  95.         pnlEnviar.add(btnEnviar);
  96.         pnlMensagem.add(pnlEnviar);
  97.         getContentPane().add(pnlMensagem, BorderLayout.NORTH);
  98.         pnlBotao.setLayout(new java.awt.FlowLayout(FlowLayout.RIGHT, 10, 3));
  99.         pnlBotao.setBorder(new javax.swing.border.EtchedBorder());
  100.         pnlBotao.setPreferredSize(new Dimension(10, 35));
  101.         btnConectar.setMnemonic('C');
  102.         btnConectar.setText("Connect");
  103.         btnConectar.setPreferredSize(new Dimension(120, 26));
  104.         btnConectar.addActionListener(this);
  105.         pnlBotao.add(btnConectar);
  106.         btnDesconectar.setMnemonic('D');
  107.         btnDesconectar.setText("Disconnect");
  108.         btnDesconectar.setPreferredSize(new Dimension(120, 26));
  109.         btnDesconectar.setEnabled(false);
  110.         btnDesconectar.addActionListener(this);
  111.         pnlBotao.add(btnDesconectar);
  112.         getContentPane().add(pnlBotao, BorderLayout.SOUTH);
  113.         setSize(470,300);
  114.     } //initComponents
  115.     public void actionPerformed(ActionEvent evt) {
  116.         try {
  117.   
  118.             if (evt.getSource() == btnConectar) {
  119.                 String[] lista;
  120.                lista = chatService.conectar(nick, chatClientListener);
  121.                if (lista != null) {
  122.            
  123.                    btnConectar.setEnabled(false);
  124.                    btnDesconectar.setEnabled(true);
  125.        
  126.                    for (int i=0; i<lista.length; i++)
  127.                        lstModelID.addElement(lista[i]);
  128.                } //if
  129.             } 
  130.   
  131.             else if (evt.getSource() == btnDesconectar) {
  132.    
  133.                 btnDesconectar.setEnabled(false);
  134.                 btnConectar.setEnabled(true);
  135.                 chatService.desconectar(nick, chatClientListener);
  136.                 lstModelID.removeAllElements();
  137.             } 
  138.             else if (evt.getSource() == btnEnviar) {
  139.    
  140.                 Mensagem msg = new Mensagem(nick, txtMensagem.getText());
  141. Integer id = new Integer(lstID.getSelectedIndex());
  142.                 if (id.intValue() >= 0) {
  143.    
  144.                     String destino = String.valueOf(lstID.getSelectedValue());
  145.                     chatService.enviaMensagem(destino, msg);
  146.         
  147.                     if (id.intValue() != 0 )
  148.                        this.writeMessage(nick, txtMensagem.getText());
  149.                     txtMensagem.setText("");
  150.                 } else JOptionPane.showMessageDialog(this, "Need do selections",
  151.                                                     "Alert", JOptionPane.WARNING_MESSAGE);
  152.                 txtMensagem.requestFocus();
  153.             } 
  154.         } catch (Exception e) {
  155.             System.out.println(e);
  156.         } 
  157.     } 
  158.  
  159.     private void exitForm(WindowEvent evt) {
  160.         if (btnDesconectar.isEnabled()) {
  161.            try {
  162.         
  163.                 chatService.desconectar(nick, chatClientListener);
  164.            } catch (Exception e) {
  165.                System.out.println ("Error" + e);
  166.            } //catch
  167.         } //if
  168.         System.exit(0);
  169.     } //exitForm
  170.     public void writeMessage(String ID, String Mensagem) {
  171.         textArea.append("<" + ID + "> " + Mensagem + "n");
  172.         textArea.setCaretPosition(textArea.getText().length());
  173.     } //writeMessage
  174.     public void addNick (String ID) {
  175.         System.out.println("ADD" + ID);
  176.         if (!ID.equals(nick))
  177.            lstModelID.addElement(ID);
  178.     }
  179.     /**
  180.      * Remove 
  181.      */
  182.     public void removeNick (String ID) {
  183.         System.out.println("Remove" + ID);
  184.         lstModelID.removeElement(ID);
  185.     } //removeConneciton
  186.     public static void main(String args[]) {
  187.         new ClientChat(args[0], args[1]).show();
  188.     } //main
  189. } //ClientChat