Server
Class ServerStdProtocol

java.lang.Object
  |
  +--Server.ServerStdProtocol

public class ServerStdProtocol
extends java.lang.Object

La classe ServerStdProtocol implementa il protocollo di comunicazione tra i vari client e sever che vanno a formare la rete della chat.

Version:
1.0
Author:
Antonio D'Errico

Field Summary
 java.util.ArrayList clientList
          Lista di tutti i client connessi
 ListenClient clientListener
          Thread che rimane in ascolto per i client
 int clientNumPort
          Porta di ascolto per i client
 java.util.HashMap groupsOn
          Lista di tutti i gruppi attivi
 java.io.BufferedReader in
          Canale di input da chi ha richiesto la creazione dell'oggetto
 java.lang.String ipServAddr
          Indirizzo del server; questo e' il mio indirizzo
 java.net.ServerSocket listenClient
          Socket di ascolto per i client
 java.net.ServerSocket listenServer
          Socket di ascolto per i server
 java.lang.String name
          Nome del server
 java.io.PrintWriter out
          Canale di output verso chi ha richiesto la creazione dell'oggetto
 java.lang.String pass
          Password del server
 int portServAddr
          Porta di ascolto per i client
 ServerChat serverChat
          Crea le socket di ascolto
 java.util.ArrayList serverList
          Lista di tutti i server connessi
 ListenServer serverListener
          Thread che rimane in ascolto per i server
 int serverNumPort
          Porta di ascolto per i server
 
Constructor Summary
ServerStdProtocol(int serverNumPort, int clientNumPort)
          Rende attive le porte di ascolto del server Costruttore che prevede un unico server attivo e nessuna interfaccia se non System.out
ServerStdProtocol(int serverNumPort, int clientNumPort, java.io.PipedWriter inputPipe, java.io.PipedReader outputPipe)
          Costruttore che rende attive le porte di ascolto verso i client e i server prevede l'uso di pipe per interfacciarsi con la classe utilizzatrice e scambiare con questa messaggi che poi verranno riportati all'utente finale
ServerStdProtocol(int serverNumPort, int clientNumPort, java.io.PipedWriter inputPipe, java.io.PipedReader outputPipe, java.lang.String name, java.lang.String pass)
          Rende attive le porte di ascolto del server Costruttore che prevede piu' server attivi e delle pipe come interfaccia verso l'oggetto che in questo caso si occupa di gestire le info verso l'utente Quando il server comincia la sua azione bisogna che tenti di connettersi ad una serie di server di cui conosce l'ubicazione.
 
Method Summary
 boolean addClient(ComClient clientToRegister)
          Inserisco l'utente appena connesso ed identificato nella lista dei client direttamente connessi a questo server e nella lista del gruppo a cui esso appartiene
 boolean addGroup(java.lang.String groupToAdd, boolean local)
          Aggiunge un nuovo gruppo alla lista dei gruppi attivi
 boolean addServer(ComServer serverToRegister)
          Aggiunge un server alla lista dei server attivi
 boolean changeGroup(ComClient client, java.lang.String newGroup)
          Esegue una variazione del gruppo per un client
 void connectToOther(java.lang.String cfgFileName)
          Legge il file degli indirizzi IP dei server conosciuti e che dovrebbero essere attivi e cerca di connettersi.
 boolean connectToServer(java.lang.String address, int port, boolean isTheFirst)
          Gestisce gli enventuali problemi di connessione che possono derivare nel caso il metodo vada a buon fine ritorna true dopo aver anche ottenuto le info su tutti i server attivi in quel momento e le informazioni di tutti i gruppi
 boolean removeClient(ComClient clientToRemove)
          Elimina un client non piu' connesso
 boolean removeServer(ComServer serverToRemove)
          Rimuove un server non piu' connesso
 boolean sendAll(java.lang.String group, java.lang.String message)
          Manda a tutti gli utenti del gruppo un messaggio
 boolean sendAllServer(java.lang.String message)
          Manda a tutti i server connessi e attualmente funzionanti un messaggio
 boolean sendPrivate(java.lang.String message)
          Manda un messaggio privato ad un utente di un gruppo N.B. non funziona
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

