Eine .NET Standard-Clientbibliothek für das Soulseek-Netzwerk.
Von NuGet installieren.
var client = new SoulseekClient();await client.ConnectAsync("Username", "Password");
IEnumerable<SearchResponse>Responses = waiting Client.SearchAsync(SearchQuery.FromText("some search"));
Hinweis: SearchAsync
akzeptiert eine SearchQuery
mit dem Konstruktor SearchQuery(string query, IEnumerable<string> exclusions, int? minimumBitrate, int? minimumFileSize, int? minimumFilesInFolder, bool isVBR, bool isCBR)
und ermöglicht so alle vom offiziellen Client bereitgestellten Optionen.
SearchResponse
hat die folgende Form:
int FileCountIReadOnlyCollection<File> Filesint LockedFileCount IReadOnlyCollection<File> LockedFilesint FreeUploadSlots langes QueueLengthint-Token int UploadSpeedstring-Benutzername
File
verfügt über eine Reihe von Eigenschaften. Sie benötigen zum Herunterladen Filename
und Size
.
byte[] file = waiting Client.DownloadAsync(Benutzername: „einiger Benutzername“, Dateiname: „einiger vollständig qualifizierter Dateiname“, Größe: 42);
ODER (idealerweise)
var fs = new FileStream("c:downloadslocal filename", FileMode.Create);await Client.DownloadAsync(username: "some username", filename: "some Fully Qualified Filename", OutputStream: fs, size: 42) ;
Hinweis: Laden Sie nach Möglichkeit in einen Stream herunter, um den Speicheraufwand zu reduzieren.
Die externe Schnittstelle der Bibliothek ist spärlich und gut dokumentiert; Die beste Ressource ist der Code selbst. Von besonderem Interesse:
ISoulseekClient
SoulseekClientOptions
Suchoptionen
Übertragungsoptionen
Etwa Anfang 2024 hat der Soulseek-Server damit begonnen, eine Liste „ausgeschlossener Suchbegriffe“ zu senden, um den Austausch von Inhalten im Netzwerk einzuschränken und Urheberrechtstrolle zu besänftigen.
Diese Liste von Phrasen wird im Ereignis ExcludedSearchPhrassReceived
geliefert, und ich gehe davon aus, dass alle ausgehenden Suchergebnisse gefiltert werden müssen , um Dateien auszuschließen, die eine der ausgeschlossenen Phrasen im Pfad oder Dateinamen enthalten.
Ich schätze die Zusammenarbeit und das Engagement aller, die langfristige Gesundheit des Soulseek-Netzwerks sicherzustellen.
Beachten Sie, dass die Beispielanwendung durch slskd ersetzt wurde und nicht mehr gepflegt wird.
Im Lieferumfang ist eine kleine Webanwendung enthalten, die als Beispiel dient.
Es ist wichtig zu beachten, dass es derzeit keine Kontrollen über Uploads gibt; Alles, was Sie teilen, kann jederzeit von beliebig vielen Personen heruntergeladen werden. Vor diesem Hintergrund sollten Sie erwägen, eine kleine Anzahl von Dateien aus dem Beispiel freizugeben.
Es ist außerdem wichtig zu beachten, dass einige Anzeigen in der Anwendung den Daemon nach Aktualisierungen abfragen. Dies ist ineffizient und Sie sollten diese Anwendung wirklich nicht über eine mobile Datenverbindung verwenden.
Ein Docker-Image, das die Anwendung enthält, kann von jpdillingham/slsk-web-example abgerufen werden.
Ein minimaler run
würde so aussehen:
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
Die Anwendung ist dann über Port 5000 erreichbar (z. B. http://localhost:5000). Mit dieser Konfiguration kann die Anwendung keine eingehenden Verbindungen akzeptieren und keine Verbindung zum verteilten Netzwerk herstellen. Möglicherweise erhalten Sie eingeschränkte Suchergebnisse und Benutzer finden Ihre Dateien nicht über die Suche. Andere Benutzer haben möglicherweise Schwierigkeiten, Ihre Freigaben zu durchsuchen.
Der vollständige Satz an Optionen ist wie folgt:
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
Bei dieser Konfiguration überwacht die Anwendung Port 50000 und stellt eine Verbindung zum verteilten Netzwerk her, wodurch bis zu 10 untergeordnete Verbindungen möglich sind. Die Anwendung sollte keine Verbindungsprobleme haben, sofern Sie Port 50000 ordnungsgemäß weitergeleitet haben und verteilte Suchanfragen empfangen und beantworten können.
Wenn SLSK_ENABLE_SECURITY
true
ist, werden Sie aufgefordert, sich anzumelden. Geben Sie die Werte an, die Sie für die Felder SLSK_USERNAME
und SLSK_PASSWORD
angegeben haben. Wenn Sie diese Option auf false
setzen, wird die Eingabeaufforderung deaktiviert.
Wenn Sie die Anwendung hinter einem Reverse-Proxy ausführen möchten, legen Sie SLSK_BASE_PATH
auf Ihren Proxy-Pfad fest.
Der Einfachheit halber wurden zwei Skripte, run
und start
, in examples/Web/bin
eingefügt, um das Beispiel interaktiv bzw. als Daemon auszuführen.
Die Beispielanwendung ist in zwei Projekte aufgeteilt; eine .NET 5.0 WebAPI und eine React-Anwendung, gebootet mit create-react-app. Wenn Sie diese außerhalb von Docker ausführen möchten, müssen Sie beide Anwendungen starten; dotnet run
für die API und yarn|npm start
für die React-Anwendung. Sie können eine Verbindung zu http://localhost:3000 herstellen oder die API stellt die Swagger-Benutzeroberfläche unter http://localhost:5000/swagger bereit.
Ein im bin
-Verzeichnis des Beispiels enthaltenes Build-Skript, das die React-App erstellt, die statischen Dateien in das wwwroot-Verzeichnis der API kopiert, die API erstellt und dann versucht, das Docker-Image zu erstellen.
Nikotin+ (am aktuellsten)
SoulseekProtocol - Museek+
Dokumentation des Soulseek-Protokolls (gespiegelt)
Ein Großteil von Soulseek.NET wurde durch die Arbeit anderer ermöglicht. Als Referenz dienten folgende Quellen:
Nikotin-plus
Livelook von @misterhat
museek-plus von @eLvErDe
slsk-client von @f-hj.