[Spread-users] connecting to spread with Flash
Francis Chary
fchary at gmail.com
Thu May 12 14:14:08 EDT 2005
Thanks for the info Jonathan,
Your message is good news and bad news, actually. The XMLSocket in Flash is
ok with the long-term communication you're talking about, that's the good
news. It's one tcp connection, that just stays open until you explicitly
close it. The bad news is that there is no way to control when the onData
callback is called. Flash basically looks for a single byte with value zero,
then takes that as end of file and runs the onData function which you've
defined, with whatever data that has come over the socket before the zero
byte. The socket remains open, as I understand it. You can't access any of
the streams directly with Actionscript, I suppose Macromedia is trying to
keep things simple. My plan was to have the callback put all Spread messages
(connection and data messages both) into an array, then I could just check
the array every few milliseconds and pull out the most recent one. The only
problem is that the onData callback is never run, presumably because Spread
doesn't send the end of file byte that Flash is expecting at the end of the
message.
Another stumbling block with Actionscript is that there's no easy way of
dealing with bytes on their own. You have to use a single-character String
object, then convert that to ASCII with a String function. This part works
well enough, it's just annoying, really.
So, it's definitely tricky. Since Spread just assumes that the client knows
when the message is over, and because Macromedia doesn't let you edit the
socket code, I think I'll have problems making the Flash onData callback
work in the way you suggest. I would much prefer to code in the format of
the message into the Actionscript, but I just don't think it's possible. Is
there any way I could just edit the server's code to send that extra byte at
the end of each message? Where would be the best place to look, if I wanted
to do that?
I really appreciate your help, I'm sorry if I'm asking daft questions.
Thanks
Francis
On 5/12/05, Jonathan Stanton <jonathan at cnds.jhu.edu> wrote:
>
> Hi,
>
> They key question seems to be what flash detects as the 'end' of a
> message. If by '0 byte' you mean that a blocking 'read' on teh socket
> returns 0 bytes indicting the socket connection has closed, then that
> will not work with spread.
>
> Spread opens one tcp connection between the client and server and then
> keeps that conenction open until the client calls SP_disconnect or there
> is a network fault. Each Spread message (whether part of the connect
> sequence, or a distinct data message) is sent on that same tcp
> connection.
>
> If this XMLsocket is built on the HTTP type model where a new tcp
> connection is established for each data exchange, then that's just not
> going to work. Spread is designed for long-term communication of many
> messages between principles.
>
> If there is a way to control when XMLSocket calls the callback you could
> code in knowledge of when a complete spread message is received (the
> format of the messages can be determined from the java code that reads
> it in and most of it is fixed sized byte arrays so calculating how many
> bytes to receive isn't too hard) The Spread server does not 'send' any
> signal for end of message, it relies on both ends knowing the message
> format and calculating when a complete message has arrived.
>
> Hope this all makes sense, even if it sounds like negative news. I don't
> konw Flash at all, so there might be other ways to do this.
>
> Cheers,
>
> Jonathan
>
>
> On Thu, May 05, 2005 at 03:26:37PM +0530, Francis Chary wrote:
> > Hi there,
> >
> > I'm trying to connect to a spread server with an application written in
> > Actionscript (The language behind Macromedia Flash). I'm essentially
> porting
> > the java spread client to actionscript as closely as I can, but I'm
> running
> > into a few problems. I know next-to-nothing about c, so looking at the
> > spread source code hasn't helped me so much.
> >
> > The key difference between java and actionscript as I see it is that the
> AS
> > XMLSocket object doesn't allow you any access to the lower-level socket
> > streams. You only get two callback methods which are called when the
> socket
> > recieves some data. You have to put your data handling code in one of
> these
> > callbacks, and wait for data to come in. Conceptually, this isn't a
> problem
> > for the porting, I can work around it. The problem seems to be that
> > XMLSocket isn't 'noticing' when data is sent to it, and the callback
> isn't
> > being called at all. I assume that it has to do with Flash not realising
> > that a stream of data has been terminated. Flash looks for a 0 byte to
> > terminate a stream, is that what the spread server sends?
> >
> > I guess what I'm looking for is the communication that happens in the
> > sendConnect, readAuthMethods and sendAuthMethod methods of the Java
> client,
> > from the server's point of view. I hope this all makes sense.
> >
> > Thanks
> > Francis Chary
> >
> > --
> > Software Development Intern
> > ABB Corporate Research
> > 4th Floor, East Wing, Khanija Bhavan
> > 49, Race Course Road
> > Bangalore 560 001 India
>
> > _______________________________________________
> > Spread-users mailing list
> > Spread-users at lists.spread.org
> > http://lists.spread.org/mailman/listinfo/spread-users
>
> --
> -------------------------------------------------------
> Jonathan R. Stanton jonathan at cs.jhu.edu
> Dept. of Computer Science
> Johns Hopkins University
> -------------------------------------------------------
>
--
Software Development
ABB Corporate Research
4th Floor, East Wing, Khanija Bhavan
49, Race Course Road
Bangalore 560 001 India
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.spread.org/pipermail/spread-users/attachments/20050512/47328a04/attachment.html
More information about the Spread-users
mailing list