serverNumPort

public int serverNumPort
Porta di ascolto per i server

clientNumPort

public int clientNumPort
Porta di ascolto per i client

portServAddr

public int portServAddr
Porta di ascolto per i client

ipServAddr

public java.lang.String ipServAddr
Indirizzo del server; questo e' il mio indirizzo

listenServer

public java.net.ServerSocket listenServer
Socket di ascolto per i server

listenClient

public java.net.ServerSocket listenClient
Socket di ascolto per i client

serverChat

public ServerChat serverChat
Crea le socket di ascolto

clientListener

public ListenClient clientListener
Thread che rimane in ascolto per i client

serverListener

public ListenServer serverListener
Thread che rimane in ascolto per i server

clientList

public java.util.ArrayList clientList
Lista di tutti i client connessi

serverList

public java.util.ArrayList serverList
Lista di tutti i server connessi

groupsOn

public java.util.HashMap groupsOn
Lista di tutti i gruppi attivi

out

public java.io.PrintWriter out
Canale di output verso chi ha richiesto la creazione dell'oggetto

in

public java.io.BufferedReader in
Canale di input da chi ha richiesto la creazione dell'oggetto

name

public java.lang.String name
Nome del server

pass

public java.lang.String pass
Password del server
Constructor Detail

ServerStdProtocol

public ServerStdProtocol(int serverNumPort,
                         int clientNumPort)
Rende attive le porte di ascolto del server Costruttore che prevede un unico server attivo e nessuna interfaccia se non System.out
Parameters:
serverNumPort - int porta di ascolto per i server
clientNumPort - int porta di ascolto per i client

ServerStdProtocol

public ServerStdProtocol(int serverNumPort,
                         int clientNumPort,
                         java.io.PipedWriter inputPipe,
                         java.io.PipedReader outputPipe)
Costruttore che rende attive le porte di ascolto verso i client e i server prevede l'uso di pipe per interfacciarsi con la classe utilizzatrice e scambiare con questa messaggi che poi verranno riportati all'utente finale
Parameters:
serverNumPort - int porta di ascolto per i server
clientNumPort - int porta di ascolto per i client
inputPipe - PipedWriter pipe di input dal quale leggere eventualmente i comandi
outputPipe - PipedReader pipe di output verso l'esterno su quale inviare messaggi all'utetente

ServerStdProtocol

public ServerStdProtocol(int serverNumPort,
                         int clientNumPort,
                         java.io.PipedWriter inputPipe,
                         java.io.PipedReader outputPipe,
                         java.lang.String name,
                         java.lang.String pass)
Rende attive le porte di ascolto del server Costruttore che prevede piu' server attivi e delle pipe come interfaccia verso l'oggetto che in questo caso si occupa di gestire le info verso l'utente Quando il server comincia la sua azione bisogna che tenti di connettersi ad una serie di server di cui conosce l'ubicazione. I files di configurazione sono : - port.cnf che contiene le porte in cui si deve mettere in ascolto il server ex: 4444 5555 La prima e' di ascolto per i server e la seconda e' per i client Il file viene letto dalla classe che gestisce l'interfaccia verso l'utente - hosts.cnf che contiene gli indirizzi dei server a cui provare a connettersi ex: ... 127.000.000.001:5555 ... i) nessuno gli risponde si mette in attesa di connessioni sia server che client ii) al primo che gli risponede chiede la lista di tutti i server e si collega anche a loro tutti conoscono tutti cio' facilita i collegamenti ed evita partizionamenti della rete il protocollo che ne risulta e' piu' semplice e la rete che ne risulta e' tra pari
Parameters:
serverNumPort - int porta di ascolto per i server
clientNumPort - int porta di ascolto per i client
inputPipe - PipedWriter pipe di input dal quale leggere eventualmente i comandi
outputPipe - PipedReader pipe di output verso l'esterno su quale inviare messaggi all'utetente
name - String username dell'attuale server per una identificazione
pass - String password dell'attuale server per una identificazione
Method Detail

