![]() |
Jabber per dorXMPPClient
Ich versuche aktuell, mich per Jabber zu verbinden, um Nachrichten abzusetzen. Bei der Suche nach "fertigen" Delphi-Komponenten habe ich eigentlich, neben kommerziellen, nur dorXMPPClient.pas aus
![]() ![]() Nun ist das noch sehr nahe am Protokoll implementiert, und dummerweise so voller anonymer Funktionen und gotos, dass ich mit meinem (Delphi XE) Debugger nicht wirklich durchsteige; einen Vergleich mit der XMPP-Doku macht das zudem auch schwierig. Und zu guter letzter kann die XE-Codeformatierung mit anonymen Methoden auch nicht so recht und der Linker steigt ständig bei diesen irgendwie mit Internal Errors aus, dann ist jeweils ein IDE-Neustart plus Rebuild angesagt. Aber genug gejammert, mein Stand jetzt:
Delphi-Quellcode:
Soweit funktioniert das, nur hat das dreifache Sleep natürlich der Teufel in Person da reingeschrieben, selbst wenn ich das Teil selber threaden sollte, mag ich das (unh auch kein WaitFor...) einfach nicht haben.
function TJabberNotificationTransmitter.SendNotification(ANotification: TNotification): boolean;
var jc: TXMPPClient; msg: IXMLNode; msgbody: IXMLNode; res: TXMPPResult; iq: IXMPPIQ; p: IXMPPPresence; begin Result := false; AllocConsole; jc := TXMPPClient.Create; try IXMPPClient(jc).OnReadyStateChange := DoJabberReadyState; IXMPPClient(jc).OnError := DoJabberError; IXMPPClient(jc).OnTrace := DoJabberTrace; IXMPPClient(jc).OnIQ := DoJabberIQ; IXMPPClient(jc).OnPresence := DoJabberPresence; IXMPPClient(jc).OnMessage := DoJabberMessage; IXMPPClient(jc).OnSynchronize := DoJabberSynchronize; res := IXMPPClient(jc).Open(FUsername, FPassword, 'NotificationSpreader', FHost, FPort, []); // xoPlaintextAuth repeat until IXMPPClient(jc).ReadyState = rsAuthenticated; Result := (res = xOK); if res = xOK then begin try Sleep(2000); p := TXMPPMessage.CreatePresence(ptNone, psAway, 'Sending notification...'); IXMPPClient(jc).SendXML(p); Sleep(2000); msg := TXMPPMessage.CreateMessage(mtChat, FRecipient, FUsername + '/NotificationSpreader', ''); msgbody := msg.Append('body'); msgbody.Text := ANotification.Title + #13#10 + ANotification.Text; IXMPPClient(jc).SendXML(msg); Sleep(2000); finally IXMPPClient(jc).Close; end; end; finally jc.Free; end; end; Hat jemand schon mit dem Teil gearbeitet und es hinbekommen, über Events jeweils zum richtigen Zeitpunkt zu agieren? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz