Upload
francesco-corazza
View
316
Download
3
Embed Size (px)
DESCRIPTION
Final Presentation of the course System Programming. Politecnico di Torino, 2011.
Citation preview
PROGETTO PROGRAMMAZIONE DI SISTEMA
Antonio Aversa Giovanni
Francesco Corazza
Gestione della connessione: indice
Descrizione top-down dell’architettura:• La gestione di base della connessione: l’interfaccia
IConnectionHandler e relativa implementazione• Il comportamento del server e dei clients: l’interfaccia
IServerConnectionHandler e IClientConnectionHandler (e relative implementazioni)• Lo stato locale e di un peer connesso ad un endpoint remoto:
l’interfaccia IPeerState• Il singolo lato di comunicazione di un PeerState: ISidePeerState• Il lato di comunicazione in uscita: IOutSidePeerState• Il lato di comunicazione in ingresso: IInSidePeerState
Gestione della connessione• Affidata al componente ConnectionHandler
• che la realizza con l’uso delle Socket (chi implementa l’interfaccia potrebbe gestire la connessione in molti modi differenti, diversi dall’uso delle Socket)
• Le modalità di gestione cambiano fra client e server• Il ConnectionHandler è solo una classe astratta…• …a partire dalla quale sono state implementate le sue due effettive
concretizzazioni:• ServerConnectionHandler• ClientConnectionHandler
ConnectionHandler• Il ConnectionHandler è una classe astratta che implementa
l’interfaccia di base di una connessione (IConnectionHandler): in quanto tale espone:
• i parametri di connessione (e NON di autenticazione), ricevuti al ctor• ConnectionHandlerParameters ConnectionParameters { get; }
• I metodi e gli eventi attraverso cui gestire il ciclo di vita del componente (avvio e terminazione)• bool Start();• event EventHandler<PeerEventArgs> Starting;• event EventHandler<PeerSocketEventArgs> Started;• event EventHandler<PeerEventArgs> Terminated;
ConnectionHandler• gli eventi di connessione (comuni a client e server).
• event EventHandler<PeerMessageEventArgs> MessageEnqueuing;• event EventHandler<PeerMessageEventArgs> MessageSending;• event EventHandler<PeerMessageEventArgs> MessageSent;• event EventHandler<PeerMessageEventArgs> MessageWaiting;• event EventHandler<PeerMessageEventArgs> MessageReceiving;• event EventHandler<PeerMessageEventArgs> MessageReceived;
• la coda dei messaggi in uscita• IEnumerable<Pair<EndPoint, object>> MessageQueue { get; }
• l’invio dei messaggi (asincrono e thread-safe)• bool SendMessage(object objectToSend);
ConnectionHandler• Il ConnectionHandler non può conoscere i dettagli relativi alle
modalità con le quali verrà gestita la connessione:• sono diverse fra client e server →• i seguenti metodi sono astratti:
• public abstract bool Start();• public abstract bool SendMessage(object objectToSend);• public abstract IEnumerable<Pair<EndPoint, object>> MessageQueue { get; }
• Saranno effettivamente implementati nel ServerConnectionHandler e nel ClientConnectionHandler
• … il ConnectionHandler di per sé fa ben poco: è però una classe significativa a livello di analisi e utile a livello di design (fattorizza il codice delle funzioni protected virtual void che invocano gli eventi in maniera thread-safe, implementa la struttura del pattern Dispose e la property dei parametri di connessione)
ClientConnectionHandlerINTERFACCIA PUBBLICA• Ctor: si limita a ricevere i parametri di connessione e ad invocare
il costruttore della classe base• Start: lancia l’evento Starting (interrompibile → Start bloccata, ma
oggetto riusabile – è possibile reinvocare la Start), crea e configura la socket, lancia l’evento Started (interrompibile → Start bloccata ed oggetto in Dispose – graceful degradation mode), avvia il loop di ricezione
• SendMessage: accoda il messaggio alla MessageQueue (un client non deve comportarsi da Relay) – asincrono
• MessageQueue: coda dei soli messaggi da inviare al server• StartReceiveLoop: permette di riavviare il loop (se bloccato
attraverso il Block del MessageWaiting). E’ l’unico metodo dell’interfaccia specifica del client (IClientConnectionHandler)
ClientConnectionHandler
MECCANISMO INTERNO
StartReceiveLoop
InternalStartReceiveLoop
ctor StartSendLoop
InternalStartSendLoop
Configurazione _peerState
BeginSend
BeginReceive
…
…
…
SendMessage
ClientConnectionHandler
InternalStartReceiveLoop
InternalStartSendLoop
Configurazione _peerState
BeginSendBeginReceive
……_receiveCallback
inSide
_sendCallback_peerState
MessageReceived
outSide
MessageSent
SendMessage
ServerConnectionHandlerINTERFACCIA PUBBLICA• Ctor: si limita a ricevere i parametri di connessione e ad invocare
il costruttore della classe base• Start: lancia l’evento Starting (interrompibile → Start bloccata, ma
oggetto riusabile – è possibile reinvocare la Start), crea e configura la socket di listen, lancia l’evento Started (interrompibile → Start bloccata ed oggetto in Dispose – graceful degradation mode), avvia il loop di accept
• SendMessage: accoda il messaggio alla MessageQueue. NB: il server deve comportarsi da Relay – enqueuing asincrono
• MessageQueue: coda dei messaggi da inviare ad ogni client• StartAcceptLoop: permette di riavviare il loop (se bloccato
attraverso il Block del ClientWaiting). E’ uno dei metodi dell’interfaccia specifica del server (IServerConnectionHandler)
ServerConnectionHandlerpublic interface IServerConnectionHandler : IConnectionHandler
{
event EventHandler<PeerEventArgs> ClientWaiting;
event EventHandler<PeerEventArgs> ClientAccepting;
event EventHandler<PeerEventArgs> ClientAccepted;
event EventHandler<PeerEventArgs> ClientReleased;
void StartAcceptLoop();
void StartReceiveLoop(EndPoint clientEndPoint);
void StopClient(EndPoint clientEndPoint);
IEnumerable<EndPoint> Clients { get; }
bool SendMessage(object objectToSend, EndPoint clientEndPoint);
}
ServerConnectionHandler• Eventi aggiuntivi: relativi alla gestione dei client (Waiting,
Accepting, Accepted, Released)• StartReceiveLoop(client): permette di riavviare il loop
(se bloccato attraverso il Block del MessageReceiving sullo specifico client). E’ uno dei metodi dell’interfaccia specifica del server (IServerConnectionHandler)
• StopClient(client): interrompe la gestione di un client. Viene chiusa la relativa Socket di comunicazione.
• SendMessage(object, client): invia un messaggio ad uno specifico client.
ServerConnectionHandler
MECCANISMO INTERNO : ciclo delle callbacks
StartAcceptLoop
InternalStartAcceptLoop
ctor
BeginAccept
……
_acceptCallback
ClientAccepted
InternalStartReceiveLoop
InternalStartSendLoop
Configurazione _peerState
BeginSendBeginReceive
……
_receiveCallback
inSide
_sendCallback_peerState
MessageReceived
outSide
MessageSent
SendMessage
Architettura gerarchicaL'architettura scelta è una semplificazione dell'MVC: il controller è spezzato. Il Manager rappresenta il Model che però interagisce con i layer più bassi di comunicazione, mentre il Control rappresenta la View incaricata, però, di dell'interazione con l'utente.
• Messaggi• Rappresentano una parte fondamentale della comunicazione, i controlli
sono in grado di visualizzare solo questo tipo di dato trasmesso (in particolare il loro specifico dato).
• Manager• Mantiene una lista degli ultimi messaggi inviati, è incaricato dell'inoltro
verso il layer sottostante del messaggio proveniente dalla view.
• Controlli• Visualizzano un particolare tipo di messaggio e si preccupano
dell'interazione con l'utente, quindi il comportamento è molto eterogeneo.
Architettura gerarchica: Messages
Architettura gerarchica : Managers
Architettura gerarchica : Views
Finestra Principale• Interfaccia coerente tra i vari controlli
• Send• Caption
• Attivazione disattivazione controlli• Possibilità di ritornare alla modalità di selezione
Chat• ChatViewer (TableLayoutPanel)
• Scrollbar
• ChatRow• Layout (Colori diversi)• Testo a capo
• ChatMessage
Chat
Clipboard• Control (DatagridView)
• Doppio clic per l'incolla
• ClipboarMonitor• Incapsula
• DescriptionDialog• Formato solo se serializzabile• Scelta demandata all'utente
• ClipboardMessage
Clipboard
Video• Control
• Invio immagini (ServerToolStrip)• Selezione area di schermo (RectForm)• Selezione applicazio (ProcessHandler)• Debug (FragmentDebugForm)
• VideoMessage• Serializzazione
Video
Punti di debolezza• ... cioè miglioramenti se ci fosse stato più tempo• Lentezza nell'aggiornamento dei client• Interfaccia utente migliorabile• File non trasferibili tramite clipboard• Assenza di un reale MVC• …• Questa presentazione…
Punti di forza• Consumo di memoria limitato• Forti ottimizzazioni nell'uso di banda• Architettura a plugin (monitors) -> estendibilità
Consumo di banda ridotto
Footprint in memoria