199 lines
5.6 KiB
C#
199 lines
5.6 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Net.Sockets;
|
|
using System.Windows.Forms;
|
|
using DevExpress.XtraEditors;
|
|
using Server.Connection;
|
|
using Server.Helper;
|
|
|
|
namespace Server.Forms;
|
|
|
|
public class FormDownloadFile : XtraForm
|
|
{
|
|
public long FileSize;
|
|
|
|
private long BytesSent;
|
|
|
|
public string FullFileName;
|
|
|
|
public string ClientFullFileName;
|
|
|
|
private bool IsUpload;
|
|
|
|
public string DirPath;
|
|
|
|
private IContainer components;
|
|
|
|
public Timer timer1;
|
|
|
|
public Label labelsize;
|
|
|
|
private Label label3;
|
|
|
|
public Label labelfile;
|
|
|
|
public Label label1;
|
|
|
|
public FormMain F { get; set; }
|
|
|
|
internal Clients Client { get; set; }
|
|
|
|
public FormDownloadFile()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
if (FileSize >= int.MaxValue)
|
|
{
|
|
timer1.Stop();
|
|
MessageBox.Show("Don't support files larger than 2GB.");
|
|
Dispose();
|
|
}
|
|
else if (!IsUpload)
|
|
{
|
|
labelsize.Text = Methods.BytesToString(FileSize) + " \\ " + Methods.BytesToString(Client.BytesRecevied);
|
|
if (Client.BytesRecevied >= FileSize)
|
|
{
|
|
labelsize.Text = "Downloaded";
|
|
labelsize.ForeColor = Color.Green;
|
|
timer1.Stop();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
labelsize.Text = Methods.BytesToString(FileSize) + " \\ " + Methods.BytesToString(BytesSent);
|
|
if (BytesSent >= FileSize)
|
|
{
|
|
labelsize.Text = "Uploaded";
|
|
labelsize.ForeColor = Color.Green;
|
|
timer1.Stop();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SocketDownload_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
Client?.Disconnected();
|
|
timer1?.Dispose();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public void Send(object obj)
|
|
{
|
|
lock (Client.SendSync)
|
|
{
|
|
try
|
|
{
|
|
IsUpload = true;
|
|
byte[] obj2 = (byte[])obj;
|
|
byte[] bytes = BitConverter.GetBytes(obj2.Length);
|
|
Client.TcpClient.Poll(-1, SelectMode.SelectWrite);
|
|
Client.SslClient.Write(bytes, 0, bytes.Length);
|
|
using (MemoryStream memoryStream = new MemoryStream(obj2))
|
|
{
|
|
int num = 0;
|
|
memoryStream.Position = 0L;
|
|
byte[] array = new byte[50000];
|
|
while ((num = memoryStream.Read(array, 0, array.Length)) > 0)
|
|
{
|
|
Client.TcpClient.Poll(-1, SelectMode.SelectWrite);
|
|
Client.SslClient.Write(array, 0, num);
|
|
BytesSent += num;
|
|
}
|
|
}
|
|
Program.mainform.BeginInvoke((MethodInvoker)delegate
|
|
{
|
|
Close();
|
|
});
|
|
}
|
|
catch
|
|
{
|
|
Client?.Disconnected();
|
|
Program.mainform.BeginInvoke((MethodInvoker)delegate
|
|
{
|
|
labelsize.Text = "Error";
|
|
labelsize.ForeColor = Color.Red;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Server.Forms.FormDownloadFile));
|
|
this.label1 = new System.Windows.Forms.Label();
|
|
this.timer1 = new System.Windows.Forms.Timer(this.components);
|
|
this.labelsize = new System.Windows.Forms.Label();
|
|
this.label3 = new System.Windows.Forms.Label();
|
|
this.labelfile = new System.Windows.Forms.Label();
|
|
base.SuspendLayout();
|
|
this.label1.AutoSize = true;
|
|
this.label1.Location = new System.Drawing.Point(9, 73);
|
|
this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
|
this.label1.Name = "label1";
|
|
this.label1.Size = new System.Drawing.Size(76, 16);
|
|
this.label1.TabIndex = 0;
|
|
this.label1.Text = "Downloaad:";
|
|
this.timer1.Interval = 1000;
|
|
this.timer1.Tick += new System.EventHandler(timer1_Tick);
|
|
this.labelsize.AutoSize = true;
|
|
this.labelsize.Location = new System.Drawing.Point(80, 73);
|
|
this.labelsize.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
|
this.labelsize.Name = "labelsize";
|
|
this.labelsize.Size = new System.Drawing.Size(16, 16);
|
|
this.labelsize.TabIndex = 0;
|
|
this.labelsize.Text = "..";
|
|
this.label3.AutoSize = true;
|
|
this.label3.Location = new System.Drawing.Point(9, 31);
|
|
this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
|
this.label3.Name = "label3";
|
|
this.label3.Size = new System.Drawing.Size(33, 16);
|
|
this.label3.TabIndex = 0;
|
|
this.label3.Text = "File:";
|
|
this.labelfile.AutoSize = true;
|
|
this.labelfile.Location = new System.Drawing.Point(80, 31);
|
|
this.labelfile.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
|
this.labelfile.Name = "labelfile";
|
|
this.labelfile.Size = new System.Drawing.Size(16, 16);
|
|
this.labelfile.TabIndex = 0;
|
|
this.labelfile.Text = "..";
|
|
base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 16f);
|
|
base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
base.ClientSize = new System.Drawing.Size(478, 122);
|
|
base.Controls.Add(this.labelfile);
|
|
base.Controls.Add(this.labelsize);
|
|
base.Controls.Add(this.label3);
|
|
base.Controls.Add(this.label1);
|
|
base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
|
base.IconOptions.Icon = (System.Drawing.Icon)resources.GetObject("FormDownloadFile.IconOptions.Icon");
|
|
base.IconOptions.Image = (System.Drawing.Image)resources.GetObject("FormDownloadFile.IconOptions.Image");
|
|
base.Margin = new System.Windows.Forms.Padding(2);
|
|
base.MaximizeBox = false;
|
|
base.MinimizeBox = false;
|
|
base.Name = "FormDownloadFile";
|
|
this.Text = "Download";
|
|
base.FormClosed += new System.Windows.Forms.FormClosedEventHandler(SocketDownload_FormClosed);
|
|
base.ResumeLayout(false);
|
|
base.PerformLayout();
|
|
}
|
|
}
|