[Seaside] Asynchronous message sending and Comet
Rob Withers
reefedjib at gmail.com
Wed Sep 29 09:48:23 UTC 2010
bump. Can someone help me with this question, please?
--------------------------------------------------
From: "Rob Withers" <reefedjib at gmail.com>
Sent: Saturday, September 25, 2010 3:31 PM
To: "Seaside - general discussion" <seaside at lists.squeakfoundation.org>
Subject: Re: [Seaside] Asynchronous message sending and Comet
> I am working my way to building the Login/Register/ChangePassword/Home
> components of my app and navigating between them. There are asynchronous
> messages being used. I have an AccountManager instance, held by my
> session, which asynchronously talks to a SecureAccountManager in another
> image. This results in the following seaside callbacks not having an
> immediate answer from async api invocation.
>
> LoginComponent>>login calls #login: on the acctMgr. On success it expects
> to go to the HomeComponent. On failure it shows its page with an error
> message.
>
> RegisterComponent>>registerUser calls registerAccount: on the acctMgr. On
> success it expects to go to the HomeComponent. On failure it shows its
> page with an error message.
>
> ChangePasswordComponent>>changePassword calls changePassword: on the
> acctMgr. On success it expects to go to the HomeComponent. On failure it
> shows its page with an error message.
>
> My code looks like the following such that the callbacks I am registering
> for dealing with the asynchronous messaging get called after control
> leaves the Seaside callback.
>
> (self session login: self credentials)
> whenResolved: [:acct | self answer: acct];
> whenBroken: [:msg | self loginFailed].
>
>
> When I run the Register and then Login callbacks, I get the following
> error:
>
> "GRError: You can only #call: and #answer: from within a callback or a
> Task"
>
> Sorry for the long lead up...I am definitely outside of a callback flow of
> control, or a Task flow of control. In otherwords I am outside of the
> HTTP request/response cycle.
>
> So I need to use Comet. It seems easy enough, but I am confused.
>
> Let's continue with my LoginComponent (presumably the same would be done
> to other Components).
>
> In its renderContentOn: html, I need to add the following:
>
> LoginComponent>>renderContentOn: html
>
> html div
> id: 'login';
> class: 'generic';
> with: [...];
> html script: (html comet
> pusher: self class pusher;
> connect)
>
> I gave the div an id and I installed and connected a comet script.
>
> Later, when my async reply comes in, I call a method update
>
> LoginComponent>>update
>
> self class pusher javascript: [:script |
> script element
> id: 'login';
> update: ????].
>
> My question concerns what I should update with (where the ???? is). To
> complicate matters, I want to do two different things depending on success
> or failure of my code. On success, I want to switch to a different
> component. Without asynchrony I would send "answer: acct". Is this
> possible in a comet script? I want the other component to have control/be
> the active component (I am not sure how to describe this. When a
> component sends #call: with another component, he is switching control to
> that component, right?). On failure, I want to refresh the error message
> (it may not be displayed...) showing login failed, but leaving the
> LoginComponent as the active component.
>
> How can I go about doing these things?
>
> Many thanks!
> Rob
>
> --------------------------------------------------
> From: "Rob Withers" <reefedjib at gmail.com>
> Sent: Monday, September 20, 2010 7:21 PM
> To: "Seaside - general discussion" <seaside at lists.squeakfoundation.org>
> Subject: Re: [Seaside] Asynchronous message sending
> andSeaside/Script.aculo.us/JavaScript/AJAX
>
>> Thanks for pointing this out, Lukas. I have a lot to learn with Seaside,
>> and am now just reading the book. I noticed there is a section on Comet,
>> which I read. It is good to know that async events can update the page.
>>
>> Cheers,
>> Rob
>>
>> --------------------------------------------------
>> From: "Lukas Renggli" <renggli at gmail.com>
>> Sent: Monday, September 20, 2010 11:47 AM
>> To: "Seaside - general discussion" <seaside at lists.squeakfoundation.org>
>> Subject: Re: [Seaside] Asynchronous message sending
>> andSeaside/Script.aculo.us/JavaScript/AJAX
>>
>>>> I am trying to figure out how I can integrate my asynchronous message
>>>> sending framework with Seaside. From my reading, it seems that Seaside
>>>> works on a request/response model. Furthermore, with
>>>> JavaScript/AJAX/Script.aculo.us it still works on a request/response
>>>> model.
>>>
>>> Yes, this is how HTTP is designed.
>>>
>>>> There seems there is no way to "push" events/content. Is this
>>>> accurate?
>>>
>>> No.
>>>
>>> For a long time there is the Comet package that provides a "hack" for
>>> pushing events from the server to the client. See the Comet examples
>>> that come with every Seaside distribution.
>>>
>>> Also Philippe recently published a WebSocket implementation for
>>> Seaside, but that doesn't work with all web browsers yet.
>>>
>>> Lukas
>>>
>>> --
>>> Lukas Renggli
>>> www.lukas-renggli.ch
>>> _______________________________________________
>>> seaside mailing list
>>> seaside at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>
>>
>
More information about the seaside
mailing list