Architecture » History » Revision 15
Revision 14 (Greg Burri, 09/10/2009 10:49 AM) → Revision 15/32 (Greg Burri, 09/10/2009 11:05 AM)
h1. Architecture
This page shows the architecture with two component diagrams, one for the Core and one for the GUI. The responsibilities of each component are then listed.
For more information, see the BOUML project in the repository : source:/doc/uml
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. [[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