[Laszlo-user] Open a socket and read/write text

Evaldas Taroza etaroza at optaros.com
Thu May 8 07:02:41 PDT 2008


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 
> <etaroza at optaros.com 
> <mailto:etaroza at optaros.com>> 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
>         <etaroza at optaros.com
>         <mailto:etaroza at optaros.com>
>         <mailto:etaroza at optaros.com
>         <mailto:etaroza at optaros.com>>> 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
>         hminsky at laszlosystems.com
>         <mailto:hminsky at laszlosystems.com>
>         <mailto:hminsky at laszlosystems.com
>         <mailto:hminsky at laszlosystems.com>>
> 
> 
> 
> 
>     -- 
>     +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
> hminsky at laszlosystems.com 
> <mailto:hminsky at laszlosystems.com>
> 



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

Optaros - www.optaros.com



More information about the Laszlo-user mailing list