Beispiel #1
0
        /// <summary>
        /// Return the count of log files that were sent.
        /// </summary>
        /// <returns></returns>
        public static int SendFileCount()
        {
            int fileCount = 0;

            fileCount = SendFiles.Count();

            return(fileCount);
        }
        private void AcceptTcpClient(object param)
        {
            TcpClient client = (TcpClient)param;

            try
            {
                byte[]        bytes         = new byte[256];
                StringBuilder stringBuilder = new StringBuilder();
                NetworkStream networkStream = client.GetStream();

                int i;
                while ((i = networkStream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    stringBuilder.Append(Encoding.UTF8.GetString(bytes, 0, i));
                    if (i < bytes.Length)
                    {
                        break;
                    }
                }

                // Sending a list of files?
                try
                {
                    SendFiles sendFiles = Helper.XmlDeserialize <SendFiles>(stringBuilder.ToString());

                    if (UserWantToSendFiles != null)
                    {
                        AirServer.IPEndPointHolder ipEndPointHolder = new IPEndPointHolder();
                        ipEndPointHolder.IpEndPoint  = new IPEndPoint(IPAddress.Parse(sendFiles.UserAddress.Address), sendFiles.UserAddress.Port);
                        ipEndPointHolder.IsAvailable = true;

                        UserWantToSendFiles(sendFiles, ipEndPointHolder, client);
                    }
                    else
                    {
                        client.Close();
                    }
                }
                catch
                {
                }
            }
            catch
            {
                client.Close();
            }
        }
 public void ReceiveFilesFromAsync(IPEndPointHolder ipEndPoint, TcpClient client, SendFiles sendFiles, bool receive, object state,
                                   UserReceiveFilesProgress progress, UserReceiveFilesComplete complete)
 {
     new Thread(new ThreadStart(() =>
     {
         try
         {
             ReceiveFilesFrom(ipEndPoint, client, sendFiles, receive, state, progress);
             if (complete != null)
             {
                 complete(sendFiles, ipEndPoint, state, null);
             }
         }
         catch (Exception e)
         {
             if (complete != null)
             {
                 complete(sendFiles, ipEndPoint, state, e);
             }
         }
     })).Start();
 }
        public void ReceiveFilesFrom(IPEndPointHolder ipEndPoint, TcpClient client, SendFiles sendFiles, bool receive, object state,
                                     UserReceiveFilesProgress progress)
        {
            try
            {
                byte[]        bytes         = new byte[1024];
                NetworkStream networkStream = client.GetStream();
                {
                    byte[] buffer = Encoding.UTF8.GetBytes(Helper.XmlSerialize <SendFilesData>(new SendFilesData()
                    {
                        UserAddress = new UserAddress()
                        {
                            Address = Helper.LocalIPAddress(),
                            Port    = AirClient.DefaultPort
                        },
                        Status = receive ? "allowed" : "denied"
                    }));
                    networkStream.Write(buffer, 0, buffer.Length);
                }

                if (!receive)
                {
                    throw new OperationCanceledException();
                }

                int  i      = 0;
                long n      = 0;
                bool cancel = false;

                long totalSize = 0, receivedTotal = 0, receivedCurrent = 0;

                foreach (SendFile file in sendFiles.Files)
                {
                    totalSize += file.Size;
                }

                string folder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Air File Exchange\\";
                Directory.CreateDirectory(folder);

                foreach (SendFile file in sendFiles.Files)
                {
                    using (FileStream fileStream = new FileStream(folder + file.Name, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        fileStream.SetLength(0);

                        receivedCurrent = 0;

                        if (i - n > 0)
                        {
                            fileStream.Write(bytes, (int)n, i - (int)n);

                            receivedCurrent += i - (int)n;
                            receivedTotal   += i - (int)n;

                            if (progress != null)
                            {
                                progress(file, ipEndPoint, receivedCurrent, file.Size, receivedTotal, totalSize, state, out cancel);
                            }
                        }

                        while (!cancel && (i = networkStream.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            n = file.Size - fileStream.Length;
                            if (i <= n)
                            {
                                n = i;
                            }
                            fileStream.Write(bytes, 0, (int)n);

                            receivedCurrent += n;
                            receivedTotal   += n;

                            if (progress != null)
                            {
                                progress(file, ipEndPoint, receivedCurrent, file.Size, receivedTotal, totalSize, state, out cancel);
                            }

                            if (file.Size == fileStream.Length)
                            {
                                break;
                            }
                        }
                    }
                    if (cancel)
                    {
                        throw new OperationCanceledException();
                    }
                }
                if (totalSize > receivedTotal)
                {
                    throw new OperationCanceledException();
                }
            }
            finally
            {
                client.Close();
            }
        }
        public void SendFilesTo(IPAddress ipAddress, string[] files, object state, SendFilesProgress progress)
        {
            SendFiles sendFiles = new SendFiles();

            sendFiles.Count       = files.Length;
            sendFiles.UserAddress = new UserAddress()
            {
                Address = Helper.LocalIPAddress(), Port = DefaultPort
            };
            sendFiles.Size = 0;

            long totalSize = 0, sentTotal = 0, sentCurrent = 0;

            foreach (string file in files)
            {
                FileInfo fileInfo = new FileInfo(file);
                sendFiles.Files.Add(new SendFile()
                {
                    Name = fileInfo.Name,
                    Size = fileInfo.Length
                });

                sendFiles.Size += fileInfo.Length / 1024;
                totalSize      += fileInfo.Length;
            }

            using (TcpClient tcpClient = new TcpClient())
            {
                tcpClient.Connect(ipAddress, DefaultPort);

                byte[] buffer = Encoding.UTF8.GetBytes(Helper.XmlSerialize <SendFiles>(sendFiles));

                NetworkStream networkStream = tcpClient.GetStream();
                networkStream.Write(buffer, 0, buffer.Length);

                try
                {
                    byte[]        bytes         = new byte[1024];
                    StringBuilder stringBuilder = new StringBuilder();

                    int i;
                    while ((i = networkStream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        stringBuilder.Append(Encoding.UTF8.GetString(bytes, 0, i));
                        if (i < bytes.Length)
                        {
                            break;
                        }
                    }

                    // Sending files?
                    try
                    {
                        SendFilesData sendFilesData = Helper.XmlDeserialize <SendFilesData>(stringBuilder.ToString());

                        if ("allowed".Equals(sendFilesData.Status))
                        {
                            bool cancel = false;

                            foreach (string file in files)
                            {
                                // not open a file from user's desktop directory ???
                                using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
                                {
                                    sentCurrent = 0;

                                    while (!cancel && (i = fileStream.Read(bytes, 0, bytes.Length)) != 0)
                                    {
                                        networkStream.Write(bytes, 0, i);

                                        sentCurrent += i;
                                        sentTotal   += i;

                                        if (progress != null)
                                        {
                                            progress(file, ipAddress, sentCurrent, fileStream.Length, sentTotal, totalSize, state, out cancel);
                                        }
                                    }
                                }
                                if (cancel)
                                {
                                    throw new OperationCanceledException();
                                }
                            }
                        }
                        else
                        {
                            throw new AirDeniedException();
                        }
                    }
                    finally
                    {
                    }
                }
                finally
                {
                }
            }
        }
 private void linkLabel_sendFiles_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 {
     SendFiles sendFiles = new SendFiles();
     sendFiles.Show();
 }