Project

General

Profile

BORDEL » History » Version 29

Greg Burri, 07/29/2015 03:29 PM

1 20 Greg Burri
h1. BORDEL
2 1 Greg Burri
3
h2. Notes
4
5 29 Greg Burri
* Possibilité de demander le temps de réponse auprès d'un peer spécifique
6
7 24 Greg Burri
* Possibilité de demander plusieurs chunks à la fois afin d'avoir un flux de données en continu, au plus les chunks sont petits (petits fichiers) au plus cela va améliorer le transfert.
8
** La demande se fait sur un même socket, les chunks sont envoyés les un après les autres.
9
** Le message 'GetChunkResult' est envoyé juste avant un chunk. Le chunk n'est envoyé que si GetChunkResult.status est égal à 'OK'.
10
** Le downloader limite volontairement le nombre de chunks demandés en attente, par exemple à une dizaine.
11
** Le message 'GetChunk' est envoyé de manière asynchrone au flux reçu par le downloader.
12
13 23 Greg Burri
* Pouvoir "synchroniser" un répertoire, c'est à dire supprimer les fichier/dossiers de la destination qui n'existent plus dans la source.
14
** Un tab "synchronisation" montrant les "taches" de synchronisation comprenant un lien vers un dossier source (voir http://dev.d-lan.net/projects/pmp/wiki/Protocols#Links-to-resource-DRAFT) et un dossier destination parmi ceux partagés
15
** Lancement d'une ou plusieurs synchronisation depuis le tab "synchronisation"
16
** Les downloads apparaissent dans la liste de download?
17
** Comment montrer les fichiers supprimer?
18 27 Greg Burri
** Auto-synchronisation?
19
** Voir ce commentaire sur le forum: http://dev.d-lan.net/boards/3/topics/63
20 23 Greg Burri
21 21 Greg Burri
* Create a tool like "ExpanDrive":http://www.expandrive.com/windows (_Windows_) which can simulate a file system. Therefore the user can browse an D-LAN network from Explorer, ** for example : _G:\<user>\<share1>\etc.._. Same thing under _Linux_ with _mount_. See http://code.google.com/p/whefs/ for a virtual file system tool.
22
** http://en.wikipedia.org/wiki/Virtual_file_system
23 14 Greg Burri
24
* Utiliser D-LAN sur internet via un VPN comme http://www.freelan.org/ ... à creuser
25
26 9 Greg Burri
* Idées concernant les statistiques
27
** Pour les graphiques afficher deux lignes (abscisse + ordonnée) partant du curseur (comme wolfram alpha)
28 10 Greg Burri
** Utiliser des dégradés de bleu sur fond noir comme les traders qui se la pètent : http://optionalpha.com/wp-content/uploads/2011/05/Stock-Chart-Patterns.jpg
29 28 Greg Burri
** Ne pas afficher le curseur mais deux droites sur l’abscisse et l'ordonnée comme ici : http://bitcoinwisdom.com/markets/btcchina/btccny
30 13 Greg Burri
** Afficher le nombre de téléchargement à coté de chaque fichier (dossier?) lors du browsage
31 9 Greg Burri
32 7 Greg Burri
* Lien très intéressant sur les caches en lecture et écriture de libtorrent : http://www.rasterbar.com/products/libtorrent/features.html
33 8 Greg Burri
** Également : http://en.wikipedia.org/wiki/Libtorrent_%28Rasterbar%29
34 7 Greg Burri
35 1 Greg Burri
* Regarder du coté de qTorrent pour voir comment sont packagé les dll de Qt : http://qbittorrent.sourceforge.net/
36
37
* How a user can choose a shared directory when the core is remote ? The choose dialog must show the remote file structure !? See here : http://doc.trolltech.com/4.5/qfiledialog.html#setProxyModel
38
39
* Serveur d'intégration, tâches quotidiennes (dans l'ordre) :
40 4 Greg Burri
** Création d'un dossier d nommé avec la date courante
41
** Pull du repo d'integration depuis le repo de reference
42
** Génération de la doc (doxygen)
43
** Compilation de tous les composants (+ tests) en debug et en release -> rapport 'compilation.log' dans d
44
** Execution des tests de chaque composants -> rapport 'tests.log' dans d
45
** Réalisation de versions d'installation : debug + release -> rapport 'install.log' + les installs (.deb, install.exe) dans d
46
** Pouvoir afficher les rapports dans redmine ?
47 1 Greg Burri
48 25 Greg Burri
* Utiliser QJson* pour stocker les settings (Qt5 only) à la place de protocol buffer.
49
** Placer des commentaires dans les settings
50
51 26 Greg Burri
* Pouvoir manuellement ajouter des peers (nom + IP) dans le cas ou les datagrames UDP n'arrivent pas à circuler (par exemple il sont intentionnellement bloqués)
52
53 15 Greg Burri
* Utiliser D-LAN pour la inviter des gens dans une game (un peu comme steam)
54
** A partir d'une sélection de peers ([IP]) pouvoir lancer une partie
55
** Proposer une API permettant de faire des plugins en JS
56 16 Greg Burri
** Pouvoir joindre directement un peer (qui est un serveur de jeu), par exemple un serveur armagetron (qui lui même proposerai les fichiers nécessaires pour y jouer)
57 17 Greg Burri
** Exemple d'API :
58
*** ArmaPlugin a
59 15 Greg Burri
*** a.joinServer(serverIP) // Ici le plugin d'armagetron va lancer le jeu et lui dire de se connecter au serveur
60
** Trouver un moyen de voir qui joue à quoi et de différencier les serveurs
61 1 Greg Burri
** [..]
62
63
* Pouvoir mettre un commentaire pour chaque shared directory, celui ci s'affiche alors sous la forme d'un tooltip lors du browsage
64
65
* Afficher les shared folder avec une couleur différente par volume
66
67 23 Greg Burri
* Prendre en compte le 64 bits sous Windows ? Idéalement il faudrait que l'installeur inclut les deux versions et choisisse à l'installation en fonction de la plateforme courante.
68 1 Greg Burri
69
70
* Faire attention au erreur d'allocation throwé par new, les catcher (std::bad_alloc). Est-ce que cette exception peut être lancé depuis Qt ? (par exemple lors de l'insertion d'un élément dans un tableau). Est-ce vraiment utile ?
71
72
* Utilisation de splice pour les transferts ? : 
73 23 Greg Burri
** Linux : http://www.kernel.org/doc/man-pages/online/pages/man2/splice.2.html
74
** Windows : http://msdn.microsoft.com/en-us/library/ms740565%28VS.85%29.aspx
75
** Déroulement :
76
*** peerManager ~> uploadManager.newUpload(socket)
77
*** upload -> fileManager.getChunk(hash).sendChunkToSocket(offset, socket)
78 1 Greg Burri
79
* Pour protéger le cache de fichier un QReadWriteLock pourrait être pas mal :
80 19 Greg Burri
** Lors de la mise à jour un lock de type write est posé
81
** Lors d'une recherche c'est un lock de type read qui est utilsé.
82 23 Greg Burri
** Cela peut permettre de faire plusieurs recherches simultanément.
83 19 Greg Burri
84 1 Greg Burri
* Il faut prévoir de pouvoir modifier dynamiquement le nombre de 'chunk downloader' (via des settings)
85
86
* Logger toutes les prises de lock, les attentes, la création et la descruction des threads, etc..
87
88 23 Greg Burri
* Bien penser la sécurité notamment au niveau d'attaque par flood, par complexité ou d'usurpation d'identité, réaliser un ban d'IP si nécessaire. Écrire ici toutes les possibilités d'attaque : http://dev.euphorik.ch/wiki/pmp/Security
89
** (Actuellement il existe un début de blockage de peer utilisé uniquement dans le cas où l'on reçoit des données corrompues)
90 1 Greg Burri
91 19 Greg Burri
* Créer un système d'envoie de rapport d'erreur automatique incluant le log et le message d'erreur ainsi qu'un maximum d'autres infos (hardware, software?). Post sur HTTP ? (Attention aux données personnelles)
92 1 Greg Burri
93 19 Greg Burri
* Recherche de phrases tel que "I have a dog", utilisation de guillemets comme pour google :
94
## chercher le noeud correspond à chaque mots "i", "have", "a", "dog"
95
## prendre le noeud ayant le moins d'élément
96
## tester la phrase avec chaque élément du noeud
97 1 Greg Burri
98 19 Greg Burri
* Voir cette page pour des algos de recherche dans des chaines : http://en.wikipedia.org/wiki/String_searching_algorithm
99 1 Greg Burri
100 19 Greg Burri
* Est-ce que Common::Hash doit être "thread-safe" ? (macro à activer)
101 1 Greg Burri
102 23 Greg Burri
* En même temps que la première release, publier une documentation sur le protocole utilisé dans Redmine. Sous la forme d'un pdf?
103 1 Greg Burri
104 19 Greg Burri
* Packaging
105
* Slogan : "For Great Justice!"
106
* Logo : un vaisseau spatial (remake du vaisseau dans Zero wings) suivit du texte AYBABTU écrit de manière futuristique (et penché^^)
107
* (mieux) Ou une tentacule stylisé en référence aux monstres du jeu. La tentacule pourrait encercler un fichier en rapport aux 'byte'
108
* Couleur : noir, rouge et bleu (voir le site 'coming soon')
109
* Style oldschool
110
* Features :
111
* No configuration needed, just launch and download
112
* Very low ressource usage : you can play a game and download in the same time
113
* Utiliser un site spécialisé dans le streaming de fichiers pour la distribution des releases : http://put.io
114 1 Greg Burri
115 19 Greg Burri
* Problème subtile au sujet des dossiers partagé en sortie (read/write) :
116
** Deux dossiers partagés a et b
117
** un ensemble de dossiers/sous-dossiers sont téléchargés et vont dans a
118
** a n'a plus de place
119
** b est donc choisit comme destination, les dossiers/sous-dossiers sont alors recréé à double, il appartiendra à l'utilisateur de merger ces deux dossiers
120
** Dans un cas très dégénéré un ensemble de dossiers/sous-dossiers peuvent être éclaté sur n partage
121
** Solution actuelle : l'utilisateur se démerde ;)
122 1 Greg Burri
123
124
125 19 Greg Burri
h2. Amélioration du chat 
126 1 Greg Burri
127 19 Greg Burri
* Tous est en UDP
128
* Ajouter un message de quittance pour tous les messages (y compris les messages multicast)
129 4 Greg Burri
130
* Chat - Rooms
131
** La liste des rooms est listés en dessous de la liste des peers. Un textbox suivit d'un bouton 'join' se trouve just au dessus, il permet d'entrer le nom d'une room et de la rejoindre, si la room existe déjà on la rejoint sinon elle est créé. Il est possible de sélectionner une room existante, son nom s'inscrit alors dans la text box. En double cliquant sur une room existante on la rejoint automatiquement.
132
** Les rooms sont listées par ordre alphabétique et le nombre de participant est indiqué
133
*** Il est possible de "dérouler" (treeview) une room pour voir ses occupants
134
** Lorsque que l'utilisateur joint une room un nouvelle fenêtre lui étant dédié s'affiche. Cette fenêtre montre sur le coté les personnes présente dans la room.
135 1 Greg Burri
** Lors de la création d'une room, un hash généré aléatoirement (correspond au nom de la room pour les rooms publique?) lui est associé. La room est alors mise dans les rooms connues et l'utilisateur est définit comme faisant partie de la room.
136
** Les rooms dans lesquels on se trouve sont envoyées périodiquement via le message 'IMAlive'.
137 4 Greg Burri
** Lorsqu'une room est vide, plus personne ne la liste dans le message 'IMAlive', elle disparait alors naturellement.
138 1 Greg Burri
** Lorsqu'un message est envoyé dans une room, un datagrame UDP (unicast) est envoyé à chaque personne de la room
139
140
* Chat - Private Rooms
141
** Les private rooms ne sont joignable que sur invitation
142
** Elles ne sont pas envoyé dans le message 'IMAlive'.
143
** L'envoie d'un message se fait de la même manière qu'une roome publique
144
** Pour inviter une personne on lui envoie simplement le nom de la room, son id et les participants, il peut décliner
145
** S'il accepte il le s'annonce auprès de tous les participants
146
** Une personne peut quitter une room, il le signale aux participants.
147
*** Une private room peut-être transformé en public room mais pas l'inverse
148 4 Greg Burri
149 1 Greg Burri
* Chat - privé entre deux personnes
150
** Une personne peut initier un dialogue privé avec une autre personne de la liste via le menu contextuel
151 4 Greg Burri
** Dans ce cas une private room est créé entre les deux personnes
152
** D'autres personne peuvent être inviter à joindre la discussion
153
154 1 Greg Burri
* Chat - Lors du lancement permettre au GUI de récupérer les n derniers message (chat) :
155 4 Greg Burri
** Un datagramme multicast est envoyé, "GET_NB_CHAT_MESS_KNOWN"
156 11 Greg Burri
** Un datagramme unicast est retourné : "NB_CHAT_MESS_KNOWN" avec le nombre de message connu
157 1 Greg Burri
** Une connexion TCP est ouverte  vers le peer avec un nombre de messages connu suffisant et les derniers messages lui sont demandé.
158
** Chat message doit être tagé avec un ID pour éviter d'insérer des messages à double