private static object HandleRawDataTransfer(int bufferId, int seq, Stream stream) { if (!IncomingFiles.TryGetValue(bufferId, out var status)) { return(null); } lock (status) { var allParts = status.Request.ContentLength / DfsConfiguration.ChunkSize + (status.Request.ContentLength % DfsConfiguration.ChunkSize == 0 ? 0 : 1); if (status.FileStream.Position != seq * DfsConfiguration.ChunkSize) { //Console.WriteLine("Warning: out of order file transfer"); status.FileStream.Seek(seq * DfsConfiguration.ChunkSize, SeekOrigin.Begin); } stream.CopyTo(status.FileStream); if (Interlocked.Increment(ref status.DownloadedParts) == allParts) { //? status.Connection.DestroyRawDataBuffer(bufferId); IncomingFiles.TryRemove(bufferId, out _); VerifyQueue.Enqueue(status, CryptoHelper.BuildDiscriminatorFromS64(status.Request.S64Sha256)); } } return(null); }
private static void Server_ClientDisconnected(Connection connection, Exception exception) { var role = connection.Data.Get <string>("_R", null) != null; if (role) { VerifyQueue.RemoveClient(); SendQueue.RemoveClient(); UnzipQueue.RemoveClient(); //var targetDict = role == DfsClientType.Shard ? Shards : Realms; //targetDict.TryRemove(connection.Identifier, out _); } }
private static bool AcceptClient(Connection client) { if (client.SslCertificates.RemotePolicyErrors != SslPolicyErrors.None) { return(false); } if (!PermissionManager.Authorize(client)) { return(false); } VerifyQueue.NewClient(); SendQueue.NewClient(); UnzipQueue.NewClient(); //targetDict.TryAdd(client.Identifier, client); //client.Data["Role"] = type.ToString(); return(true); }