• Like
  • Save
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharing + screen capture
Upcoming SlideShare
Loading in...5
×
 

C# Chat for Windows: Network infrastructure + file sharing + clipboard sharing + screen capture

on

  • 416 views

Final Presentation of the course System Programming. Politecnico di Torino, 2011.

Final Presentation of the course System Programming. Politecnico di Torino, 2011.

Statistics

Views

Total Views
416
Views on SlideShare
413
Embed Views
3

Actions

Likes
0
Downloads
1
Comments
0

2 Embeds 3

http://www.linkedin.com 2
http://www.docshut.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    C# Chat for Windows: Network infrastructure + file sharing + clipboard sharing + screen capture C# Chat for Windows: Network infrastructure + file sharing + clipboard sharing + screen capture Presentation Transcript

    • PROGETTOPROGRAMMAZIONE DISISTEMA Antonio Aversa Giovanni Francesco Corazza
    • Gestione della connessione: indiceDescrizione 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)
    • ClientConnectionHandlerMECCANISMO INTERNO SendMessage StartReceiveLoop ctor StartSendLoop InternalStartReceiveLoop InternalStartSendLoop BeginReceive Configurazione _peerState … … BeginSend …
    • ClientConnectionHandler InternalStartSendLoop ConfigurazioneInternalStartReceiveLoop SendMessage _peerState BeginReceive BeginSend … … _receiveCallback _peerState _sendCallback inSide outSide MessageReceived MessageSent
    • 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.
    • ServerConnectionHandlerMECCANISMO INTERNO : ciclo delle callbacks StartAcceptLoop ctor InternalStartSendL oop InternalStartAcceptLoop Configurazio InternalStartReceive SendMessage ne _peerState Loop BeginAccept BeginReceiv BeginSend … e … … … _acceptCallback _receiveCallba _sendCallback ck _peerStat e inSid outSi e de ClientAccepted MessageReceive MessageSent d
    • Architettura gerarchicaLarchitettura scelta è una semplificazione dellMVC: il controller èspezzato. Il Manager rappresenta il Model che però interagisce con i layerpiù bassi di comunicazione, mentre il Control rappresenta la Viewincaricata, però, di dellinterazione con lutente.• 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 dellinoltro verso il layer sottostante del messaggio proveniente dalla view.• Controlli • Visualizzano un particolare tipo di messaggio e si preccupano dellinterazione con lutente, 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 lincolla• ClipboarMonitor • Incapsula• DescriptionDialog • Formato solo se serializzabile • Scelta demandata allutente• 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 nellaggiornamento 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 nelluso di banda• Architettura a plugin (monitors) -> estendibilità
    • Consumo di banda ridotto
    • Footprint in memoria