Ejemplo n.º 1
0
        public override bool Download(UpdaterFileProgress progress, UpdaterFileSave save, UpdaterFileComplete complete)
        {
            UpdateInfoStream parent = (UpdateInfoStream)this.Parent;

            parent.Send("Get\n");
            parent.Send(this.FileName.Replace('/', '\\') + "\n");
            string catch_ = parent.ReadLine(); // Catch/Catchpack

            uint size = parent.ReadUint();

            if (this.Parent.InfoVersion == 1 || this.Size == 0)
            {
                this.Parent.Parent.SendProgress(FOUpdaterProgress.FileMaximum, size);
            }

            byte[] data = new byte[size];

            long lastPercent = 0;
            long readed      = 0;

            while (readed != size)
            {
                if (this.Parent.Parent.Cancelled)
                {
                    return(false);
                }

                if (parent.Client == null || !parent.Client.Connected)
                {
                    return(false);
                }

                int input = parent.Client.GetStream().ReadByte();
                if (input == -1)
                {
                    continue;
                }

                data[readed++] = (byte)input;
                long percent = (readed * 100) / size;
                if (percent > lastPercent)
                {
                    progress(this, readed, (long)size, (uint)percent);
                    lastPercent = percent;
                    Thread.Sleep(50);
                }
            }

            if (catch_ == "Catchpack" || this.Packed)
            {
                byte[] saveData = ZlibStream.UncompressBuffer(data);
                data = saveData;
            }

            save(this);
            File.WriteAllBytes(this.FileName, data);

            complete(this);
            return(true);
        }