Tina: Vorgegebenes Applett (ganz) durch SVG ersetzen

Guten Tag,
um einige aktuelle Werte auszulesen habe ich die Idee den vorgebenen Kram durch eine reine eigene SVG Seite zu ersetzen. Die rein bedienungstechnische Lösung gelang es zu lösen, ebenfalls ist mir das Grundprinzip der 'getURL-Technik' bekannt und ich wende dieses anderenorts auch kräftig an. Leider nur versagts bei der nun in Angriff genommenen SPS-Komponente ohne Zusatzhardware.

Was aber geht (oder per Lieferzustand vorgeben ist) ist die Daten per http und webBrowser über Applets abzuholen und anzuzeigen. Das sieht als 'Screenshot' so aus, weiter weiß ich da nicht weil nur die Schnittstellen (Parameter) die 'PutApplet.class' anzuzapfen vorgeben sind, nirgends hingegen ersichtlich wird wo oder was diese ausführt, startet oder worauf die zugreift.

<body bgcolor="#00FF00">
     <div id="box1">
      <applet
      codebase ="../applets/"
      code ="xxx.PutAp.class"
 <param name="VARAREA1" value="0x82">
 <param name="VARBITOFFSET" value="4">
 <param name="EDIT" value="true">
      </applet>
(im kopierten Beispiel hatte ich die Namen Ablagepfade im Dateisystem 'verkürzt' um testweise nicht soviel tippen zu müssen)
Um da jetzt ranzukommen wäre meine einzige Idee der 'PutApplet.class'zu versuchen aus der SVG Anwendung heraus die (passenden) Parameter 'unterzuschieben' und zu hoffen das die dann antwortet ....
... der Aufbau der Parameter ist mir bekannt, also ich kann die Speicherbereiche wie gewünscht aufrufen.
Unbekannt ist mir aber (neben dem Manko das ich nicht weiß ob das überhaupt geht) wie ich den Parameteraufruf und die Verbindung zur 'PutApplet.class' in SVG beschreiben kann.
Da es hier einen ähnlichen Thread (der genau anders rum, und damit bei nicht funktioniert) benötige ich keinerlei graphische Komponenten aus dem Applett sondern nur die Daten (bspw. ein Byte) aufgrund derer ich dann meine eigene Graphik zusammenzaubern möchte.

Lieben Gruß
Tina

  1. Hallo Tina,

    <body bgcolor="#00FF00">
         <div id="box1">
          <applet
          codebase ="../applets/"
          code ="xxx.PutAp.class"
    <param name="VARAREA1" value="0x82">
    <param name="VARBITOFFSET" value="4">
    <param name="EDIT" value="true">
          </applet>
    (im kopierten Beispiel hatte ich die Namen Ablagepfade im Dateisystem 'verkürzt' um testweise nicht soviel tippen zu müssen)
    Um da jetzt ranzukommen wäre meine einzige Idee der 'PutApplet.class'zu versuchen aus der SVG Anwendung heraus die (passenden) Parameter 'unterzuschieben' und zu hoffen das die dann antwortet ....

    Ich kann hier die serverseitige Logik nicht erkennen, welche Daten ins SVG-Dokument liefern könnte. Wenn es eine solche gäbe, wäre ein XMLHttpRequest-Aufruf aus dem SVG-Kontext möglich (bzw. die alternative Nutzung der getURL-Technik für den ASV).

    Grüße,
    Thomas

    1. Hallo Thomas,
      um es etwas zu schachteln möchte ich mich bei dieser Gelegenheit erstmal eben bedanken für einerseits die vielen hilfreichen Antworten die ich hier im Forums(archiv) schon fand und dann, weil ich meine wohl nicht ganz falsch zu liegen, für die super Beispiele im codebook und handmade.code.
      An denen 'düse' ich immer lang und das Meiste klappt wunderbar !

      Diese Kiste(Server) die ich jetzt am Wickel habe besitzt jedoch einige Eigenarten, u.a. das in dem Webserver und zugeordnetem (einzig zugänglichem) Flash-Dateisystem keinerlei Programme oder Skripte zu starten sind. Als ich die gerade annähernd 'formulieren' wollte stieß ich im Handbuch auf ein bisher nicht wahrgenommes Appletbeispiel. Dort ist die Reihenfolge der Aufrufe veranschaulicht, ich muß es mal eben nachvollziehen vielleicht gelingts mir damit den Punkt zu finden wo ich dahingehend 'hinter dem XMLHTTPRequest' mit meiner weiteren Frage ansetzen kann. Hatte es per XMLHTTPRequest schon probiert, geht so aber nicht. Ich mess gleich mal eben mit Hilfe entdeckten 'TestApplets' aus wieweit ich überhaupt komme wenn ich die eine dort beschriebene Funktion direkt aufrufe - so ähnlich schaffte ich an anderer Stelle schon mal den Verbindungsaufbau 'umzuleiten'.

      Wenn ich das habe kann ich wenigstens etwas genauer beschreiben es nach der XMLHTTP-Verbindung weitergehen müßte und was da als nächstes fehlt.
      Wär nett wenn ich dann noch mal fragen darf,
      liebe Grüße
      Tina

    2. Hallo
      ich habe das mal 'auseinandergemessen' - zu erklären ist das aber fast garnicht. Um einigermaßen in die Richtung zu finden stelle ich mal eine Hardwarebeschreibung voran. Es handelt sich um SPS Ethernet-Kommunikationsprozessoren die als Erweiterungsbaugruppe angeschlosen es in zwei Ausführungen gibt:
      1.)  die 'einfachere' Variante mit Programmier & Datenschnittstelle
      2.) und das aufgebohrte Modell was zusätzlich aller Funktionen von 1 noch Webserver und FTP (sowie einigen Kleinkram) mitliefert.

      1 & 2 verhalten sich in allen gemeinsam vorhandenen 'Funktionen' identisch. So gibt es bei beiden die Möglichkeit über die Daten/Programmierschnittstelle über einen irgendwo im Netzwerk vorgeschalteten Webserver und darauf gestarteten passenden Programm die Daten jeweils auch auszulesen. Nachteil dabei: Die Programmierschnittstelle wäre dauerhaft blockiert.
      Bei der Webserver Variante ist dieses dann zudem 'doppeltgemoddelt' - allerdings kann in dem einzig zugängigen 'userspace' im Flashspeicher zum Webserver keinerlei Anwendung /Script gestartet, sondern nur Daten abgelegt werden.

      Als erste 'Stufe' ergab sich so bereits vor Längerem über ein per <object>-Tag in htm eingebundenes SVG eine cgi auf einem ausgelagerten Webserver zu starten welches die Daten ausliest und dann zurückgibt. Dieses Modell sieht stark verkürzt und 1:1 nach dem codebook-Beispiel so aus:

      <script type="text/javascript">
            <![CDATA[
      var svgdoc;
      function Init(evt)
      {
        svgdoc=evt.target.ownerDocument;
      }
      HoleDaten();
      function HoleDaten()
      {
        if(window.getURL)getURL("cgi-bin/su243.cgi",callback);
        else alert("Ohne diese Technik leider kein Erfolg!");
      }
      function callback(urlRequestStatus)
      {
        /*
          Rueckgabewerte des objectes urlRequestStatus:
          - urlRequestStatus.success;
          - urlRequestStatus.contentType;
          - urlRequestStatus.content;
        */
        var ausgabe;
       var slang;
        if(urlRequestStatus.success)
        {
          ausgabe=urlRequestStatus.content.split("|");
       slang=ausgabe[0];
          alert("Its make me"+slang+"-mal happier");

      setTimeout('HoleDaten()', 750);
      }
      }
            ]]>
          </script>

      Das funktioniert, im su243.cgi ist Bibliothek eincompiliert die notwendige Codierung leistet - die Variante 2 mit Webserver versucht sich dann daran in ihrer 'Werkseinstellung' Ähnliches per Applets zu lösen.

      Dabei greift das Applet jeweils den ähnlichen Ablauf auf wie die externen Bibliotheken - und, anders wie bisher gedacht, übernimmt es dabei auch die komplette (de)codirung zu übergebender Parameter. Es muß also nicht wie von mir zuerst gedacht nur ein array aus 6-Bytes übergeben werden, sondern zusätzlich aus diesem Array dann ein je nach Anwendungsfall passender 60 -x100Bytes langer Hex-String errechnet werden. Dieser wird dann von den internen 'Komponenten' geprüft, wenn richtig angenommen, der Rückgabewert geliefert und erst nach einer weiteren Bestätigung des Erhalts 'freigeben'.

      Insofern bleibt mir nur es zuerst auf meinem externen 'Kommunikationserver' nachzubauen. Dortige 'C'-Server habe ich schon und weiß wie die gehen. Mein Versuchsmodell ist auf port 1234 gestartet und rückt per telnet auch per Kommandozeile erwünschte gewünschte Daten (bspw. Bereich:0x82) 'heraus', das funktioniert also.

      Rausfinden müßte ich nun wie ich auf meinen Versuchsserver 'grapsvr' nun per XMLHTTPRequest zugreife ?????
      Mit der Zeile'getURL("grapsvr 1234 0x82",callback); (oder in diverser anderer Synthax probiert) gibt der nichts preis. Das muß irgendwie anders gehen.
      Auch weiß ich noch nicht wie es in den Verzeichnissen einzuordnen ist, das 'cgi/script' liegt ja immer im Bereich der vordefinierten Schnittstelle des Webservers (hier HTTPd) - adäquat der Appletfunktion ist das nun ja aber ja evtl. anders: Der Browser holt das html-SVG (<object>) zwar vom Webserver baut dann aber ja mit dem HTTPRequest zu dem Server an Port 1234 die Verbindung auf. Die Attribute stimmen (lt. 'Handbuch':alle readable)  - connected meldet der Sever auch (manchmal) noch aber dann kommt nichts mehr zurück.
      Da muß ich an dem Versuchserver noch etwas feilen, aber toll wäre wenn ich in Erfahrung bringen könnte inwieweit ich mit meinem gedachten Aufruf des (in den ja schon laufenden Server - ich will den ja nicht starten ...) einigermaßen richtig oder ganz falsch liege ?
      Grüße
      Tina

      1. Hallo Tina,

        Insofern bleibt mir nur es zuerst auf meinem externen 'Kommunikationserver' nachzubauen. Dortige 'C'-Server habe ich schon und weiß wie die gehen. Mein Versuchsmodell ist auf port 1234 gestartet und rückt per telnet auch per Kommandozeile erwünschte gewünschte Daten (bspw. Bereich:0x82) 'heraus', das funktioniert also.

        Rausfinden müßte ich nun wie ich auf meinen Versuchsserver 'grapsvr' nun per XMLHTTPRequest zugreife ?????
        Mit der Zeile'getURL("grapsvr 1234 0x82",callback); (oder in diverser anderer Synthax probiert) gibt der nichts preis. Das muß irgendwie anders gehen.

        Der Aufruf könnte demnach "grapsvr:1234/?Bereich=0x82" lauten (sofern der Parameter Bereich mit Wert 0x82 existiert). Allerdings steht in Deinem ersten Posting beim Applet auch etwas mit 0x82:

        <param name="VARAREA1" value="0x82">  
        <param name="VARBITOFFSET" value="4">  
        <param name="EDIT" value="true">
        

        Insofern ist vielleicht eher "grapsvr:1234/?VARAREA1=0x82&VARBITOFFSET=4&EDIT=true" gemeint ...

        Grüße,
        Thomas

        1. Hallo Thomas,
          Teil 2, der (Query)String funktioniert. Nach dem Fragezeichen könnten die Parameter angehängt werden - danke !

          (Momentan habe ich die Parameter allerdings auch fest vorgeben, und diese 0x82 sind z.Bsp. nur eine Form benutztbarer Bezeichnung für die verschiedenen Speicherbereiche. Die Hex-Kürzel haben sich aber 'eingebürgert' und werden zumeist genommen. 0x82 sind da die Merker, gibt 256 Stück und der gesuchte Bereich wird dann mit dem offset ab 0 (Startbit) und der Länge(Endbit) aufgerufen. Das machen die so ...)

          Was nicht geht ist der Doppelpunkt im getURL-String.
          Egal was ich da reinschreibe, sobald ein Doppelpunkt vorkommt gibts bei egal welchen ansonsten laufenden 'Modellen' die Fehlermeldung: 'Security Violation an Zeile: Column.
          Zeile und Column weisen jeweils genau auf das 'g' von getURL("mit_dem_Doppelpunkt_String"). Da hängts dann.

          Ohne Doppelpunkt (z.Bsp. so geschrieben: "grap 1234") gibts keinen Fehler - aber es folgt auch keine Wirkung.

          Wenn das wie bei einigen (ergooogelten)Kommentaren beschrieben ein 'Sandbox'-Verlassen sein soll, denn freß ich allerdings den Besen ! Genau dasselbe Ding (der Server) mit nicht einer Änderung ist nämlich an genau selber Stelle vom Applet her ohne Probleme zu erreichen.
          Da weiß ich nicht woran das hängt, vorallem weil der garnicht auf die URL reagiert sondern nur syntaktisch sofort auf den Doppelpunkt.

          Ein ansonsten functionsleeres Skript mit dem Eintrag als Dateinamen "????:80" ergibt keinerlei weitere Fehlermeldungen - nur diese Security Violation ...????
          Grüße
          Tina

          1. Hallo Tina,

            Was nicht geht ist der Doppelpunkt im getURL-String.
            Egal was ich da reinschreibe, sobald ein Doppelpunkt vorkommt gibts bei egal welchen ansonsten laufenden 'Modellen' die Fehlermeldung: 'Security Violation an Zeile: Column.

            Kann ich magels Kenntnis des Systems nicht beurteilen. Ich ging von hostname:port aus, da von einem Port die Rede war.

            Zeile und Column weisen jeweils genau auf das 'g' von getURL("mit_dem_Doppelpunkt_String"). Da hängts dann.

            Ohne Doppelpunkt (z.Bsp. so geschrieben: "grap 1234") gibts keinen Fehler - aber es folgt auch keine Wirkung.

            Ist wegen dem Leerzeichen auch kein gültiger URI.

            Mehr kann ich nicht zur Problemlösung beitragen, mit SVG hat das alles auch nichts zu tun.

            Grüße,
            Thomas