Uma biblioteca cliente .NET Standard para a rede Soulseek.
Instale a partir do NuGet.
var client = new SoulseekClient();await client.ConnectAsync("Nome de usuário", "Senha");
IEnumerable<SearchResponse> respostas = aguardar Client.SearchAsync(SearchQuery.FromText("alguma pesquisa"));
Nota: SearchAsync
aceita um SearchQuery
com o construtor SearchQuery(string query, IEnumerable<string> exclusions, int? minimumBitrate, int? minimumFileSize, int? minimumFilesInFolder, bool isVBR, bool isCBR)
, permitindo todas as opções fornecidas pelo cliente oficial.
SearchResponse
tem o seguinte formato:
int FileCountIReadOnlyCollection<Arquivo> Filesint LockedFileCount IReadOnlyCollection<Arquivo> LockedFilesint FreeUploadSlots Fila longaLengthint Token nome de usuário int UploadSpeedstring
File
possui diversas propriedades; você precisará do Filename
e Size
para fazer o download.
byte[] arquivo = aguardar Client.DownloadAsync(nome de usuário: "algum nome de usuário", nome de arquivo: "algum nome de arquivo totalmente qualificado", tamanho: 42);
OU (idealmente)
var fs = new FileStream("c:downloadsnome de arquivo local", FileMode.Create);await Client.DownloadAsync(nome de usuário: "algum nome de usuário", nome de arquivo: "algum nome de arquivo totalmente qualificado", outputStream: fs, tamanho: 42) ;
Nota: Faça download para um stream sempre que possível para reduzir a sobrecarga de memória.
A interface externa da biblioteca é esparsa e bem documentada; o melhor recurso é o próprio código. De particular interesse:
ISoulseekCliente
Opções SoulseekClient
Opções de pesquisa
Opções de transferência
A partir do início de 2024, o servidor Soulseek começou a enviar uma lista de “frases de pesquisa excluídas” como forma de restringir o conteúdo trocado na rede e apaziguar os trolls de direitos autorais.
Esta lista de frases é entregue no evento ExcludedSearchPhrassReceived
e espero que quaisquer resultados de pesquisa de saída sejam filtrados para excluir arquivos que contenham qualquer uma das frases excluídas no caminho ou nome do arquivo.
Agradeço a cooperação e o compromisso de todos em garantir a saúde a longo prazo da rede Soulseek.
Observe que o aplicativo de exemplo foi substituído pelo slskd e não será mais mantido.
Está incluída uma pequena aplicação web que serve de exemplo.
É importante observar que atualmente não há controles sobre uploads; tudo o que você compartilha pode ser baixado por qualquer número de pessoas a qualquer momento. Com isso em mente, considere compartilhar um pequeno número de arquivos do exemplo.
Também é importante observar que algumas telas do aplicativo pesquisam atualizações no daemon; isso é ineficiente e você realmente não deveria usar este aplicativo em uma conexão de dados móveis.
Uma imagem Docker contendo o aplicativo pode ser extraída de jpdillingham/slsk-web-example.
Uma run
mínima seria semelhante a:
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
A aplicação estará então acessível na porta 5000 (por exemplo, http://localhost:5000). Com esta configuração a aplicação não poderá aceitar conexões de entrada e não se conectará à rede distribuída. Você pode receber resultados de pesquisa limitados e os usuários não encontrarão seus arquivos por meio da pesquisa. Outros usuários podem ter dificuldade para navegar em seus compartilhamentos.
O conjunto completo de opções é o seguinte:
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
Com esta configuração a aplicação escutará na porta 50000 e se conectará à rede distribuída, permitindo até 10 conexões filhas. O aplicativo não deverá ter problemas para se conectar, desde que você tenha encaminhado a porta 50000 corretamente e receba e responda às solicitações de pesquisa distribuídas.
Se SLSK_ENABLE_SECURITY
for true
, você será solicitado a fazer login. Forneça os valores especificados para os campos SLSK_USERNAME
e SLSK_PASSWORD
. Definir esta opção como false
desabilitará o prompt.
Se você quiser executar o aplicativo atrás de um proxy reverso, defina SLSK_BASE_PATH
como o caminho do proxy.
Por conveniência, dois scripts, run
e start
, foram incluídos em examples/Web/bin
para executar o exemplo de forma interativa e como um daemon, respectivamente.
O aplicativo de exemplo está dividido em dois projetos; uma WebAPI .NET 5.0 e um aplicativo React inicializado com create-react-app. Se quiser executá-los fora do Docker, você precisará iniciar os dois aplicativos; dotnet run
para a API e yarn|npm start
para o aplicativo React. Você pode se conectar a http://localhost:3000 ou a API disponibiliza a UI do Swagger em http://localhost:5000/swagger.
Um script de construção incluído no diretório bin
do exemplo que irá construir o aplicativo React, copiar os arquivos estáticos para o diretório wwwroot da API, construir a API e, em seguida, tentar construir a imagem Docker.
Nicotina+ (mais atualizado)
Protocolo Soulseek - Museek +
Documentação do protocolo Soulseek (espelhado)
Grande parte do Soulseek.NET foi possível graças ao trabalho de outros. Os seguintes recursos foram usados como referência:
nicotina-plus
look ao vivo por @misterhat
museek-plus por @eLvErDe
slsk-client por @f-hj.