Recent Changes - Search:

OtherPlaces

PmWiki

pmwiki.org

edit SideBar

AnnouncementHelp

This is copied from Pharo's help files. It may be easier to read as one long text. I didn't write it, so don't ask me to explain it.

Introduction

The announcement framework is an event notification framework. Compared to "traditional" Smalltalk event systems in this new framework, an event is a real object rather than a symbol.

An event someone might want to announce, such as a button click or an attribute change, is defined as a subclass of the abstract superclass Announcement. The subclass can have instance variables for additional information to pass along, such as a timestamp, or mouse coordinates at the time of the event, or the old value of the parameter that has changed. To signal the actual occurrence of an event, the "announcer" creates and configures an instance of an appropriate announcement, then broadcasts that instance. Objects subscribed to receive such broadcasts from the announcer receive a broadcast notification together with the instance. They can talk to the instance to find out any additional information about the event that has occurred.

Tutorial Step 1 -- Define an announcement

To define an announcement you just have to subclass the Announcement class:

   Announcement subclass: #MyInterestingAnnouncement
   	   instanceVariableNames: ''
	   classVariableNames: ''
	   poolDictionaries: ''
	   category: 'MyApp-Core'

If required you can add instance variables to hold data that should be transferred when an announcement is made:

   Announcement subclass: #GameLostAnnouncement
	   instanceVariableNames: 'score'
	   classVariableNames: ''
	   poolDictionaries: ''
	   category: 'MyGame-Core'

Tutorial Step 2 - Publishers and subscribers

If an object wants to announce an event it needs someone to make the announcement to. This is typically an instance of class Announcer which acts as the mediator between the object that has to announce something (publisher) and one or many (anonymous) subscribers who are interested in the event.

	| announcer |
	announcer := Announcer new.
	announcer announce: MyInterestingAnnouncement new

Using #announce: we can make an announcement - but since nobody is interested yet nothing will happen.

Lets add some consumers/subscribers. Subscribers just register on the Announcer instance to note that they are interested on a particular event/announcement:

	| announcer |
	announcer := Announcer new.	
	announcer on: MyInterestingAnnouncement send: #open to: Browser.     
	announcer on: MyInterestingAnnouncement send: #inspect to: Smalltalk.    	

So anytime an interesting announcement is made we want to inform the two consumers with a specific message. Still nothing happens - we have to additionally make the announcement:

	| announcer |
	announcer := Announcer new.	
	announcer on: MyInterestingAnnouncement send: #open to: Browser.    
	announcer on: MyInterestingAnnouncement send: #inspect to: Smalltalk.    	
	announcer announce: MyInterestingAnnouncement new	

Note that the subscribers are decoupled from the orginal announcement publisher. They dont have to know each other. Decoupling is the key thing here ... subscribers can register for particular events/announcements and remain anonymous to the original publisher.

Tutorial Step 3 - More examples In Pharo there is a global called "World" pointing to the desktop morph. This world also has an announcer we can use to demonstrate the features of the framework:

	| announcer |
	World announcer 
		on: WindowOpened 
		send: #value 
		to: [ Transcript show: 'A new window was opened';cr].

So anytime a window is opened in the system a message is shown in the transcript:

	Transcript open.

	| announcer |
	World announcer 
		on: WindowOpened 
		send: #value 
		to: [:ea | ea inspect. Transcript show: 'A new window was opened';cr].

API Documentation

   For now, look at this multi-level tree of info through Pharo. Frankly,
   there's not a whole lot of helpful documentation there about what the
   methods do or how they work. Open a hierarchy browser on Announcement to
   see the same tree structure.

Links

You can get more informations on the framework on the following websites:

 http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?searchCategory=Announcements%20Framework
 http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?entry=3310034894
Edit - History - Print - Recent Changes - Search
Page last modified on April 14, 2011, at 05:06 PM