Une bibliothèque client .NET Standard pour le réseau Soulseek.
Installez à partir de NuGet.
var client = new SoulseekClient();await client.ConnectAsync("Nom d'utilisateur", "Mot de passe");
Réponses IEnumerable<SearchResponse> = wait Client.SearchAsync(SearchQuery.FromText("some search"));
Remarque : SearchAsync
accepte un SearchQuery
avec le constructeur SearchQuery(string query, IEnumerable<string> exclusions, int? minimumBitrate, int? minimumFileSize, int? minimumFilesInFolder, bool isVBR, bool isCBR)
, autorisant toutes les options fournies par le client officiel.
SearchResponse
a la forme suivante :
int FileCountIReadOnlyCollection<Fichier> Filesint LockedFileCount IReadOnlyCollection<File> LockedFilesint FreeUploadSlots long jeton QueueLengthint int UploadSpeedstring Nom d'utilisateur
File
a un certain nombre de propriétés ; vous aurez besoin du Filename
et Size
pour le téléchargement.
byte[] file = wait Client.DownloadAsync(username : "un nom d'utilisateur", nom de fichier : "un nom de fichier complet", taille : 42);
OU (idéalement)
var fs = new FileStream("c:downloadslocal filename", FileMode.Create);await Client.DownloadAsync(username : "un certain nom d'utilisateur", nom de fichier : "un certain nom de fichier complet", outputStream : fs, taille : 42) ;
Remarque : Téléchargez dans un flux lorsque cela est possible pour réduire la surcharge de mémoire.
L'interface externe de la bibliothèque est clairsemée et bien documentée ; la meilleure ressource est le code lui-même. D'un intérêt particulier :
ISoulseekClient
Options du client Soulseek
Options de recherche
Options de transfert
Vers le début de l'année 2024, le serveur Soulseek a commencé à envoyer une liste de « expressions de recherche exclues » afin de restreindre le contenu échangé sur le réseau et d'apaiser les trolls des droits d'auteur.
Cette liste d'expressions est fournie dans l'événement ExcludedSearchPhrassReceived
, et je m'attends à ce que tous les résultats de recherche sortants soient filtrés pour exclure les fichiers contenant l'une des expressions exclues dans le chemin ou le nom de fichier.
J'apprécie la coopération et l'engagement de chacun pour assurer la santé à long terme du réseau Soulseek.
Notez que l'exemple d'application a été remplacé par slskd et ne sera plus maintenu.
Inclus est une petite application Web qui sert d'exemple.
Il est important de noter qu'il n'existe actuellement aucun contrôle sur les téléchargements ; tout ce que vous partagez peut être téléchargé par n'importe quel nombre de personnes à tout moment. Dans cette optique, envisagez de partager un petit nombre de fichiers de l’exemple.
Il est également important de noter que certains affichages dans l'application interrogent le démon pour les mises à jour ; c'est inefficace et vous ne devriez vraiment pas utiliser cette application via une connexion de données mobile.
Une image Docker contenant l'application peut être extraite de jpdillingham/slsk-web-example.
Une run
minimale ressemblerait à :
docker run -i -p 5000:5000 -v <path/to/downloads>:/var/slsk/download -v <path/to/shared>:/var/slsk/shared -e "SLSK_USERNAME=<your username>" -e "SLSK_PASSWORD=<your password>" jpdillingham/slsk-web-example:latest
L'application sera alors accessible sur le port 5000 (par exemple http://localhost:5000). Avec cette configuration, l'application ne pourra pas accepter les connexions entrantes et ne se connectera pas au réseau distribué. Vous pouvez recevoir des résultats de recherche limités et les utilisateurs ne trouveront pas vos fichiers via la recherche. D'autres utilisateurs peuvent avoir des difficultés à parcourir vos partages.
L'ensemble complet des options est le suivant :
docker run -i -p 5000:5000 -p 50000:50000 -v <path/to/downloads>:/var/slsk/download -v <path/to/shared>:/var/slsk/shared -e "SLSK_USERNAME=<your username>" -e "SLSK_PASSWORD=<your password>" -e "SLSK_LISTEN_PORT=50000" -e "SLSK_CONNECT_TIMEOUT=5000" -e "SLSK_INACTIVITY_TIMEOUT=15000" -e "SLSK_READ_BUFFER_SIZE=16384" -e "SLSK_WRITE_BUFFER_SIZE=16384" -e "SLSK_ENABLE_DNET=true" -e "SLSK_DNET_CHILD_LIMIT=10" -e "SLSK_DIAGNOSTIC=Info" -e "SLSK_SHARED_CACHE_TTL=3600000" -e "SLSK_ENABLE_SECURITY=true" -e "SLSK_SECURITY_TOKEN_TTL=604800000" -e "SLSK_ROOM_MESSAGE_LIMIT=250" -e "SLSK_BASE_PATH=/" jpdillingham/slsk-web-example:latest
Avec cette configuration, l'application écoutera sur le port 50000 et se connectera au réseau distribué, permettant jusqu'à 10 connexions enfants. L'application ne devrait avoir aucun problème à se connecter à condition que vous ayez correctement redirigé le port 50000 et qu'elle reçoive et réponde aux demandes de recherche distribuées.
Si SLSK_ENABLE_SECURITY
est true
, vous serez invité à vous connecter. Fournissez les valeurs que vous avez spécifiées pour les champs SLSK_USERNAME
et SLSK_PASSWORD
. Définir cette option sur false
désactivera l’invite.
Si vous souhaitez exécuter l'application derrière un proxy inverse, définissez SLSK_BASE_PATH
sur votre chemin proxy.
Pour plus de commodité, deux scripts, run
et start
, ont été inclus dans examples/Web/bin
pour exécuter l'exemple de manière interactive et en tant que démon, respectivement.
L'exemple d'application est divisé en deux projets ; une WebAPI .NET 5.0 et une application React démarrée avec create-react-app. Si vous souhaitez les exécuter en dehors de Docker, vous devrez démarrer les deux applications ; dotnet run
pour l'API et yarn|npm start
pour l'application React. Vous pouvez vous connecter à http://localhost:3000, ou l'API sert l'interface utilisateur Swagger à l'adresse http://localhost:5000/swagger.
Un script de build inclus dans le répertoire bin
de l'exemple qui va construire l'application React, copier les fichiers statiques dans le répertoire wwwroot de l'API, construire l'API, puis tenter de construire l'image Docker.
Nicotine+ (le plus à jour)
Protocole Soulseek - Museek+
Documentation du protocole Soulseek (en miroir)
Une grande partie de Soulseek.NET a été rendue possible grâce au travail d'autres personnes. Les ressources suivantes ont été utilisées comme référence :
nicotine-plus
livelook par @misterhat
museek-plus par @eLvErDe
client slsk par @f-hj.