Пример #1
0
        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);
        }
Пример #2
0
        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 _);
            }
        }
Пример #3
0
        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);
        }