Project

General

Profile

Architecture » History » Revision 13

Revision 12 (Greg Burri, 07/30/2009 02:27 PM) → Revision 13/32 (Greg Burri, 07/30/2009 04:29 PM)

h1. Architecture 


 h2. Core 

 !core_components.png! 

 h3. [[FileManager]] 

 * Kept up to date a list of shared files. 
 * Cuts file in chunks. 
 * Each chunk has a hash and can be read or write. 
 * Can make fast search with indexed words. 
 * Can make fast search from a hash code. 
 * The directory structure can be browse. 
 * Theses data (files/dirs/chunks/hashes) are persisted to avoid re-hashing. 


 h3. [[NetworkListener]] 

 * Listens for new TCP connections from peers. Forward it to the _PeerManager_. 
 * Listens for new UDP datagrams. 
 * Provides some interfaces to listen some events. 
 ** New chat message. 
 ** New search result. 
 * Sent periodically an UDP datagram to show its presence. 
 ** This message contains the top chunks. 
 ** For each chunk the known IP's are gave to the _DownloadManager_. 


 h3. [[DownloadManager]] 

 * Has a download queue with different status. 
 * Has a pool of downloader which will choose a free chunk and : 
 ** Ask the chunk's peer source for the hashes if they are unknown. 
 ** Download it from a known peer. 

 h3. [[UploadManager]] 

 * Listens the _PeerManager_ for new upload requests. 
 * Manage a pool of uploaders which will read a chunk from _FileManager_ and send it to the remote peer. 


 h3. [[PeerManager]] 

 * Knows all other peers and different information about them like nick, amount of sharing and speed transfer. 
 * Each peer has a connection (socket) pool. 
 * Treats new messages (unicast) from other peers. 


 h3. h2. [[RemoteControlManager]] 

 * Manages all connections from remote controllers. 
 * Send periodically the state of the core to the controllers. 
 * Send asynchronous events to the controllers. 
 * Dispatch the controllers commands. 


 h2. GUI 


 h2. Common 

 h3. [[LogManager]] 

 * Logs some kind of severity messages 
 * Can store the log in a file 
 * Used by Core and GUI