コード例 #1
0
        static void Main()
        {
            Thread listenThread = new Thread(new ThreadStart(TcpServer.ListenRequest)); //созадем новый поток отдельно для получения

            listenThread.IsBackground = true;
            listenThread.Start();
            //Dain();
            var client = new TcpFileClient("192.168.100.10");

            client.SendFileRequest("D:\\2\\4.txt|E:\\1.txt");

            //для обратного
            var ans = RequestInteractivity.SendRequst(ip куда, RequestTipe.GetFileFromMe, "путь для загрузки|путь для сохранения");
            //если нет то поменяешь в классе Request в функции DoResend там увидешь
        }
コード例 #2
0
        private MenuItem CreateDirectoryNodeForLocal(object direct)
        {
            ClassAboutFilesAdding directoryInfo = (ClassAboutFilesAdding)direct;

            string ip_sender = "";

            if (directoryInfo.Sender == "Этот компьютер")
            {
                ip_sender = "127.0.0.1";
            }
            else
            {
                ip_sender = directoryInfo.Sender;
            }


            var ans = GetDirectoryLocal(directoryInfo.RootLocationFilesOrDirectory + directoryInfo.nameFile);

            if (ans != "False")
            {
                var files = ans.Split('\n');
                files[files.Length - 1] = null;

                object papka_ = null;
                System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(
                                                                         () =>
                {
                    WpfControlLibrary3.UserControl1 papka = new WpfControlLibrary3.UserControl1();

                    papka.Ip_From       = directoryInfo.Sender;
                    papka.Ip_To         = directoryInfo.Receiver;
                    papka.Path_From     = directoryInfo.RootLocationFilesOrDirectory + directoryInfo.nameFile;
                    papka.Path_To       = directoryInfo.RemoteLocationFilesOrDirectory + directoryInfo.nameFile;
                    papka.IsHeightValue = files.Length - 1;
                    if (sbros != null)
                    {
                        WpfControlLibrary3.UserControl1 tyc = (WpfControlLibrary3.UserControl1)sbros;
                        papka.OnCompleteTransmit           += tyc.ChangedvalueForProgressBar;
                    }
                    papka_ = papka;
                }));

                var directoryNode = new MenuItem()
                {
                    Title = directoryInfo.nameFile, flk = papka_
                };                                                                                  //создаем фалй или папку, пока что мы не знаем


                foreach (var file in files)
                {
                    if (file != null)
                    {
                        string name = "";

                        List <(string, string, string)> ps = CuttingMessages(file);

                        if (ps[0].Item3 == "-1")
                        {
                            name = ps[0].Item1 + "\\";
                        }
                        else
                        {
                            name = ps[0].Item1;
                        }

                        ClassAboutFilesAdding files1 = new ClassAboutFilesAdding() // создаём экземпляр класса
                        {
                            nameFile        = ps[0].Item1,                         // указываем имя файла
                            time            = ps[0].Item2,                         // указываем время создания
                            sizeFile        = ps[0].Item3,                         // указываем размер
                            LocalParentPath = directoryInfo.RootLocationFilesOrDirectory,
                            LocalParentName = directoryInfo.nameFile,
                            RootLocationFilesOrDirectory = directoryInfo.RootLocationFilesOrDirectory + directoryInfo.nameFile + "\\",
                            Receiver = directoryInfo.Receiver,
                            Sender   = directoryInfo.Sender,
                            RemoteLocationFilesOrDirectory = directoryInfo.RemoteLocationFilesOrDirectory + directoryInfo.nameFile + "\\",
                            RemoteParentName = directoryInfo.nameFile,
                            RemoteParentPath = directoryInfo.RemoteLocationFilesOrDirectory
                        };

                        if (ps[0].Item3 == "" || ps[0].Item3 == "-1")
                        {
                            sbros = directoryNode.flk;
                            directoryNode.Items.Add(CreateDirectoryNodeForLocal(files1));
                        }
                        else
                        {
                            System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(
                                                                                     () =>
                            {
                                UserControl1 flk = new UserControl1();
                                flk.Ip_From      = files1.Sender;
                                flk.Ip_To        = files1.Receiver;
                                flk.Path_From    = files1.RootLocationFilesOrDirectory;
                                flk.Path_To      = files1.RemoteLocationFilesOrDirectory;
                                WpfControlLibrary3.UserControl1 _papka = (WpfControlLibrary3.UserControl1)directoryNode.flk;
                                flk.OnCompleteTransmit += _papka.ChangedvalueForProgressBar;

                                if (files1.Sender != "Этот компьютер")   // Если отправитель удаленный пк
                                {
                                    var client = new TcpFileClient(files1.Sender);

                                    //Подписываемся на события
                                    client.SendingEvent += flk.ChangedvalueForProgressBar;
                                    client.FailEvent    += flk.SendingFailMessage;
                                    client.ReadyEvent   += flk.SendingSuccessfullyMessage;


                                    string path = flk.Path_To + files1.nameFile + "|" + flk.Path_From + files1.nameFile;
                                    client.SendFileRequest(path);

                                    //Thread receiveThread = new Thread(new ParameterizedThreadStart(client.SendFileRequest));
                                    //receiveThread.IsBackground = true;
                                    //receiveThread.Start(path);
                                }
                                else   // если отправитель текущий пк
                                {
                                    var client = new TcpFileClient(files1.Receiver);

                                    //Подписываемся на события
                                    client.SendingEvent += flk.ChangedvalueForProgressBar;
                                    client.FailEvent    += flk.SendingFailMessage;
                                    client.ReadyEvent   += flk.SendingSuccessfullyMessage;


                                    string path = flk.Path_To + files1.nameFile + "|" + flk.Path_From + files1.nameFile;
                                    client.SendFileRequest(path);
                                }

                                directoryNode.Items.Add(new MenuItem()
                                {
                                    Title = ps[0].Item1, flk = flk
                                });
                            }));
                        }
                    }
                }

                return(directoryNode);
            }
            else
            {
                return(null);
            }
        }
コード例 #3
0
        public async void _calculatingPathForTransmitting(object obj, TcpServer tcpServer)
        {
            ClassAboutFilesAdding[] filesForTransmit = (ClassAboutFilesAdding[])obj;
            for (int i = 0; i < filesForTransmit.Length; i++)
            {
                // Если отправитель текущий пк
                if (filesForTransmit[i].Sender == "Этот компьютер")
                {
                    // Если это файл
                    if (filesForTransmit[i].sizeFile != "")
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Render, new Action(
                                                                                 () =>
                        {
                            UserControl1 flk = new UserControl1();

                            flk.Name_     = filesForTransmit[i].nameFile;
                            flk.Ip_From   = filesForTransmit[i].Sender;
                            flk.Ip_To     = filesForTransmit[i].Receiver;
                            flk.Path_From = filesForTransmit[i].RootLocationFilesOrDirectory;
                            flk.Path_To   = filesForTransmit[i].RemoteLocationFilesOrDirectory;


                            window.tiktak.Items.Add(new MenuItem()
                            {
                                Title = filesForTransmit[i].nameFile, flk = flk
                            });



                            var client = new TcpFileClient(filesForTransmit[i].Receiver);

                            //Подписываемся на события
                            client.SendingEvent += flk.ChangedvalueForProgressBar;
                            client.FailEvent    += flk.SendingFailMessage;
                            client.ReadyEvent   += flk.SendingSuccessfullyMessage;

                            ////var ans = RequestInteractivity.SendRequst(ip_to, RequestTipe.GetFileFromMe, flk.Path_To + "|" + flk.Path_From);

                            string path = flk.Path_To + filesForTransmit[i].nameFile + "|" + flk.Path_From + filesForTransmit[i].nameFile;

                            client.SendFileRequestFromMe(path); // Запуск асинхронного метода


                            //var client = new TcpFileClient(filesForTransmit[i].Receiver);

                            //Подписываемся на события
                            //client.SendingEvent += flk.ChangedvalueForProgressBar;
                            //client.FailEvent += flk.SendingFailMessage;
                            //client.ReadyEvent += flk.SendingSuccessfullyMessage;

                            ////var ans = RequestInteractivity.SendRequst(ip_to, RequestTipe.GetFileFromMe, flk.Path_To + "|" + flk.Path_From);

                            //string path = flk.Path_To + filesForTransmit[i].nameFile + "|" + flk.Path_From + filesForTransmit[i].nameFile;
                            //Thread receiveThread = new Thread(new ParameterizedThreadStart(client.SendFileRequest));
                            //receiveThread.IsBackground = true;
                            //receiveThread.Start(path);
                        }));
                        // var ans = RequestInteractivity.SendRequst(filesForTransmit[i].Receiver, RequestTipe.GetFileFromMe, filesForTransmit[i].RemoteLocationFilesOrDirectory + filesForTransmit[i].nameFile + "|" + filesForTransmit[i].RootLocationFilesOrDirectory + filesForTransmit[i].nameFile);
                    }
                    //  Если это папка
                    else
                    {
                        await Task.Run(() => _calculatingForDirectory(filesForTransmit[i]));
                    }
                }
                // Если отправитель удаленный пк
                else
                {
                    // Если это файл
                    if (filesForTransmit[i].sizeFile != "")
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Render, new Action(
                                                                                 () =>
                        {
                            UserControl1 flk = new UserControl1();

                            flk.Name_     = filesForTransmit[i].nameFile;
                            flk.Ip_From   = filesForTransmit[i].Sender;
                            flk.Ip_To     = filesForTransmit[i].Receiver;
                            flk.Path_From = filesForTransmit[i].RootLocationFilesOrDirectory;
                            flk.Path_To   = filesForTransmit[i].RemoteLocationFilesOrDirectory;


                            window.tiktak.Items.Add(new MenuItem()
                            {
                                Title = filesForTransmit[i].nameFile, flk = flk
                            });


                            var client = new TcpFileClient(filesForTransmit[i].Sender);

                            //Подписываемся на события
                            client.SendingEvent += flk.ChangedvalueForProgressBar;
                            client.FailEvent    += flk.SendingFailMessage;
                            client.ReadyEvent   += flk.SendingSuccessfullyMessage;

                            ////var ans = RequestInteractivity.SendRequst(ip_to, RequestTipe.GetFileFromMe, flk.Path_To + "|" + flk.Path_From);

                            string path = flk.Path_To + filesForTransmit[i].nameFile + "|" + flk.Path_From + filesForTransmit[i].nameFile;

                            client.SendFileRequest(path); // Запуск асинхронного метода
                        }));
                    }
                    // Елси это папка
                    else
                    {
                        await Task.Run(() => _calculatingForDirectory(filesForTransmit[i]));
                    }
                }
            }
        }