ychatu56.pas

来自「Yahoo Messenger for Mobile」· PAS 代码 · 共 270 行

PAS
270
字号
unit YchatU56;

interface

uses
  Windows, Messages, SysUtils,  Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, DBSock, ExtCtrls, ScktComp, FileCtrl, CPanel,
  DynamicSkinForm;


Type FTDownload = Class (TThread)
  Br: Integer;
  S,HttpStr,HttpGrabData,Port,Server: String;
  Host,Url,ExtendedInfo,FileN,User,Data: String;
  AL: Longint;
    Buffer: Array [0..18024] of Char;
  Socket: TDCBSock;
  F: File;
  Buf: Array[0..18024] of Char;
  Procedure Execute; Override;
  Procedure OnDisconnect;
  Constructor Create(Shost,SFileN: String);
End;

type
  TForm52 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ListBox1DblClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure Panel3DblClick(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
   Fn,ThierIP,UserN: String;
    { Public declarations }
  end;

var
  Form52: TForm52;
  FStage: Integer;
  FileTCount: Integer;

implementation

uses YchatU1, YchatU46;

{$R *.dfm}



procedure TForm52.FormCreate(Sender: TObject);
begin
 If DirectoryExists(Path+'Downloads')=False Then
  CreateDir(Path+'Downloads');
  Label3.Caption:='Saving To: '+Path+'Downloads';
end;

procedure TForm52.Button3Click(Sender: TObject);
begin
 If Edit1.Visible=True Then
  Begin
   If Trim(Edit2.Text)<>'' Then
     ThierIP:=Edit2.Text;
    //Edit1.Text:=Trim(ThierIP);
   End;
 If Pos(',',ThierIP)>0 Then
  Delete(ThierIP,1,Pos(',',ThierIP));
 ThierIP:=Trim(ThierIP); 
 ClientSocket1.Active:=False;
 ClientSocket1.Port:=8990;
 ClientSocket1.Host:=Form52.ThierIP;
 ClientSocket1.Active:=True;
end;

procedure TForm52.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 Edit1.Text:='Contact Made!';
 ListBox1.Clear;
 Socket.SendText('LST'+#$EA);
end;

procedure TForm52.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
 Var
   S: String;
begin
 Edit1.Text:='Reading In FileShare Data...';
 S:=Socket.ReceiveText;
 ListBox1.Items.Text:=ListBox1.Items.Text+S;
end;

procedure TForm52.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 Edit1.Text:='Finished Reading In FileShare Data!';
 Button2.Enabled:=True;
end;

procedure TForm52.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
 Edit1.Text:='Error Connecting To Remote Machine: '+IntToStr(ErrorCode);
 ErrorCode:=0;
end;

procedure TForm52.ListBox1DblClick(Sender: TObject);
begin
 FN:=HighLightedFile;
 Edit1.Text:='Attempting to download '+FN;
 FTDownload.Create(Form52.thierIP,FN);
{ ClientSocket2.Active:=False;
 ClientSocket2.Port:=8990;
 ClientSocket2.Host:=Form52.ThierIP;
 ClientSocket2.Active:=True;}
end;

procedure TForm52.Button2Click(Sender: TObject);
begin
 Button4.Enabled:=True;
 FN:=HighLightedFile;
 Edit1.Text:='Attempting to download '+FN;
 FTDownload.Create(Form52.thierIP,FN);
 
{ ClientSocket2.Active:=False;
 ClientSocket2.Port:=8990;
 ClientSocket2.Host:=Form52.ThierIP;
 ClientSocket2.Active:=True;}
end;

constructor FTDownload.Create(Shost,SFileN: String);
begin
   Form52.Button4.Enabled:=True;
   StopDownloads:=False;
   FileN:=SfileN;
   Host:=Shost;
   Inherited Create(false);
end;

procedure FTDownload.Execute;
Var
  BB,N,L2: Integer;
  KperS,Stats,Tmp: String;
  TempBuff: Array[0..18024] Of Char;
begin
 Data:='';
 Socket:=TDCBSock.Create(nil);
 Socket.BlockMode:=BmBlocking;
 FileTCount:=1;
 Form52.Timer1.Enabled:=True;
 TL:=0;
 FStage:=1;
 System.Assign(F,Path+'Downloads\'+FileN);
 System.Rewrite(F,1);
 Form52.Edit1.Text:='Connected attempting to download '+FileN;

 Socket.RemoteHost:=Host;
 Socket.RemotePort:='8990';
 HttpStr:='FT'+#$EA+FileN+#$EA;

 Socket.Connect;
 Sleep(40);
 Fstage:=1;
 If Socket.Connected=True Then
  Try
    Socket.Sendln(HttpStr);
    Data:='';
     While (Socket.WaitForData(20000)) And (StopDownloads=False) Do
      Begin
        // Br:=Socket.PeekBuf(Buf,SizeOf(Buf));
         Br:=Socket.ReceiveBuf(Buf,SizeOf(Buf));
         TL:=Socket.BytesReceived;
     //    Inc(TL,Br);
       //  Sleep(30);
          ///////////

        If FStage=2 Then
         Begin
         Form52.ProgressBar1.Position:=TL Div 1024;
         KperS:=FloatToStr((Tl/FileTCount)/1024);
         KperS:=Copy(KperS,1,Pos('.',KperS)+2);
         form52.label4.Caption:='Downloaded: '+IntToStr(TL)+' of '+IntToStr(AL)+' '+KperS+'K/s';
         If BR>0 Then
           BlockWrite(F,Buf,Br,Br);
         End;

      If FStage=1 Then
        Begin
        Stats:=Buf;
         BB:=Pos(#$EA+#$AE,Stats);
         Delete(Stats,1,pos(#$EA,Stats));
         Tmp:=Copy(Stats,1,pos(#$Ea,Stats)-1);
        Try
         AL:=StrToInt(Tmp);
         If AL>1024 Then
          Form52.ProgressBar1.Max:=AL Div 1024
           else
          Form52.ProgressBar1.Max:=AL;
         Except
         End;
         FillChar(TempBuff,SizeOf(TempBuff),0);
         Move(Buf[BB+1],TempBuff[0],Br-BB);
         KperS:=FloatToStr((Tl/FileTCount)/1024);
         KperS:=Copy(KperS,1,Pos('.',KperS)+2);
         form52.label4.Caption:='Downloaded: '+IntToStr(TL)+' of '+IntToStr(AL)+' '+KperS+'K/s';
         If BR>0 Then
           BlockWrite(F,TempBuff,(Br-BB)-1,Br);
         Fstage:=2;
         Form52.ProgressBar1.Position:=TL Div 1024;
        End;
          ///////////
        Application.ProcessMessages;
       End;
     OnDisconnect;
   Except
    Socket.Disconnect;
   End;
 Socket.Free;
 System.Close(F);
 TL:=0;
 Form52.Edit1.Text:='File Succesfully Downloaded!';
 Form52.Button4.Enabled:=False;
 Form52.Timer1.Enabled:=False;
end;

procedure FTDownload.OnDisconnect;
begin
end;


procedure TForm52.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Button1.Enabled:=True;
 Button2.Enabled:=False;
 Button3.Enabled:=False;
end;

procedure TForm52.Timer1Timer(Sender: TObject);
begin
 Inc(FileTCount);
end;

procedure TForm52.Panel3DblClick(Sender: TObject);
begin
 Edit2.Visible:=Not Edit2.Visible;
 Button3.Enabled:=True;
 Button1.Enabled:=False;
 Label3.Caption:='Override';
 Edit1.Text:=ThierIP;
end;

procedure TForm52.Button4Click(Sender: TObject);
begin
 StopDownloads:=True;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?