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


FileManager (FM)

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

PeerManager (PM)

  • Knows all other peers and different information about them like nick, amount of sharing and speed transfer.
  • Each peer has a connection (socket) pool.
  • Can communicate with each peer (send or receive data).

Depends of

  • FileManager

UploadManager (UM)

  • 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.

Depends of

  • PeerManager

DownloadManager (DM)

  • 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.

Depends of

  • FileManager
  • PeerManager

NetworkListener (NL)

  • 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 needed chunks given by the DownloadManager.
    • For each answer the known IPs associated to a chunk are given to the DownloadManager.
    • Download it from a known peer.

Depends of

  • FileManager
  • PeerManager
  • UploadManager
  • DownloadManager

ChatSystem (CS)

  • Send and receive chat messages.
  • Join and leave rooms.
  • Persists chat messages.

Depends of

  • PeerManager
  • NetworkListener

RemoteControlManager (RCM)

  • 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.

Depends of

  • FileManager
  • PeerManager
  • UploadManager
  • DownloadManager
  • NetworkListener
  • ChatSystem



Owns a lot of little helper classes, some are listed below.

  • Global : The ultimate messy collection of functions.
  • Hash : An hash, used mainly to identify something, a peer, a part of a file, etc.
  • PersistentData : Serialize protocol buffer message into file.
  • Settings : Settings of an application (Core or GUI). Used as a singleton.
  • TransfertRateCalculator : Can compute an average value during a period of time for a stream of data.
  • ZeroCopyStreamQIODevice : To write or read protocol buffer messages to or from a QIODevice.
  • Version : The current version of D-LAN. Updated right after the release of the current version.

LogManager (LM)

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

RemoteCoreController (RCC)

  • Controls one local or remote core via a TCP socket.

First draft of the architecture (just for the lulz)

Updated by Greg Burri almost 11 years ago · 32 revisions