| Autor |
Beitrag |
Waterball
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 24.02.09 09:07
Hallo...
ich sitze jetzt seid Stunden vor dem problem das ich mit Indy keine Dateien empfangen oder senden kann.
Delphi-Quelltext 1:
| IdIRC1.SendCmd('PRIVMSG '+ANick+' :'+#1+'DCC ACCEPT '+AFileName+' '+LongIP(IP)+' '+APort+' '+AFileSize+#1); |
Selbst damit, merkt "mIRC" nicht das ich den empfang der Datei möchte.
Ich habe schon versucht VIA IdTCPClient es zu realisieren, leider bin ich auch daran gescheitert...
Hat vllt jemand eine Idee...? oder vllt sogar ein Beispielt...?
Ich wäre euch sehr verbunden...
MfG
Waterball
Moderiert von Narses: Highlight- durch Delphi-Tags ersetzt
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 24.02.09 11:57
Wo hast du denn den Aufbau, den du da sendest, her? Sicher, dass dieser korrekt ist?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Waterball 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 24.02.09 19:00
Das habe ich in einer IRC Wiki gefunden....
Und ja, soweit ich es sehen konnte war dieser Korrekt. Habe auch ein paar OpenSource Programme gefunden die funktionieren und wo dieser Teil auch klappt...
Soweit klappt alles... mein Programm merkt das jemand nen DCC senden will...
Aber sobald ich empfange das es jemand machen möchte, laggt das programm ein wenig. Aber passieren tut nichts
MfG
Waterball
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 24.02.09 20:09
Waterball hat folgendes geschrieben : | Soweit klappt alles... mein Programm merkt das jemand nen DCC senden will...
Aber sobald ich empfange das es jemand machen möchte, laggt das programm ein wenig. Aber passieren tut nichts  |
Was soll denn auch passieren? Mit obigem Quellcode sagst du doch nur, dass du die Datei akzeptierst.. aber abspeichern o.ä. tust du die mit dieser einen Zeile wohl nicht.
Wo hast du den Code überhaupt stehen?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Waterball 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 24.02.09 21:05
Den Code habe ich im teil, wo Indy merkt, das eine Datei ankommen möchte...
Aber nicht einmal das akzeptieren geht... die gegenseite bekommt nicht mit, das der Datei empfang stattfinden soll...
mfg
Waterball
|
|
DennisHB
Hält's aus hier
Beiträge: 5
Win XP
D6
|
Verfasst: Do 05.03.09 00:15
Moin,
stand vor dem selben Problem...
hab darauf hin nen kleinen Thread zusammen gefrickelt der zumindest bei mir local (Server:InspiRCd + Sender:mIRC) funktioniert (Empfänger:Indy 9)
online ist das ganze noch nicht getestet... da ich an einigen stellen noch zu tun habe und ich keinem zumuten möchte nen "defekten" IRC-Client auf seinem Server zu haben.
Das ganze ist eher Beta, wenn nicht Alpha... aber ich denke es gibt nen kleinen Gedankenschub in die richtige Richtung.
Aufruf:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ClientDCCSend(Sender: TObject; ANick, AIp, APort, AFileName, AFileSize: string); var reciveThread : TmyIRCdccReceive; begin ... reciveThread := TmyIRCdccReceive.Create(AIp, APort, AFileName, AFileSize); reciveThread.DownloadDir := 'D:\Downloads\'; reciveThread.FreeOnTerminate := true; reciveThread.OnConnected := ClientConnect; reciveThread.OnDisconnected := ClientDisconnected; reciveThread.OnStatus := ClientStatus; reciveThread.OnWork := tcpWork; reciveThread.OnWorkBegin := tcpWorkBegin; reciveThread.OnWorkEnd := tcpWorkEnd;
reciveThread.Resume; end; |
Edit : hmm Dateianhang mag mich nicht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190:
| unit threadMyIRCdccReceive;
interface
uses IdTCPClient, IdComponent,
Classes, SysUtils;
type TmyIRCdccReceive = class(TThread) private tcp: TIdTCPClient; FDownloadDir: string; FFileName: string; FExpectedFileSize: Int64;
fTCPStatus: TIDStatus; fTCPStatusText: string; fTCPWorkMode: TWorkMode; fTCPWorkCount: Integer; fTCPWorkCountMax: Integer;
FOnWorkBegin: TWorkBeginEvent; FOnWorkEnd: TWorkEndEvent; FOnWork: TWorkEvent; FOnStatus: TIdStatusEvent; FOnDisconnected: TNotifyEvent; FOnConnected: TNotifyEvent;
procedure SetDownloadDir(const Value: string);
procedure DoTCPConnected(Sender: TObject); procedure DoTCPDisconnected(Sender: TObject); procedure DoTCPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); procedure DoTCPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); procedure DoTCPWorkEnd(Sender: TObject; AWorkMode: TWorkMode); procedure DoTCPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); protected procedure Execute; override;
procedure syncTCPConnect; procedure syncTCPDisconnect; procedure syncTCPStatus; procedure syncTCPWork; procedure syncTCPWorkBegin; procedure syncTCPWorkEnd; public
property DownloadDir: string read FDownloadDir write SetDownloadDir; property FileName: string read FFileName write FFileName;
property OnConnected: TNotifyEvent read FOnConnected write FOnConnected; property OnDisconnected: TNotifyEvent read FOnDisconnected write FOnDisconnected; property OnStatus: TIdStatusEvent read FOnStatus write FOnStatus; property OnWork: TWorkEvent read FOnWork write FOnWork; property OnWorkBegin: TWorkBeginEvent read FOnWorkBegin write FOnWorkBegin; property OnWorkEnd: TWorkEndEvent read FOnWorkEnd write FOnWorkEnd;
constructor Create(AIp, APort, AFileName, AFileSize: string); end;
implementation
constructor TmyIRCdccReceive.Create(AIp, APort, AFileName, AFileSize: string); begin inherited Create(true);
FExpectedFileSize := StrToInt(AFileSize);
tcp := TidTCPClient.Create(nil); tcp.Host := AIp; tcp.Port := StrToInt(APort); tcp.OnConnected := DoTCPConnected; tcp.OnDisconnected := DoTCPDisconnected; tcp.OnWork := DoTCPWork; tcp.OnWorkBegin := DoTCPWorkBegin; tcp.OnWorkEnd := DoTCPWorkEnd; tcp.OnStatus := DoTCPStatus;
FFileName := AFileName; end;
procedure TmyIRCdccReceive.DoTCPConnected(Sender: TObject); begin Synchronize(syncTCPConnect); end;
procedure TmyIRCdccReceive.DoTCPDisconnected(Sender: TObject); begin Synchronize(syncTCPDisconnect); end;
procedure TmyIRCdccReceive.DoTCPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin fTCPStatus := AStatus; fTCPStatusText := AStatusText; Synchronize(syncTCPStatus); end;
procedure TmyIRCdccReceive.DoTCPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin fTCPWorkMode := AWorkMode; fTCPWorkCount := AWorkCount; Synchronize(syncTCPWork); end;
procedure TmyIRCdccReceive.DoTCPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin fTCPWorkMode := AWorkMode; fTCPWorkCountMax := AWorkCountMax; Synchronize(syncTCPWorkBegin); end;
procedure TmyIRCdccReceive.DoTCPWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin fTCPWorkMode := AWorkMode; Synchronize(syncTCPWorkEnd); end;
procedure TmyIRCdccReceive.Execute; var AFileStream : TFileStream; streamSize : Int64; begin AFileStream := TFileStream.Create(FFileName, fmCreate); tcp.Connect(); streamSize := 0; tcp.ReadStream(AFileStream, FExpectedFileSize, false); tcp.Disconnect; AFileStream.Free; end;
procedure TmyIRCdccReceive.SetDownloadDir(const Value: string); begin FDownloadDir := Value; FFileName := ExtractFilePath(FDownloadDir) + ExtractFileName(FFileName); end;
procedure TmyIRCdccReceive.syncTCPConnect; begin if assigned(FOnConnected) then begin FOnConnected(tcp); end; end;
procedure TmyIRCdccReceive.syncTCPDisconnect; begin if assigned(FOnDisconnected) then begin FOnDisconnected(tcp); end; end;
procedure TmyIRCdccReceive.syncTCPStatus; begin if assigned(FOnStatus) then begin FOnStatus(tcp, fTCPStatus, fTCPStatusText); end; end;
procedure TmyIRCdccReceive.syncTCPWork; begin if assigned(FOnWork) then begin FOnWork(tcp, fTCPWorkMode, fTCPWorkCount); end; end;
procedure TmyIRCdccReceive.syncTCPWorkBegin; begin if assigned(FOnWorkBegin) then begin FOnWorkBegin(tcp, fTCPWorkMode, fTCPWorkCountMax); end; end;
procedure TmyIRCdccReceive.syncTCPWorkEnd; begin if assigned(FOnWorkEnd) then begin FOnWorkEnd(tcp, fTCPWorkMode); end; end;
end. |
|
|
|