Клиентская библиотека .NET Standard для сети Soulseek.
Установите из NuGet.
вар клиент = новый SoulseekClient();ждите client.ConnectAsync("Имя пользователя", "Пароль");
Ответы IEnumerable<SearchResponse> = ждут Client.SearchAsync(SearchQuery.FromText("некоторый поиск"));
Примечание. SearchAsync
принимает SearchQuery
с конструктором SearchQuery(string query, IEnumerable<string> exclusions, int? minimumBitrate, int? minimumFileSize, int? minimumFilesInFolder, bool isVBR, bool isCBR)
, позволяя использовать все параметры, предоставляемые официальным клиентом.
SearchResponse
имеет следующую форму:
int FileCountIReadOnlyCollection<File> Filesint LockedFileCount IReadOnlyCollection<File> LockedFilesint FreeUploadSlots длинный токен QueueLengthint int UploadSpeedstring Имя пользователя
File
имеет ряд свойств; вам понадобится Filename
и Size
для загрузки.
byte[] file = await Client.DownloadAsync(username: «некоторое имя пользователя», filename: «некоторое полное имя файла», размер: 42);
ИЛИ (в идеале)
var fs = new FileStream("c:downloadslocal filename", FileMode.Create); await Client.DownloadAsync(имя пользователя: "некоторое имя пользователя", имя файла: "некоторое полное имя файла", выходной поток: fs, размер: 42) ;
Примечание. По возможности загружайте в поток, чтобы уменьшить нагрузку на память.
Внешний интерфейс библиотеки скуден и хорошо документирован; лучший ресурс — это сам код. Особый интерес:
ISoulseekКлиент
Параметры SoulseekClient
Параметры поиска
Варианты перевода
Примерно с начала 2024 года сервер Soulseek начал рассылать список «исключенных поисковых фраз», чтобы ограничить обмен контентом в сети и успокоить троллей, занимающихся авторским правом.
Этот список фраз доставляется в событии ExcludedSearchPhrassReceived
, и я ожидаю, что любые исходящие результаты поиска должны быть отфильтрованы для исключения файлов, которые содержат любую из исключенных фраз в пути или имени файла.
Я ценю сотрудничество и стремление каждого обеспечить долгосрочное здоровье сети Soulseek.
Обратите внимание, что пример приложения был заменен slskd и больше не будет поддерживаться.
В комплект входит небольшое веб-приложение, которое служит примером.
Важно отметить, что в настоящее время нет контроля над загрузкой; все, чем вы поделитесь, может быть загружено любым количеством людей в любой момент времени. Имея это в виду, рассмотрите возможность совместного использования небольшого количества файлов из примера.
Также важно отметить, что некоторые дисплеи приложения опрашивают демон на наличие обновлений; это неэффективно, и вам действительно не следует использовать это приложение через мобильное соединение для передачи данных.
Образ Docker, содержащий приложение, можно получить из jpdillingham/slsk-web-example.
Минимальный run
будет выглядеть так:
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
После этого приложение будет доступно через порт 5000 (например, http://localhost:5000). В такой конфигурации приложение не сможет принимать входящие соединения и не будет подключаться к распределенной сети. Вы можете получить ограниченные результаты поиска, и пользователи не смогут найти ваши файлы с помощью поиска. У других пользователей могут возникнуть трудности с просмотром ваших общих ресурсов.
Полный набор опций выглядит следующим образом:
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
В этой конфигурации приложение будет прослушивать порт 50000 и подключаться к распределенной сети, допуская до 10 дочерних подключений. У приложения не должно возникнуть проблем с подключением, если вы правильно перенаправили порт 50000 и будете получать распределенные поисковые запросы и отвечать на них.
Если SLSK_ENABLE_SECURITY
имеет true
, вам будет предложено войти в систему. Введите значения, указанные вами в полях SLSK_USERNAME
и SLSK_PASSWORD
. Установка для этой опции значения false
отключит подсказку.
Если вы хотите запускать приложение через обратный прокси-сервер, установите SLSK_BASE_PATH
в качестве пути прокси.
Для удобства в examples/Web/bin
включены два скрипта run
и start
для запуска примера в интерактивном режиме и в качестве демона соответственно.
Пример приложения разделен на два проекта; .NET 5.0 WebAPI и приложение React, загруженное с помощью create-react-app. Если вы хотите запустить их вне Docker, вам потребуется запустить оба приложения; dotnet run
для API и yarn|npm start
для приложения React. Вы можете подключиться к http://localhost:3000 или API обслуживает пользовательский интерфейс Swagger по адресу http://localhost:5000/swagger.
Сценарий сборки, включенный в каталог bin
примера, который создаст приложение React, скопирует статические файлы в каталог wwwroot API, создаст API, а затем попытается собрать образ Docker.
Никотин+ (самый актуальный)
Протокол Soulseek - Museek+
Документация протокола Soulseek (зеркально)
Большая часть Soulseek.NET стала возможной благодаря работе других. В качестве справочного материала использовались следующие ресурсы:
никотин-плюс
LiveLook от @misterhat
museek-plus от @eLvErDe
slsk-клиент от @f-hj.