[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