Bonjour chers amis,
Just to let you know that I uploaded a simple real time events monitor to the SqueakSource repository, it could be useful for those who use the SASE protocol (#when:send:to: , #triggerEvent: and friends). Cheers. Hernán PD: Download from http://www.squeaksource.com/EventsMonitor.html |
sounds interesting.
What is the key behavior (psy unexpected dependencies? On Dec 13, 2008, at 6:40 AM, Hernán Morales Durand wrote: > Bonjour chers amis, > Just to let you know that I uploaded a simple real time events > monitor to the SqueakSource repository, it could be useful for those > who use the SASE protocol (#when:send:to: , #triggerEvent: and > friends). > Cheers. > > Hernán > > PD: Download from http://www.squeaksource.com/EventsMonitor.html > _______________________________________________ > Pharo-project mailing list > [hidden email] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project |
Thanks for the feedback from both lists,
To test the monitor doIt this trivial example: | obj1 obj2 | obj1 := VersionNumber fromString: '30'. obj2 := VersionNumber fromString: '31'. obj1 when: #myEvent send: #printString to: obj2. obj1 triggerEvent: #myEvent. { obj1 . obj2 } inspect and start the event monitor. If you use code like that anytime, the monitor will show you in real-time the event table state. Possible uses includes: - As a tool for learning about weak dictionaries, used currently by the EventManager. An interesting exercise question with the above code is: when do you think the (Weak)MessageSend will be garbage collected? (try to answer first without spying possible answers :) A) Closing the inspector will do it. B) No, some GC thing will nil event symbols and then the weak messages will dissapear. C) Anything doing #flushEvents. D) Smalltalk garbageCollect. E) Manually nil all the event symbols in each object's action map: EventManager actionMaps associationsDo: [: assoc | assoc value associationsDo: [: idAssoc | idAssoc key = #getCompletionController ifFalse: [ idAssoc key: nil ] ] ] F) A winner combination of the above G) None of the above. - As a tool for observe an intensive use of SASE events, as we do in some complex UI applications using SmallFaces. - As an example of a simple tool for real-time monitoring. If you want your own monitor, subclass EventMonitor, re-implement #start something like the following (an example for some morphic events) : start " Start monitoring events " | userText | userText := UIManager default request: 'Type a class in the Morph hierarchy'. userText isEmptyOrNil ifTrue: [ self morphicClass: PasteUpMorph ] ifFalse: [ ( Smalltalk hasClassNamed: userText asSymbol ) ifTrue: [ self morphicClass: ( Smalltalk at: userText asSymbol ) ] ifFalse: [ self error: 'Class not found ' , userText ] ]. super start. and #eventsReport according to sample your object graph. In this example: eventsReport " Answer a String with the current status of events in my domain " | dict | ^ String streamContents: [ : s | counter := counter + 1. s nextPutAll: '====== Samples : '; print: counter; cr. self morphicClass allSubInstancesDo: [: morph | ( dict := morph valueOfProperty: #actionMap ) ifNotNil: [ s nextPutAll: 'Source : '; print: morph; cr; nextPutAll: ' ActionMap : '; cr. dict associationsDo: [: idAssoc | s nextPutAll: ' Event : '; print: idAssoc key; cr; nextPutAll: ' Message : '; print: idAssoc value; cr ] ]. s cr ] ] Cheers Hernán 2008/12/13 Stéphane Ducasse <[hidden email]> sounds interesting. |
Free forum by Nabble | Edit this page |