connectToOther

public void connectToOther(java.lang.String cfgFileName)
Legge il file degli indirizzi IP dei server conosciuti e che dovrebbero essere attivi e cerca di connettersi. Quando trova un server attivo dopo essersi identificato richiede la lista a quali questo e connesso. Vi si connette ed entra nella rete.
Parameters:
cfgFileName - String nome del file di configurazione

connectToServer

public boolean connectToServer(java.lang.String address,
                               int port,
                               boolean isTheFirst)
Gestisce gli enventuali problemi di connessione che possono derivare nel caso il metodo vada a buon fine ritorna true dopo aver anche ottenuto le info su tutti i server attivi in quel momento e le informazioni di tutti i gruppi
Parameters:
address - String indirizzo al quale connettersi
port - int porta sull'host remoto alla quale tentare la connessione
isTheFirst - boolean se il server al quale ci dobbiamo connettere e' il primo dobbiamo richiedere le info altrimenti se ci siamo gia' connessi ad altri dobbiamo solo autenticarci
Returns:
true se ci riusciamo a connettere

addClient

public boolean addClient(ComClient clientToRegister)
Inserisco l'utente appena connesso ed identificato nella lista dei client direttamente connessi a questo server e nella lista del gruppo a cui esso appartiene
Parameters:
clientToRegister - ComClient cliente da inserire nella lista degli attivi e nella lista del relativo gruppo
Returns:
restituisce true se l'inserimento ha avuto luogo false altrimenti

addServer

public boolean addServer(ComServer serverToRegister)
Aggiunge un server alla lista dei server attivi
Parameters:
serverToRegister - ComServer server da inserire nella lista degli attivi
Returns:
restituisce true se l'inserimento ha avuto luogo false altrimenti

addGroup

public boolean addGroup(java.lang.String groupToAdd,
                        boolean local)
Aggiunge un nuovo gruppo alla lista dei gruppi attivi
Parameters:
groupToAdd - String nome del gruppo da inserire
local - boolean identifica se la richiesta ha avuto origine da questo server
Returns:
restituisce true se l'inserimento ha avuto luogo false altrimenti

removeServer

public boolean removeServer(ComServer serverToRemove)
Rimuove un server non piu' connesso
Parameters:
serverToRemove - ComServer server da eliminare dalla lista degli attivi
Returns:
restituisce true se l'eliminazione ha avuto luogo false altrimenti

removeClient

public boolean removeClient(ComClient clientToRemove)
Elimina un client non piu' connesso
Parameters:
clientToRemove - ComClient client da rimuovere dalla lista degli attivi
Returns:
restituisce true se l'eliminazione ha avuto luogo false altrimenti

changeGroup

public boolean changeGroup(ComClient client,
                           java.lang.String newGroup)
Esegue una variazione del gruppo per un client
Parameters:
client - ComClient client che deve effettuare il cambiamento
newGroup - String nome del gruppo al quale passare
Returns:
restituisce true se il cambiamento ha avuto luogo false altrimenti

sendAll

public boolean sendAll(java.lang.String group,
                       java.lang.String message)
Manda a tutti gli utenti del gruppo un messaggio
Parameters:
group - String gruppo al quale mandare il messaggio
message - String messaggio da inviare
Returns:
restituisce true se il messaggio e' stato inviato senza problemi

sendAllServer

public boolean sendAllServer(java.lang.String message)
Manda a tutti i server connessi e attualmente funzionanti un messaggio
Parameters:
message - String messaggio da inviare
Returns:
restituisce true se il messaggio e' stato inviato senza problemi

sendPrivate

public boolean sendPrivate(java.lang.String message)
Manda un messaggio privato ad un utente di un gruppo N.B. non funziona
Parameters:
message - String messaggio da inviare
Returns:
restituisce true se il messaggio e' stato inviato senza problemi