public async Task <ServiceResult <byte[]> > Create(string url, byte[] byteArray = null, string name = "") { var serviceResult = new ServiceResult <byte[]>(); #region byteArray if (byteArray == null) { var byteArrayResult = await _downloadService.GetByteArray(url); serviceResult.Success = byteArrayResult.Success; if (byteArrayResult.Success) { byteArray = byteArrayResult.Result; } else { serviceResult.Error = byteArrayResult.Error; return(serviceResult); } } #endregion #region name if (string.IsNullOrWhiteSpace(name)) { var nameResult = _downloadService.GetFileName(url); serviceResult.Success = nameResult.Success; if (nameResult.Success) { name = nameResult.Result; } else { serviceResult.Error = nameResult.Error; return(serviceResult); } } #endregion #region pieces var pieceSize = RecommendedPieceSize(byteArray.LongLength); var pieces = CalcPiecesHash(new byte[1][] { byteArray }, pieceSize); #endregion #region torrent var torrent = new Torrent() { File = new SingleFileInfo() { FileName = name, FileSize = byteArray.LongLength, Md5Sum = GetMD5Hash(byteArray, true) }, Trackers = new List <IList <string> > { new List <string>() { "udp://shadowshq.yi.org:6969/announce" }, new List <string>() { "udp://tracker.eddie4.nl:6969/announce" }, new List <string>() { "udp://tracker.mg64.net:2710/announce" }, new List <string>() { "udp://tracker.sktorrent.net:6969" } }, PieceSize = pieceSize, Pieces = pieces, PiecesAsHexString = ToHex(pieces, true), CreatedBy = "MusicStore", CreationDate = DateTime.Now, Encoding = Encoding.UTF8, IsPrivate = false, ExtraFields = new BencodeNET.Objects.BDictionary() }; torrent.ExtraFields.Add("url-list", url); #endregion serviceResult.Success = true; serviceResult.Result = torrent.EncodeAsBytes(); return(serviceResult); }