Una biblioteca cliente .NET Standard para la red Soulseek.
Instalar desde NuGet.
var client = new SoulseekClient();await client.ConnectAsync("Nombre de usuario", "Contraseña");
Respuestas IEnumerable<SearchResponse> = await Client.SearchAsync(SearchQuery.FromText("alguna búsqueda"));
Nota: SearchAsync
acepta una SearchQuery
con el constructor SearchQuery(string query, IEnumerable<string> exclusions, int? minimumBitrate, int? minimumFileSize, int? minimumFilesInFolder, bool isVBR, bool isCBR)
, lo que permite todas las opciones proporcionadas por el cliente oficial.
SearchResponse
tiene la siguiente forma:
int FileCountIReadOnlyCollection<Archivo> Archivosint LockedFileCount IReadOnlyCollection<Archivo> LockedFilesint FreeUploadSlots token largo de longitud de cola int UploadSpeedstring Nombre de usuario
File
tiene varias propiedades; Necesitará Filename
y Size
para descargar.
byte[] file = await Client.DownloadAsync(nombre de usuario: "algún nombre de usuario", nombre de archivo: "algún nombre de archivo completo", tamaño: 42);
O (idealmente)
var fs = new FileStream("c:downloadslocal filename", FileMode.Create);await Client.DownloadAsync(nombre de usuario: "algún nombre de usuario", nombre de archivo: "algún nombre de archivo completo", outputStream: fs, tamaño: 42) ;
Nota: Descargue a una secuencia cuando sea posible para reducir la sobrecarga de memoria.
La interfaz externa de la biblioteca es escasa y está bien documentada; el mejor recurso es el código mismo. De particular interés:
ISoulseekCliente
SoulseekClienteOpciones
Opciones de búsqueda
Opciones de transferencia
A partir de principios de 2024, el servidor Soulseek comenzó a enviar una lista de "frases de búsqueda excluidas" como una forma de restringir el contenido intercambiado en la red y apaciguar a los trolls de derechos de autor.
Esta lista de frases se entrega en el evento ExcludedSearchPhrassReceived
y espero que cualquier resultado de búsqueda saliente deba filtrarse para excluir archivos que contengan cualquiera de las frases excluidas en la ruta o el nombre del archivo.
Aprecio la cooperación y el compromiso de todos para garantizar la salud a largo plazo de la red Soulseek.
Tenga en cuenta que la aplicación de ejemplo ha sido reemplazada por slskd y ya no se mantendrá.
Se incluye una pequeña aplicación web que sirve de ejemplo.
Es importante tener en cuenta que actualmente no existen controles sobre las cargas; Todo lo que compartas puede ser descargado por cualquier número de personas en cualquier momento. Teniendo esto en cuenta, considere compartir una pequeña cantidad de archivos del ejemplo.
También es importante tener en cuenta que algunas pantallas en la aplicación sondean el demonio en busca de actualizaciones; Esto es ineficiente y realmente no deberías usar esta aplicación a través de una conexión de datos móviles.
Se puede extraer una imagen de Docker que contiene la aplicación desde jpdillingham/slsk-web-example.
Una run
mínima sería así:
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
Entonces se podrá acceder a la aplicación en el puerto 5000 (por ejemplo, http://localhost:5000). Con esta configuración la aplicación no podrá aceptar conexiones entrantes y no se conectará a la red distribuida. Es posible que reciba resultados de búsqueda limitados y que los usuarios no encuentren sus archivos mediante la búsqueda. Otros usuarios pueden tener dificultades para explorar sus recursos compartidos.
El conjunto completo de opciones es el siguiente:
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
Con esta configuración la aplicación escuchará en el puerto 50000 y se conectará a la red distribuida, permitiendo hasta 10 conexiones secundarias. La aplicación no debería tener problemas para conectarse siempre que haya reenviado el puerto 50000 correctamente y recibirá y responderá a las solicitudes de búsqueda distribuida.
Si SLSK_ENABLE_SECURITY
es true
, se le pedirá que inicie sesión. Proporcione los valores que especificó para los campos SLSK_USERNAME
y SLSK_PASSWORD
. Establecer esta opción en false
deshabilitará el mensaje.
Si desea ejecutar la aplicación detrás de un proxy inverso, configure SLSK_BASE_PATH
en su ruta de proxy.
Para mayor comodidad, se han incluido dos scripts, run
y start
, en examples/Web/bin
para ejecutar el ejemplo de forma interactiva y como un demonio, respectivamente.
La aplicación de ejemplo se divide en dos proyectos; una WebAPI .NET 5.0 y una aplicación React iniciada con create-react-app. Si desea ejecutarlas fuera de Docker, deberá iniciar ambas aplicaciones; dotnet run
para la API y yarn|npm start
para la aplicación React. Puede conectarse a http://localhost:3000, o la API proporciona la interfaz de usuario de Swagger en http://localhost:5000/swagger.
Un script de compilación incluido en el directorio bin
del ejemplo que compilará la aplicación React, copiará los archivos estáticos al directorio wwwroot de la API, compilará la API y luego intentará compilar la imagen de Docker.
Nicotina+ (más actualizado)
Protocolo Soulseek - Museek+
Documentación del protocolo Soulseek (reflejada)
Gran parte de Soulseek.NET fue posible gracias al trabajo de otros. Se utilizaron como referencia los siguientes recursos:
nicotina plus
look en vivo por @misterhat
museek-plus por @eLvErDe
cliente slsk por @f-hj.