On Thu, Nov 12, 2009 at 2:16 PM, Jack Widman <[email protected]> wrote:

> Will do. One more small question How do I send a message to the Comet Actor
> from another class? Can the CometActor be an object instead of a class? In
> the code
>

Lift instantiates a new CometActor each time it needs one.  If you have a
singleton CometActor, you'd be sharing state across all sessions and that
would be impossible to manage.


>
> X ! messageToCometActor,   what is X? I don't have a variable that holds
> the instance of the CometActor.


If the CometActor is a listener to another service, you can register the
instance of the CometActor as a listener during localSetup and unregister
during localShutdown.

See that Chat example in lift-examples/example


>
>
> On Thu, Nov 12, 2009 at 5:12 PM, David Pollak <
> [email protected]> wrote:
>
>> Jack,
>>
>> The issues you're seeing are not Lift related.  You are not using Actors
>> correctly.  Please see Philipp Haller's preso on Actors:
>> http://lamp.epfl.ch/~phaller/doc/ScalaActors.pdf<http://lamp.epfl.ch/%7Ephaller/doc/ScalaActors.pdf>
>>
>> Please also look at the Actor chapters in Beginning Scala or Programming
>> in Scala.
>>
>> Thanks,
>>
>> David
>>
>>
>> On Wed, Nov 11, 2009 at 8:26 PM, Jack Widman <[email protected]>wrote:
>>
>>> David,
>>>
>>> I have attached my code. It runs but does not behave as I intended it to.
>>> The code does a web search on the term "scala" and displays a list of URLs
>>> of the results. Next to each URL it says "Page Length : -1". A process is
>>> running in the background which takes each URL, goes out and gets the page
>>> and takes the length of the page. The length of that page is then supposed
>>> to immediately appear on the page next to that URL. I put the lengths on a
>>> queue, as they come in, and I have the Comet page poll the queue and display
>>> the results. It would probably be better to have the results send a message
>>> to the Comet class so the page is only re-rendered when there is a change
>>> but for now I am polling.
>>>
>>> I can see the lengths coming in and being put on the queue, but the Comet
>>> page is not getting them till they are all retrieved. (This takes way too
>>> long and nothing changes on the screen till its too late). I need them to
>>> appear as they come in. Occasionally I can see a length being retrieved and
>>> the Comet page finds it but even then it is not displayed until all the
>>> lengths are in.   I know this is not very clear but I think it will be clear
>>> from the code.
>>>
>>> I also know there are a lot of places in the code which can be improved
>>> and I welcome all of your input but what I would love is to have these
>>> numbers appear on the page as they they are retrieved. I have been stumped
>>> by this for a while and I suspect that somebody who knows Lift well might
>>> see the problem right away.
>>>
>>> The class that retrieves the page lengths is called Calculator and the
>>> queue is called SourceQueue. The classes are pretty small so hopefully it
>>> will be clear what is going on. I want you to know I think it is incredible
>>> how responsive you and the group are and I look forward to using Lift in the
>>> future.
>>>
>>> Thanks so much.
>>>
>>> Jack
>>>
>>>
>>> On Tue, Nov 10, 2009 at 1:27 AM, David Pollak <
>>> [email protected]> wrote:
>>>
>>>>
>>>>
>>>> On Mon, Nov 9, 2009 at 10:10 PM, Jack Widman <[email protected]>wrote:
>>>>
>>>>> The only difference between your working code and mine is that mine has
>>>>> a process in the background that is always running and puts Foo objects 
>>>>> on a
>>>>> queue whenever they are ready. Where can I start this long running process
>>>>> so that it doesn't interfere with the lowPriority method that takes things
>>>>> off the queue and rerenders the page. I tried starting the process in its
>>>>> own Actor that I start in localSetup but it seems somehow to be blocking 
>>>>> the
>>>>> lowPriority method from doing its thing.
>>>>>
>>>>
>>>> I have no idea what this means... sorry.
>>>>
>>>> Please post actual runnable code and we can help you debug.
>>>>
>>>>
>>>>>
>>>>> On Sun, Nov 8, 2009 at 11:35 PM, David Pollak <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Jack,
>>>>>>
>>>>>> I reproduced your code and it seems to work fine.  I've enclosed a
>>>>>> working copy.
>>>>>>
>>>>>> Some comments about your code:
>>>>>>
>>>>>>    - The foos variable and the foo variable may be getting confused
>>>>>>    in the code... the render method may be rendering the same thing 
>>>>>> based on
>>>>>>    the unchanging foos variable.
>>>>>>    - Doing null testing is a sign that you have logic errors in your
>>>>>>    code.  I strongly recommend using either Box or Option for everything 
>>>>>> that
>>>>>>    can logically not contain a value/reference.  If you're bridging out 
>>>>>> to Java
>>>>>>    code and are expecting null from the Java code, write a small bridge 
>>>>>> that
>>>>>>    will wrapper the Java return values in Box/Option.
>>>>>>    - You have a case class (Tick) that contains no parameters.
>>>>>>    Please use a case object instead.
>>>>>>    - Your Tick look is a spin loop.  You fire a Tick message as part
>>>>>>    of processing the Tick message.  I would suggest that if you're 
>>>>>> polling,
>>>>>>    that you have a reasonable poll interval, otherwise you'll starve 
>>>>>> your CPU.
>>>>>>    Further, having reRender on each loop through means that you're 
>>>>>> forcing a
>>>>>>    lot of bytes over the wire rather than only doing a reRender on 
>>>>>> changed
>>>>>>    values.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> David
>>>>>>
>>>>>> On Sun, Nov 8, 2009 at 3:47 PM, Jack Widman <[email protected]>wrote:
>>>>>>
>>>>>>> Sorry. Here it is:   As I said, I know that when render is called,
>>>>>>> foo.getValue has the right value. But it does not show on the screen, 
>>>>>>> unless
>>>>>>> I refresh the browser.
>>>>>>>
>>>>>>> package com.foo.comet
>>>>>>>
>>>>>>> import net.liftweb._
>>>>>>> import http._
>>>>>>> import js._
>>>>>>> import JsCmds._
>>>>>>> import net.liftweb.util._
>>>>>>> import net.liftweb.http._
>>>>>>> import _root_.scala.xml._
>>>>>>> import scala.actors._
>>>>>>> import com.authoritude.snippet._
>>>>>>> import scala.collection.mutable.Queue
>>>>>>> import net.liftweb.http.SessionVar
>>>>>>>
>>>>>>>
>>>>>>> class MyComet extends CometActor {
>>>>>>>
>>>>>>>   override def defaultPrefix = Full("auth")
>>>>>>>
>>>>>>>   private var foos = FooManager.getFoos
>>>>>>>
>>>>>>>   def createDisplay(foos:List[Foo]):NodeSeq = {
>>>>>>>     <span id="go"><table>
>>>>>>>     {
>>>>>>>       for {foo <- foos} yield <tr><td>{foo.getValue}</td></tr>
>>>>>>>     }
>>>>>>>
>>>>>>>     </table></span>
>>>>>>>   }
>>>>>>>
>>>>>>>   def render = { bind("foo" -> createDisplay(foos)) }
>>>>>>>
>>>>>>>   override def localSetup = {
>>>>>>>     super.localSetup
>>>>>>>     this ! Tick
>>>>>>>   }
>>>>>>>
>>>>>>>   var foo:Foo = null
>>>>>>>   override def lowPriority = {
>>>>>>>     case Tick => {
>>>>>>>       foo=FooQueue.getLatest
>>>>>>>       if (foo!=null && foo.getValue > -1) {
>>>>>>>     blogs = FooManager.process(foo, foos)
>>>>>>>       } else if (foo!=null){
>>>>>>>     foos = foos.remove((f:Foo)=>(f.id==foo.id))
>>>>>>>       }
>>>>>>>       reRender(false)
>>>>>>>       this ! Tick
>>>>>>>     }
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> case class Tick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Nov 8, 2009 at 5:31 AM, Timothy Perrett <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> Without posting your code it's going to be tough to help you.
>>>>>>>>
>>>>>>>> Cheers, Tim
>>>>>>>>
>>>>>>>> Sent from my iPhone
>>>>>>>>
>>>>>>>> On 8 Nov 2009, at 08:14, jack <[email protected]> wrote:
>>>>>>>>
>>>>>>>> >
>>>>>>>> > By the way, I know that when render is called, all the variables
>>>>>>>> have
>>>>>>>> > the right values. I just don't see it on the screen unless I
>>>>>>>> refresh
>>>>>>>> > it.
>>>>>>>> >
>>>>>>>> > On Nov 8, 3:12 am, jack <[email protected]> wrote:
>>>>>>>> >> I have a CometActor. render is called when it is supposed to be
>>>>>>>> but I
>>>>>>>> >> don't see the changes. If I refresh the page at anytime, I do see
>>>>>>>> the
>>>>>>>> >> changes. Any idea what might cause this?
>>>>>>>> > >
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Jack Widman
>>>>>>>
>>>>>>> co-founder / cto,  Authoritude, Inc.
>>>>>>>
>>>>>>> 203-641-9355
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Lift, the simply functional web framework http://liftweb.net
>>>>>> Beginning Scala http://www.apress.com/book/view/1430219890
>>>>>> Follow me: http://twitter.com/dpp
>>>>>> Surf the harmonics
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Jack Widman
>>>>>
>>>>> co-founder / cto,  Authoritude, Inc.
>>>>>
>>>>> 203-641-9355
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Lift, the simply functional web framework http://liftweb.net
>>>> Beginning Scala http://www.apress.com/book/view/1430219890
>>>> Follow me: http://twitter.com/dpp
>>>> Surf the harmonics
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Surf the harmonics
>>
>>
>>
>
>
> --
> Jack Widman
>
> co-founder / cto,  Authoritude, Inc.
>
> 203-641-9355
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to