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

中间件编程

开发平台:

Java

  1. import chat.cliente.*;
  2. import chat.servidor.*;
  3. import chat.*;
  4. import java.util.*;
  5. public class ServerChatServant extends ChatServicePOA  {
  6.     private ArrayList listaNome;
  7.     private HashMap listaListeners;
  8.     /**
  9.      * Construtor
  10.      */
  11.     public ServerChatServant()  {
  12.         initServer();
  13.     } //construtor
  14.     private void initServer() {
  15.         try {
  16.             listaNome = new ArrayList();
  17.             listaListeners = new HashMap();
  18.             listaNome.add(new String ("Total"));
  19.             System.out.println ("Properties initialized ...");
  20.         } catch (Exception e) {
  21.             System.out.println(e);
  22.         } //catch
  23.     } //initServer
  24.       public String[] conectar (String apelido, chat.cliente.ClientListener listener) {
  25.           if (listaNome.contains(apelido)) return null;
  26.           listaNome.add(apelido);
  27.           listaListeners.put(apelido, listener);
  28.           System.out.println(apelido + " conectado");
  29.      
  30.           for (int i=1; i<listaNome.size()-1; i++) {
  31.               String ap = String.valueOf(listaNome.get(i));
  32.               ClientListener l = (ClientListener)listaListeners.get(ap);
  33.         l.addApelido(apelido);
  34.   } //for
  35.           String[] lista = new String [listaNome.size()];
  36.           for (int i=0; i<lista.length; i++)
  37.               lista[i] = String.valueOf(listaNome.get(i));
  38.          return lista;
  39.       } //conectar
  40.       public void desconectar (String apelido, chat.cliente.ClientListener listener) {
  41.          int idx = listaNome.indexOf(apelido);
  42.          if  (!listener.equals(listaListeners.get(apelido)))
  43.              return;
  44.          if ((listaNome.remove(idx) != null)) {
  45.              listaListeners.remove(apelido);
  46.              for (int i=1; i<listaNome.size(); i++) {
  47.                  String ap = String.valueOf(listaNome.get(i));
  48.                  ClientListener l = (ClientListener)listaListeners.get(ap);
  49.                  l.delApelido(apelido);
  50.      } //for
  51.              System.out.println(apelido + " disconnect");
  52.          } //if
  53.       } //desconectar
  54.       public void enviaMensagem (String apelido, chat.Mensagem msg) {
  55.          if (apelido.equals("Total")) {
  56.              DespachaMensagem m = new DespachaMensagem (listaListeners, msg);
  57.          } else {
  58.              ClientListener l = (ClientListener) listaListeners.get(apelido);
  59.              l.recebeMensagem (msg);
  60.          } //else
  61.       } //enviaMensagem
  62. };//ServerChatServant
  63. class DespachaMensagem implements Runnable {
  64.     private Mensagem msg;
  65.     private HashMap listaListeners;
  66.     public DespachaMensagem (HashMap listeners, Mensagem mensagem) {
  67.         listaListeners = listeners;
  68.         msg = mensagem;
  69.         this.run();
  70.     } //construtor
  71.     public void run () {
  72.      
  73.         if (listaListeners.size() > 0) {
  74.            Iterator clientes = listaListeners.values().iterator();
  75.            while (clientes.hasNext()) {
  76.                  ClientListener l = (ClientListener)clientes.next();
  77.                  l.recebeMensagem(msg);
  78.            } // while
  79.         } //if
  80.     } //run
  81. } //MessaseDispacher