Пример #1
0
    private static long GetTransferSize()
    {
        long totalTransferSize = 0;     // bytes

        File = new FileOperations();
        int len = FilePaths.Length;

        FileNames       = new string[len];
        FileSizeAsBytes = new long[len];
        FileSizes       = new double[len];
        SizeUnits       = new FileOperations.SizeUnit[len];
        for (int i = 0; i < FilePaths.Length; i++)
        {
            File.Init(FilePaths[i], FileOperations.TransferMode.Send);
            totalTransferSize += File.FileSizeAsBytes;
            FileNames[i]       = File.FileName;
            //FilePaths[i] = File.FilePath;
            FileSizeAsBytes[i] = File.FileSizeAsBytes;
            FileSizes[i]       = File.FileSize;
            SizeUnits[i]       = File.FileSizeUnit;
            File.CloseFile();
        }
        lock (Lck_TransferMetrics)
            _transferMetrics.TotalDataSizeAsBytes = totalTransferSize;
        return(totalTransferSize);
    }
Пример #2
0
    private static void ReceivingCoreFcn()
    {
        lock (Lck_TransferMetrics)
        {
            _transferMetrics.TotalBytesSent = 0;
            _transferMetrics.TotalDataSent  = 0;
            _transferMetrics.CountOfFiles   = FilePaths.Length;
        }
        Stopwatch watch = Stopwatch.StartNew();

        IsTransfering = true;
        FileNames     = new string[FilePaths.Length];
        for (int i = 0; i < FilePaths.Length; i++)
        {
            GetCurrentFileName();
            FileNames[i] = CurrentFile.FileName;
            FilePaths[i] = FileSaveURL + CurrentFile.FileName;
            SendReadySignal();
            File = new FileOperations();
            Debug.WriteLine("receiveing for: " + i + " FilePaths.Length: " + FilePaths.Length);
            File.Init(FileSaveURL + CurrentFile.FileName, FileOperations.TransferMode.Receive);
            Debug.WriteLine("saveURL:" + FileSaveURL + " name: " + CurrentFile.FileName);
            lock (Lck_TransferMetrics)
            {
                _transferMetrics.CurrentFile        = CurrentFile;
                _transferMetrics.IndexOfCurrentFile = i + 1;
            }
            long byteCounter       = 0;
            long totalBytesWritten = 0;
            int  numberOfBytesRead = 0;
            watch.Restart();
            while (IsTransferEnabled)
            {
                byte[] receivedData = server.GetData();
                if (receivedData == null)
                {
                    UpdateMetrics(watch, byteCounter);
                    watch.Restart();
                    break;
                }
                if (receivedData[0] == (byte)Functions.TransferMode)
                {
                    SendAck(Functions.TransferMode);
                    File.FileWriteAtByteIndex(totalBytesWritten, receivedData);
                    numberOfBytesRead  = receivedData.Length - 1;
                    totalBytesWritten += numberOfBytesRead;
                    byteCounter       += numberOfBytesRead;

                    if (watch.Elapsed.TotalSeconds >= 0.5)
                    {
                        UpdateMetrics(watch, byteCounter);
                        byteCounter = 0;
                        watch.Restart();
                    }
                }
                else if (receivedData[0] == (byte)Functions.EndofFileTransfer)
                {
                    SendAck(Functions.EndofFileTransfer);
                    UpdateMetrics(watch, byteCounter);
                    watch.Restart();
                    break;
                }
                else if (receivedData[0] == (byte)Functions.AllisSent)
                {
                    UpdateMetrics(watch, byteCounter);
                    watch.Restart();
                    server.CloseServer();
                    server        = null;
                    IsTransfering = false;
                    StartServer();
                    if (File != null)
                    {
                        File.CloseFile();
                    }
                    OnTransferFinished();
                    return;
                }
                else if (receivedData[0] == (byte)Functions.Aborted)
                {
                    server.CloseServer();
                    server        = null;
                    IsTransfering = false;
                    StartServer();
                    if (File != null)
                    {
                        File.CloseFile();
                    }
                    if (OnTransferAborted != null)
                    {
                        OnTransferAborted();
                    }
                    return;
                }
                else
                {
                    Debug.WriteLine("ReceivingCoreFcn :function byte was wrong:");
                    break;
                }
            }
            File.CloseFile();
            if (!IsTransferEnabled)
            {
                byte[] abortData = PrepareAbortMessage();
                server.SendDataToClient(abortData);
                break;
            }
        }
        if (server != null)
        {
            server.GetData();
            if (OnTransferFinished != null)
            {
                OnTransferFinished();
            }
            server.CloseServer();
            server = null;
        }
        IsTransfering = false;
        StartServer();
    }
