Seite 1 von 3 123 LetzteLetzte
Zeige Ergebnis 1 bis 15 von 33

Thema: XMPP Klasse für C# in Verbindung mit C#

  1. #1
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard XMPP Klasse für C# in Verbindung mit C#

    Hallo Zusammen,

    da leider die RESTApi leider noch keine Rufsteuerung kann, muss ich auf die XMPP Schnittstelle zurückgreifen.
    Kennst jemand eine gute Klasse für C# mit der er in Verbindung mit Starface gute Erfahrungen gemacht hat?

    VG Thomas Lauer
    Thomas Lauer
    Geschäftsführer
    _____________________________
    Glöckler & Lauer GmbH & Co. Systemhaus KG
    Böttgerstrasse 1
    D-89231 Neu-Ulm

    Tel. +49 731 97401-0
    Fax +49 731 721243
    Lauer@glsh.net
    http://www.glsh.net

  2. #2
    STARFACE Crew
    Benutzerbild von TomAnson
    Registriert seit
    11.11.2014
    Ort
    Karlsruhe
    Beiträge
    1.216

    Standard

    Hallo,

    hast du dir diesen Thread schon angeschaut? Es könnte für dich nützlich sein.

    Viele Grüße

    TA
    STARFACE Quality Assurance

    Bug gefunden? Hier melden!
    Featurewunsch oder Verbesserungsvorschlag? Trage es in unserem Feature Request Portal ein!
    Unsere Knowledge-Base für STARFACE findet ihr hier!

  3. #3
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard

    Hallo Tom,

    ja kenne ich schon. Ich möchte jedoch unabhängig vom UCC Client sein.

    Viele Grüße
    Thomas

  4. #4
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    958

    Standard

    Hallo Thomas,

    unabhängig vom weltbesten UCC Client ? ;-)

    Dann schau Dir mal das Programmverzeichnis vom Client an. Daselbst findest Du die uci-all.net.dll, welche eine cross compiled UCI Client-Implementierung und Smack enthält. Damit kannst Du alles programmieren, was auch der Client mit dem Server anstellt. Aber beachte: Das ist nicht weiter dokumentiert und subject to change, da es eine interne Bibliothek ist. Wenn Du die UCI Doku kennst und dich über Smack schlau machst, kommst du damit weiter.

    Gruß Wolfgang

  5. #5
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard

    Hallo Wolfgang,

    gibt es irgendwie einen Ansatz? Für den Login? wir kommen da nicht weiter. Sonst ist die Idee super.

    VG Thomas
    Thomas Lauer
    Geschäftsführer
    _____________________________
    Glöckler & Lauer GmbH & Co. Systemhaus KG
    Böttgerstrasse 1
    D-89231 Neu-Ulm

    Tel. +49 731 97401-0
    Fax +49 731 721243
    Lauer@glsh.net
    http://www.glsh.net

  6. #6
    STARFACE Expert
    Benutzerbild von nucom
    Registriert seit
    11.12.2012
    Ort
    9443 Widnau
    Beiträge
    1.338

    Standard

    Hallo Thomas

    Aus meinem Alten Programm (Code eventuell veraltet)

    Code:
           public void ConnectSF()
            {          
                string restPath = string.Format("http://{0}/rest/", ServerIP);
                wrapper.Connect(restPath, Username, Password); //Zuvor definierter Wrapper (Je nachdem welche komponente bezogen wird)
                if (wrapper.IsLoggedIn)
                {
                    stat_lbl_Connection.Text = "Verbunden";
                }
            }
    MfG

    Fabian
    Modulhersteller aus der Schweiz
    __________________________________________________ ________
    STARFACE Excellence Partner: Info | Certified Module Creator Kontakt

  7. #7
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    958

    Standard

    Hallo Thomas,

    auf Basis der Client-Implementierung gibt es verschiedene Ansätze.

    Diese Varianten erfordern einen UCC Client mit angemeldetem Benutzer. Alle Aktionen werden im Kontext des angemeldeten Benutzers ausgeführt. Der UCC Client ist sichtbar und zeigt die Rufe auch an.
    Sie sind offiziell unterstützt und werden auch ggf. supported:
    • Wählen per Kommandozeile: StarfaceUcClient.exe /PHONENUMBER="42"
    • Wählen per Callto / phone / tel / sip URL: <a href="callto:+4972112345678">Ruf an via callto link</a><br>
    • TAPI
    • Verwendung der UccWrapper.dll und WCF TCP Binding


    Es gibt weitere Alternativen, die offiziell nicht unterstützt sind und auch nicht supported werden. Dies wäre ein Weg, wenn man partout eine andere UI haben möchte oder eine zentrale, serverbasierte Rufsteuerung für mehrere Benutzer implementieren will.
    • Verwendung der UccAPI.dll um eine alternative UI zu implementieren
    • Verwendung der UccAPI.dll im Headless-Modus um mehrere User parallel anzumelden. Dies verwende ich selbst für automatisierte Integrations-Tests. Ruf-Steuerung, Chat etc. ist aus einem Prozess heraus für mehrere Benutzer möglich.
    • Verwendung der uci-all.net.dll um direkt mit der cross-compiled (Java -> .NET) UCI zu arbeiten. Das wäre die hardcore Variante.


    Welches Schweinderl hätten S' denn gern?

    Gruß Wolfgang

  8. #8
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard

    Hallo Wolfgang,

    eigentlich wollten wir direkt mit dem XMPP Server kommunizieren. Leider haben wir hier sein ca. 10 Monaten ein Problem, dass auch schon beim Support [Call#1068692] liegt,
    dass der XMPP Server sehr spät Call Events (z.B. Hangup) sendet. da wir im Moment nicht an eine Lösung vom Support glauben, suchen wir einen anderen Weg.

    Wir sind im Moment an der UccAPI.dll (da undokumentiert, beisen wir uns durch - dotpeek sei dank).

    Super wäre kleine Beispiele in C#.

    Den Unterschied zwischen UccAPI.dll und der uci-all.net.dll habe ich leide rnicht kapiert.

    VG Thomas
    Thomas Lauer
    Geschäftsführer
    _____________________________
    Glöckler & Lauer GmbH & Co. Systemhaus KG
    Böttgerstrasse 1
    D-89231 Neu-Ulm

    Tel. +49 731 97401-0
    Fax +49 731 721243
    Lauer@glsh.net
    http://www.glsh.net

  9. #9
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard

    Hallo Fabian,

    wenn es dich nicht geben würde ;-). Super vielen Dank.
    Im Moment helfen wir uns mit dotpeek aus um zu verstehen was wo läuft.

    VG Thomas
    Thomas Lauer
    Geschäftsführer
    _____________________________
    Glöckler & Lauer GmbH & Co. Systemhaus KG
    Böttgerstrasse 1
    D-89231 Neu-Ulm

    Tel. +49 731 97401-0
    Fax +49 731 721243
    Lauer@glsh.net
    http://www.glsh.net

  10. #10
    STARFACE Expert
    Benutzerbild von nucom
    Registriert seit
    11.12.2012
    Ort
    9443 Widnau
    Beiträge
    1.338

    Standard

    Hallo Thomas

    Hier wäre sonst aus meinem alten Projekt den ganzen Ablauf für den Import:

    http://module.nucom.ch/forum/5780/Adressbook.rar

    Code:
    UccAddressbookClient.UccAddressbookWrapper m_addressbookWrapper = new UccAddressbookClient.UccAddressbookWrapper();//Wrapper definieren
    
            public void ConnectSF()
            {          
                string addressbookPath = string.Format("http://{0}/rest/", txt_SRVIP.Text);
                m_addressbookWrapper.Connect(addressbookPath, txt_Username.Text, txt_Passwort.Text);
                cmd_Connect.Enabled = !(m_addressbookWrapper.IsLoggedIn);
                if (m_addressbookWrapper.IsLoggedIn)
                {
                    cmd_Addr_Refresh.Enabled = true;
                    txt_Username.Enabled = false;
                    txt_Passwort.Enabled = false;
                    txt_SRVIP.Enabled = false;
                    stat_lbl_Connection.Text = "Verbunden";
                    m_addressbookWrapper.GetTagsAsync(OnTagsReceived, "DE");
                }
            }
    MfG

    Fabian
    Modulhersteller aus der Schweiz
    __________________________________________________ ________
    STARFACE Excellence Partner: Info | Certified Module Creator Kontakt

  11. #11
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    958

    Standard

    Hallo Thomas,

    Zitat Zitat von thomaslauer Beitrag anzeigen
    eigentlich wollten wir direkt mit dem XMPP Server kommunizieren. Leider haben wir hier sein ca. 10 Monaten ein Problem, dass auch schon beim Support [Call#1068692] liegt,
    dass der XMPP Server sehr spät Call Events (z.B. Hangup) sendet. da wir im Moment nicht an eine Lösung vom Support glauben, suchen wir einen anderen Weg.
    das Ticket habe ich zur Kenntnis genommen, da habe ich aber keine Aktien drin. Als Client konsumiere ich dieselben XMPP / UCI Events wie Du. Abgesehen von den optimierbaren Zustandsübergängen (insbesondere wenn Module im Spiel sind) kann ich nicht bestätigen, dass die Events allgemein zu spät kommen. In der Regel funktioniert dies. Andernfalls wären unsere Clients ebenso gestört. Falls bei Eurer Installation mit der bisherigen Implementierung die Events - warum auch immer - zu spät kommen, werden diese auch in einem .NET Client entsprechend spät aufschlagen. Oder wie verhält es sich damit?

    Zitat Zitat von thomaslauer Beitrag anzeigen
    Den Unterschied zwischen UccAPI.dll und der uci-all.net.dll habe ich leide rnicht kapiert.
    • uci-all.net.dll ist die cross compiled Java UCI. Da ist die UCI drin, Smack und noch ein paar Abhängigkeiten
    • UccSipPhone.dll enthält den SIP Stack inkl. managed wrapper
    • UccAPI.dll setzt auf diesen beiden auf und baut damit das Call Modell (Verknüpfung von UCI und SIP Calls) für den Client etc


    In der UccAPI.dll sieht der Login Code etwa so aus (unter Verwendung der uci-all.net.dll):

    Code:
    var xmppTransportFactory = new XmppUcpTransportFactory(applicationName, networkHost, uciPort, true);
    var proxyFactory = UciProxyFactory.createWithTransportFactory(xmppTransportFactory);
    m_proxy = proxyFactory.createUciProxy(loginId, PasswordEncryption.GetXmppSecret(loginId, m_connectionSettings.SecurePassword, m_serverIsUsingActiveDirectoryAuthentication));
    m_proxy.connectAsync();
    m_proxy.addConnectionEventListener(this);
    Wenn die Anmeldung erfolgreich ist, wird der Callback aufgerufen, in welchem Du Zugriff auf die weiteren UCI Interfaces holen kannst:

    Code:
          public void receiveConnectionState(bool newConnectionState)
          {
              m_proxy.subscribeEventsAsync(this, typeof(UciUserStateEvents));
              m_userStateRequests =(UciUserStateRequests) m_proxy.getRequests(typeof(UciUserStateRequests));
          }
    etc. Du musst in Deiner Klasse diverse Interfaces implementieren, damit Du die Events bekommst: UciConnectionEvents, UciUserStateEvents, UciSystemEvents, ...

    Das war die Hardcore-Variante.

    Gruß Wolfgang
    Geändert von Wolfgang (21.12.2017 um 10:11 Uhr)

  12. #12
    STARFACE User
    Benutzerbild von thomaslauer
    Registriert seit
    28.06.2016
    Beiträge
    77

    Standard

    Hallo Wolfgang,

    super vielen Dank, das hilft weiter.

    Bezüglich des XMPP komme ich nochmals in diesem Thread auf dich zu.

    VG Thomas
    Thomas Lauer
    Geschäftsführer
    _____________________________
    Glöckler & Lauer GmbH & Co. Systemhaus KG
    Böttgerstrasse 1
    D-89231 Neu-Ulm

    Tel. +49 731 97401-0
    Fax +49 731 721243
    Lauer@glsh.net
    http://www.glsh.net

  13. #13
    STARFACE Newbie
    Registriert seit
    22.05.2017
    Beiträge
    4

    Standard

    Hallo Wolfgang,

    wir haben jetzt mal einen Dump der Starface Anlagen Antworten gemacht, in dem man sehr schön sieht, wann was von der Starface zurückkam. Folgende XML-Sätze habe ich dazu an die XMPP Schnittstelle gesendet.


    <stream:stream to="${host}" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"><?xml version='1.0' encoding='UTF-8'?>

    <iq id="${shortid()}" type="get"><query xmlns="jabber:iq:auth"><username>uci-${user}</username></query></iq>

    <iq id="${shortid()}" type="set"><query xmlns="jabber:iq:auth"><username>uci-${user}</username><password>${password}</password><resource>StarfaceUcClient_v6.4.2.81-b83fabba-8dc8-470f-938e-ecb9015569a1</resource></query></iq>

    <iq id="${shortid()}" to="starface.xmpp.uci@${host}/STARFACE" from="uci-${user}@${host}/StarfaceUcClient_v6.4.2.81-b83fabba-8dc8-470f-938e-ecb9015569a1" type="set"><query xmlns='jabber:iq:rpc'><methodCall><methodName>ucp. v30.requests.connection.login</methodName></methodCall></query></iq>

    <iq id="${shortid()}" to="starface.xmpp.uci@${host}/STARFACE" from="uci-${user}@${host}/StarfaceUcClient_v6.4.2.81-b83fabba-8dc8-470f-938e-ecb9015569a1" type="set"><query xmlns='jabber:iq:rpc'><methodCall><methodName>ucp. v30.requests.service.subscribeEvents</methodName><params><param><value><string>ucp.v30.e vents.call</string></value></param></params></methodCall></query></iq>


    Die Platzhalter wurden selbstverständlich ersetzt. Den Mitschnitt der Antworten der Starface XMPP Schnittstelle sind als Datei im Anhang (log.txt). Zur Info: Der Anruf wurde direkt wieder aufgelegt. Die XML Dumps zeigen aber, dass nach 3 Minuten erst ein CONNECTED state gemeldet wird.

    Ich hoffe das hilft, den Sachverhalt zu verstehen. Der UC-Client zeigt die Stati in-time und korrekt an. Aber was mache ich falsch?

    Viele Grüße,
    Domink

  14. #14
    STARFACE Newbie
    Registriert seit
    25.01.2017
    Beiträge
    2

    Standard

    Hallo,

    wo bekomme ich die Klasse PasswordEncryption her?
    Wofür steht applicationName?

  15. #15
    STARFACE Crew
    Benutzerbild von Wolfgang
    Registriert seit
    18.02.2014
    Beiträge
    958

    Standard

    Zitat Zitat von lzi Beitrag anzeigen
    Hallo,

    wo bekomme ich die Klasse PasswordEncryption her?
    Wofür steht applicationName?
    Die Klasse PasswordEncryption ist intern. Die Funktion GetXmppSecret berechnet das zu übertragene Passwort / Secret gemäß den Regeln aus dem "Cheatsheet zum sicheren Login für UCI, Chat und Adressbuch.pdf". Siehe unter https://knowledge.starface.de/pages/...pageId=7864733

    Das zu übertragene Secret unterscheidet sich für die Use Cases "Active Directory Authentication" und "normale Starface Authentication".

    Der Application-Name ist ein Name für Deine Anwendung. Daraus wird die Resource für die Jabber ID Deines Clients gebildet.

    Gruß Wolfgang

Ähnliche Themen

  1. XMPP über Anlagenverbund
    Von Pascal10x im Forum STARFACE Einrichtung & Administration
    Antworten: 4
    Letzter Beitrag: 29.08.2013, 21:41
  2. XMPP Multiuser Chat
    Von hgiesenow im Forum STARFACE Einrichtung & Administration
    Antworten: 5
    Letzter Beitrag: 12.09.2012, 13:40
  3. WinClient und XMPP
    Von wuerzi im Forum STARFACE Einrichtung & Administration
    Antworten: 8
    Letzter Beitrag: 28.11.2008, 20:44

Lesezeichen

Forumregeln

  • Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
  • Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
  • Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
  • Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
  •