예제 #1
0
        private void StartWriteFile(FileServerDLMessage msg)
        {
            Writing = true;
            offset  = 0;

            string[] words = msg.TargetFile.Split('\\');
            string   name  = words[words.Length - 1];

            CurrentFile = new FileInfo(msg.SaveDir + "\\" + name);
        }
예제 #2
0
 private void CloseFile()
 {
     Writing = false;
     SavedFile(this, new FileServerSavedFileEventArgs(CurrentFile.Name, CurrentFile.FullName, 1));
     CurrentFile = null;
     if (DownloadQueue.Count > 0)
     {
         CurrentMessage = DownloadQueue.Dequeue();
         SendToOne(MessageType.FilesAsk, CurrentMessage.TargetFile, CurrentMessage.Owner);
     }
 }
예제 #3
0
        private void btLeft_Click(object sender, EventArgs e)
        {
            DialogResult result;
            result = (DialogResult)(Program.main.Invoke(new Func<DialogResult>(folderDialog.ShowDialog)));

            if (result == DialogResult.OK)
            {
                string saveDir = folderDialog.SelectedPath;
                foreach (int i in this.listView1.CheckedIndices)
                {
                    string fullname = fullNames[i];
                    string[] items = fullname.Split();
                    string withoutLenght = String.Join(" ", items, 0, items.Length - 1);
                    long lenght = Convert.ToInt64(items[items.Length - 1]);

                    FileServerDLMessage msg = new FileServerDLMessage(withoutLenght, saveDir, Sender, lenght);
                    Program.serverPool.GetFile(msg);
                }
                this.Close();
            }
        }
예제 #4
0
        private void btLeft_Click(object sender, EventArgs e)
        {
            DialogResult result;

            result = (DialogResult)(Program.main.Invoke(new Func <DialogResult>(folderDialog.ShowDialog)));

            if (result == DialogResult.OK)
            {
                string saveDir = folderDialog.SelectedPath;
                foreach (int i in this.listView1.CheckedIndices)
                {
                    string   fullname      = fullNames[i];
                    string[] items         = fullname.Split();
                    string   withoutLenght = String.Join(" ", items, 0, items.Length - 1);
                    long     lenght        = Convert.ToInt64(items[items.Length - 1]);

                    FileServerDLMessage msg = new FileServerDLMessage(withoutLenght, saveDir, Sender, lenght);
                    Program.serverPool.GetFile(msg);
                }
                this.Close();
            }
        }
예제 #5
0
        public void GetFile(FileServerDLMessage msg)
        {
            if (Writing == true)
            {
                DownloadQueue.Enqueue(msg);
            }
            else
            {
                SendToOne(MessageType.FilesAsk, msg.TargetFile, msg.Owner);
                CurrentMessage = msg;
            }
            string[] items = msg.TargetFile.Split('\\');
            string   name  = items[items.Length - 1];

            if (SaveDirs.ContainsKey(name))
            {
                SaveDirs[name] = msg.SaveDir;
            }
            else
            {
                SaveDirs.Add(name, msg.SaveDir);
            }
        }
예제 #6
0
        public void GetFile(FileServerDLMessage msg)
        {
            if (Writing == true)
            {
                DownloadQueue.Enqueue(msg);
            }
            else
            {
                SendToOne(MessageType.FilesAsk, msg.TargetFile, msg.Owner);
                CurrentMessage = msg;
            }
            string[] items = msg.TargetFile.Split('\\');
            string name = items[items.Length - 1];

            if (SaveDirs.ContainsKey(name))
            {
                SaveDirs[name] = msg.SaveDir;
            }
            else
            {
                SaveDirs.Add(name, msg.SaveDir);
            }
        }
예제 #7
0
        public override void Receive(MessageType msgType, NetworkStream stream, IPAddress owner)
        {
            switch (msgType)
            {
            case MessageType.FilesTableAvailable:
            {
                byte[] count = new byte[4];
                stream.Read(count, 0, 4);
                int    size   = BitConverter.ToInt32(count, 0);
                byte[] buffer = new byte[size];
                stream.Read(buffer, 0, size);

                object filesData = SimpleFormatters.BytesToObject(buffer);
                RecievedFileTable(this, new ReceivedMessageEventArgs(MessageType.FilesTableAvailable, filesData, owner));
                break;
            }

            case MessageType.FilesAsk:
            {
                byte[] count = new byte[4];
                stream.Read(count, 0, 4);
                int    size   = BitConverter.ToInt32(count, 0);
                byte[] buffer = new byte[size];
                stream.Read(buffer, 0, size);

                string file             = (string)SimpleFormatters.BytesToObject(buffer);
                FileServerULMessage msg = new FileServerULMessage(file, owner);
                UploadQueue.Enqueue(msg);

                if (Sending == false)
                {
                    this.AfterConnectionClosed += new Action(StartUploadFile);
                }

                break;
            }

            case MessageType.FileDataFirst:
            {
                byte[] count = new byte[4];
                stream.Read(count, 0, 4);
                int    len    = BitConverter.ToInt32(count, 0);
                byte[] buffer = new byte[len];
                stream.Read(buffer, 0, len);
                char[] symbols = new char[len];
                symbols = System.Text.Encoding.Unicode.GetChars(buffer);
                string[] words  = new string(symbols).Split();
                string   name   = String.Join(" ", words, 0, words.Length - 1);
                long     lenght = Convert.ToInt64(words[words.Length - 1]);

                FileServerDLMessage thisFIle = new FileServerDLMessage(name, SaveDirs[name], owner, lenght);
                if (Writing == true)
                {
                    DownloadQueue.Enqueue(thisFIle);
                }
                else
                {
                    StartWriteFile(thisFIle);
                }
                break;
            }

            case MessageType.FileData:
            {
                byte[] count = new byte[4];
                stream.Read(count, 0, 4);
                int    len = BitConverter.ToInt32(count, 0);
                byte[] buffer = new byte[len];
                int    readed = 0, offset = 0, toRead = len;

                while (true)
                {
                    readed += stream.Read(buffer, offset, toRead);

                    if (readed < len)
                    {
                        offset = readed;
                        toRead = len - readed;
                    }
                    else
                    {
                        break;
                    }
                }

                AppendToFile(buffer);
                break;
            }

            case MessageType.FileDataLast:
            {
                CloseFile();
                break;
            }

            default:
            {
                break;
            }
            }
        }
예제 #8
0
        public override void Receive(MessageType msgType, NetworkStream stream, IPAddress owner)
        {
            switch (msgType)
            {
                case MessageType.FilesTableAvailable:
                    {
                        byte[] count = new byte[4];
                        stream.Read(count, 0, 4);
                        int size = BitConverter.ToInt32(count, 0);
                        byte[] buffer = new byte[size];
                        stream.Read(buffer, 0, size);

                        object filesData = SimpleFormatters.BytesToObject(buffer);
                        RecievedFileTable(this, new ReceivedMessageEventArgs(MessageType.FilesTableAvailable, filesData, owner));
                        break;
                    }
                case MessageType.FilesAsk:
                    {
                        byte[] count = new byte[4];
                        stream.Read(count, 0, 4);
                        int size = BitConverter.ToInt32(count, 0);
                        byte[] buffer = new byte[size];
                        stream.Read(buffer, 0, size);

                        string file = (string)SimpleFormatters.BytesToObject(buffer);
                        FileServerULMessage msg = new FileServerULMessage(file, owner);
                        UploadQueue.Enqueue(msg);

                        if (Sending == false)
                        {
                            this.AfterConnectionClosed += new Action(StartUploadFile);
                        }

                        break;
                    }
                case MessageType.FileDataFirst:
                    {
                        byte[] count = new byte[4];
                        stream.Read(count, 0, 4);
                        int len = BitConverter.ToInt32(count, 0);
                        byte[] buffer = new byte[len];
                        stream.Read(buffer, 0, len);
                        char[] symbols = new char[len];
                        symbols = System.Text.Encoding.Unicode.GetChars(buffer);
                        string[] words = new string(symbols).Split();
                        string name = String.Join(" ", words, 0, words.Length - 1);
                        long lenght = Convert.ToInt64(words[words.Length - 1]);

                        FileServerDLMessage thisFIle = new FileServerDLMessage(name, SaveDirs[name], owner, lenght);
                        if (Writing == true)
                        {
                            DownloadQueue.Enqueue(thisFIle);
                        }
                        else
                        {
                            StartWriteFile(thisFIle);
                        }
                        break;
                    }
                case MessageType.FileData:
                    {
                        byte[] count = new byte[4];
                        stream.Read(count, 0, 4);
                        int len = BitConverter.ToInt32(count, 0);
                        byte[] buffer = new byte[len];
                        int readed = 0, offset = 0, toRead = len;

                        while (true)
                        {
                            readed += stream.Read(buffer, offset, toRead);

                            if (readed < len)
                            {
                                offset = readed;
                                toRead = len - readed;
                            }
                            else
                            {
                                break;
                            }
                        }

                        AppendToFile(buffer);
                        break;
                    }
                case MessageType.FileDataLast:
                    {
                        CloseFile();
                        break;
                    }
                default:
                    {
                        break;
                    }
            }
        }
예제 #9
0
        private void StartWriteFile(FileServerDLMessage msg)
        {
            Writing = true;
            offset = 0;

            string[] words = msg.TargetFile.Split('\\');
            string name = words[words.Length - 1];
            CurrentFile = new FileInfo(msg.SaveDir + "\\" + name);
        }
예제 #10
0
 private void CloseFile()
 {
     Writing = false;
     SavedFile(this, new FileServerSavedFileEventArgs(CurrentFile.Name, CurrentFile.FullName, 1));
     CurrentFile = null;
     if (DownloadQueue.Count > 0)
     {
         CurrentMessage = DownloadQueue.Dequeue();
         SendToOne(MessageType.FilesAsk, CurrentMessage.TargetFile, CurrentMessage.Owner);
     }
 }