Пример #3
0
    private static void SendingCoreFcn()
    {
        lock (Lck_TransferMetrics)
        {
            _transferMetrics.CountOfFiles   = FilePaths.Length;
            _transferMetrics.TotalBytesSent = 0;
            _transferMetrics.TotalDataSent  = 0;
        }
        Stopwatch watch = Stopwatch.StartNew();

        IsTransfering = true;
        for (int i = 0; i < FilePaths.Length; i++)
        {
            SendFileInformation(i);
            if (!WaitforReceiverToBeReady())
            {
                Debug.WriteLine("receiver sent not ready");
                continue;
            }
            File = new FileOperations();
            File.Init(FilePaths[i], FileOperations.TransferMode.Send);
            CurrentFile.FilePath        = File.FilePath;
            CurrentFile.FileName        = File.FileName;
            CurrentFile.FileSize        = File.FileSize;
            CurrentFile.FileSizeAsBytes = File.FileSizeAsBytes;
            CurrentFile.SizeUnit        = File.FileSizeUnit;
            lock (Lck_TransferMetrics)
            {
                _transferMetrics.CurrentFile        = CurrentFile;
                _transferMetrics.IndexOfCurrentFile = i + 1;
            }
            long   byteCounter       = 0;
            long   totalBytesRead    = 0;
            int    numberOfBytesRead = 0;
            byte[] buffer;

            watch.Restart();
            while (IsTransferEnabled)
            {
                File.FileReadAtByteIndex(totalBytesRead, out numberOfBytesRead, out buffer, chunkSize: BufferSize * 4, functionByte: (byte)Functions.TransferMode);
                if (numberOfBytesRead == 0)
                {
                    UpdateMetrics(watch, byteCounter);
                    watch.Restart();
                    break;
                }
                client.SendDataServer(buffer);
                totalBytesRead += numberOfBytesRead;
                byteCounter    += numberOfBytesRead;
                if (!CheckAck(Functions.TransferMode))
                {
                    client.DisconnectFromServer();
                    client = null;
                    server.CloseServer();
                    server = null;
                    StartServer();
                    if (File != null)
                    {
                        File.CloseFile();
                    }
                    return;
                }
                if (watch.Elapsed.TotalSeconds >= 0.5)
                {
                    UpdateMetrics(watch, byteCounter);
                    byteCounter = 0;
                    watch.Restart();
                }
                if (totalBytesRead == File.FileSizeAsBytes)
                {
                    UpdateMetrics(watch, byteCounter);
                    watch.Restart();
                    break;
                }
            }
            File.CloseFile();
            if (!IsTransferEnabled)
            {
                byte[] abortData = PrepareAbortMessage();
                client.SendDataServer(abortData);
                break;
            }
            byte[] endBytes = new byte[5];
            endBytes[0] = (byte)Functions.EndofFileTransfer;
            client.SendDataServer(endBytes);
            CheckAck(Functions.EndofFileTransfer);
        }
        IsTransfering = false;
        SendLastFrame();
        if (OnTransferFinished != null)
        {
            OnTransferFinished();
        }
        client.DisconnectFromServer();
        client = null;
        if (server != null)
        {
            ;
        }
        server.CloseServer();
        server = null;
        StartServer();
    }