AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Jabber per dorXMPPClient
Thema durchsuchen
Ansicht
Themen-Optionen

Jabber per dorXMPPClient

Ein Thema von CCRDude · begonnen am 17. Mai 2013
Antwort Antwort
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#1

Jabber per dorXMPPClient

  Alt 17. Mai 2013, 12:08
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 DelphiOnRails gefunden (einzige Abhängigkeit: superobject). Inklusive superobject per git ausgecheckt, losgelegt...

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:
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;
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.

Hat jemand schon mit dem Teil gearbeitet und es hinbekommen, über Events jeweils zum richtigen Zeitpunkt zu agieren?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz