Thanks for the code, it gave me initial idea on where to start. Still, the code is showing XMLSocket, so it assumes that I am receiving XML data. But As I mentioned previously, the incoming data (at least in the beginning) is not well formed XML and should be treated as a simple string...

So I suppose there is some Flash API for that, isn't there?

How does it work technically that OL can communicate to Flash using Javascript?

Evaldas

Henry Minsky wrote:
We do something similar with the remote debug protocol.

if you look at the file WEB-INF/lps/lfc/debugger/platform/swf/LzRemote.as you will see the usage of the Flash APIs. They can be accessed as normal Javascript for the most part.

For example the code to open and send a message looks like

Debug.sockOpen = function (port) {
  var url = LzBrowser.getLoadURLAsLzURL();
  // Security requires us to talk back to the server we were loaded from
  var host = url.host;
  this.xsock = new XMLSocket();
  this.xsock.onClose = this.brokensocket;
  this.xsock.onXML = this.socketXMLAvailable;
  if (! this.xsock.connect(host, port)) {
Debug.log("remote debugger could not connect to listener " + host + ":" + port);
  }
  this.writeInitMessage();
}


/**
  * @access private
  */
Debug.writeInitMessage = function () {
    var filename = LzBrowser.getLoadURLAsLzURL();
    var myXML = new XML();
    var init = myXML.createElement("init");
    myXML.appendChild(init);
    init.attributes.filename         = filename;
    init.attributes.language         = "LZX";
    init.attributes.protocol_version = "1.0";
    init.attributes.build      = canvas.lpsbuild;
    init.attributes.lpsversion = canvas.lpsversion;
    init.attributes.lpsrelease = canvas.lpsrelease;
    init.attributes.runtime    = canvas.runtime;
    init.attributes.appid      = "0";
    this.xsock.send(myXML);
}


and the code to hook into the callback for received XML looks like

Debug.socketXMLAvailable = function (doc) {
    var e = doc.firstChild;
    var rloader = Debug.rdbloader;
    if (e != null) {
        // clear warnings history
        Debug.resetWarningHistory();
        Debug.inEvalRequest = true;
        var seqnum = e.attributes['seq'];
        if (seqnum == null) {
            seqnum = Debug.seqnum++;
        }

        if (e.nodeName == "exec") {
            var expr = e.firstChild.nodeValue;
            rloader.request( { lz_load : false,
                           lzt : "eval",
                           proxied: true,
                           lzrdbseq : seqnum,
lz_script : "#file evalString\n#line 0\n" + expr } ); } else if (e.nodeName == "eval") {
            var expr = e.firstChild.nodeValue;
            rloader.request( {  lz_load : false,
                                lzt : "eval",
                                proxied: true,
                           &n bsp;    lzrdbseq : seqnum,
lz_script : "#file evalString\n#line 0\n" + expr } );
        } else if (e.nodeName == "inspect") {
            Debug.inEvalRequest = false;
            var id = e.attributes.id <http://e.attributes.id>;
            Debug.sockWriteAsXML(Debug.ObjectForID(id), seqnum);
        } else {
            Debug.inEvalRequest = false;
Debug.sockWrite("<response seq='"+seqnum+"'><error msg='unknown remote debug command'>"+e.nodeName+"</error></response>");
        }
    } else {
        Debug.inEvalRequest = false;
Debug.sockWrite("<response seq='-1'><error msg='null remote debug command'/></response>");
    }
}




You may want to put some of that code into a <script when="immediate"> block

On Thu, May 8, 2008 at 9:30 AM, Evaldas Taroza <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hello,

    Thanks Henry for the pointer. Indeed I need a TCP socket. Normal
    Dataset will not do the job, I think.

    When you say to use Flash API, how do I do it? I mean, in Flash I
    suppose there is another programing language, like ActionScript, so
    how do I do it from within OL then?

    And when you say that Flash API is not officially supported by OL
    can it be that my app will eventually break, when you change
    somethings inside OL?

    A bit about my problems:
    As I told you I am taking my first steps with OL. So I decided to
    write some simple chat program, which would support a very small
    subset of XMPP. So as a start I need to send to the chat server the
    following text:
    <?xml version='1.0' encoding='UTF-8'?>
     <stream:stream
       to='localhost'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>

    And the server responds to something similar as well. As you can see
    it is not a well-formed XML document, so I need to treat it as text
    and parse it. All the subsequent communication happens with
    well-formed XML snippets.

    Do you think it's possible?

    Evaldas

    Henry Minsky wrote:

        For streaming I/O to a TCP socket, if you restrict your self to
        the Flash runtime, you can use the Flash XMLSocket API , which
        has some restrictions, such as it must use TCP ports above 1024
        I think.

        The API can be found in the Flash reference manual, it is not
        officially a supported API in OpelLaszlo though.

        We used this API for one of the remote debugger protocols at one
        point. There is still some code in the debugger implementation
        for it I think, which could be used as an example.


        On Thu, May 8, 2008 at 12:35 AM, Evaldas Taroza
        <[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>
        <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>> wrote:

           Dear OL users,

           I am pretty new to OL. What I am trying to achieve is to open a
           socket to a host (crossdomain) and read incoming textual data.

           Incoming data will most likely be an XML document, but I
        don't want
           to read the whole document, I rather need to deal with it as it
           comes, in a streaming manner. How can I achieve this?

           Thank you very much for help!

           Evaldas

           --    +41 79 616 53 76
           www.linkedin.com/in/taroza
        <http://www.linkedin.com/in/taroza>
        <http://www.linkedin.com/in/taroza>

           Optaros - www.optaros.com <http://www.optaros.com>
        <http://www.optaros.com>




-- Henry Minsky
        Software Architect
        [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>
        <mailto:[EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>>




-- +41 79 616 53 76
    www.linkedin.com/in/taroza <http://www.linkedin.com/in/taroza>

    Optaros - www.optaros.com <http://www.optaros.com>




--
Henry Minsky
Software Architect
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>




--
+41 79 616 53 76
www.linkedin.com/in/taroza

Optaros - www.optaros.com

Reply via email to