Autor Beitrag
Waterball
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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.
ausblenden 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 user profile iconNarses: Highlight- durch Delphi-Tags ersetzt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 24.02.09 20:09 
user profile iconWaterball hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
BeitragVerfasst: 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:
ausblenden 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
// Überprüfen ob "ANick" senden darf - Vorsicht
...
//--
     reciveThread := TmyIRCdccReceive.Create(AIp, APort, AFileName, AFileSize);
     reciveThread.DownloadDir := 'D:\Downloads\';
     reciveThread.FreeOnTerminate := true;
// Ab hier halt entsprechende EventHandler vorbereiten
     reciveThread.OnConnected := ClientConnect;
     reciveThread.OnDisconnected := ClientDisconnected; 
     reciveThread.OnStatus := ClientStatus;
     reciveThread.OnWork := tcpWork;
     reciveThread.OnWorkBegin := tcpWorkBegin;
     reciveThread.OnWorkEnd := tcpWorkEnd;
//--

     reciveThread.Resume; // Dem ganzen nun Leben einhauchen (starten)
end;


Edit : hmm Dateianhang mag mich nicht:

ausblenden volle Höhe Delphi-Quelltext
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
     // Indy Stuff
     IdTCPClient, IdComponent,

     Classes, SysUtils;

type
     TmyIRCdccReceive = class(TThread)
     private
          tcp: TIdTCPClient;
          FDownloadDir: string;
          FFileName: string;
          FExpectedFileSize: Int64;

          // Temp Sync Vars
          fTCPStatus: TIDStatus;
          fTCPStatusText: string;
          fTCPWorkMode: TWorkMode;
          fTCPWorkCount: Integer;
          fTCPWorkCountMax: Integer;

          // Internal EventNotifier
          FOnWorkBegin: TWorkBeginEvent;
          FOnWorkEnd: TWorkEndEvent;
          FOnWork: TWorkEvent;
          FOnStatus: TIdStatusEvent;
          FOnDisconnected: TNotifyEvent;
          FOnConnected: TNotifyEvent;

          procedure SetDownloadDir(const Value: string);

          // Internal Event Handler
          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;

          // Sync Procs to Notify Parent/Main Process
          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;

          // Event Notifier
          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
     // Create Inherited Suspended
     inherited Create(true);

     FExpectedFileSize := StrToInt(AFileSize);

     // Init TCP
     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.