ag retreat 2006 – hands-on session developing shared applications susanne lefvert...

27
AG Retreat 2006 – Hands-On Session Developing Shared Applications Susanne Lefvert [email protected] University of Chicago

Upload: ashley-holmes

Post on 01-Jan-2016

216 views

Category:

Documents


2 download

TRANSCRIPT

AG Retreat 2006 – Hands-On Session

Developing Shared Applications

Susanne Lefvert [email protected] of Chicago

AG Retreat 2006 – Hands-On Session

Shared Applications

Allows individuals to use programs together from remote locations

• Shared Browser– Browse the web together

• Shared Presentation– View and control remote

presentations• Shared VNC

– Secured screen sharing• And many more…

AG Retreat 2006 – Hands-On Session

Shared Applications

AG Retreat 2006 – Hands-On Session

Outline

• Characteristics– Sharing State – Event Communication

• Developer Tools– SharedAppClient– DatastoreClient– Access Grid Package Manager

• Example: Shared PDF• Exercises • Documentation

AG Retreat 2006 – Hands-On Session

Sharing State

Venue

foo

foo

fooClient 1

Client 2

Client 3* Communicating via ZSI SOAP calls

Application Session

State: foo

AG Retreat 2006 – Hands-On Session

foobar

foo

foo

Event Communication

bar

barClient 1

Client 2

Client 3* Event communication using Twisted

Venue

Event Channel

Application Session

Event Channel

AG Retreat 2006 – Hands-On Session

Venue

SharedAppClient

Your Application

SharedAppClient

SharedApplicationIW Application Session

Event ChannelEventClient

AG Retreat 2006 – Hands-On Session

SharedAppClient

http://www.mcs.anl.gov/fl/research/accessgrid/documentation/developer/api/

• Tool for developers that includes:– SOAP communication– Event exchange– Logging– Data cache– Exception handling

• API

– AccessGrid.SharedAppClient

AG Retreat 2006 – Hands-On Session

SharedAppClient

API:

Join() – Connect to an application sessionInitLogging() – Get object for loggingShutdown() – Shut down soap interface and event clientSendEvent() – Distribute an event to all clientsRegisterEventCallback() – Register callback for eventSetData() – Set shared stateGetData() – Get shared stateUpdateDataCache() – Update cached dataGetPublicId() – Get my unique idGetVenueURL() – Get venue url

AG Retreat 2006 – Hands-On Session

DatastoreClient

API:

LoadData() – Get data from venueQueryMatchingFiles() – Get file names matching

patternGetFileData() – Get data description for a fileDownload() – Download file from venueUpload() – Upload file to venueRemoveFile() – Remove file from venue

AG Retreat 2006 – Hands-On Session

1. Create an application description file: MySharedApp.app

2. Build an Access Grid package: SharedAppName.agpkg3

3. Use agpm3.py to install the application– agpm3.py –help– Open the package in the Venue Client

4. Start the application session in the Venue Client

Packaging and Installation

[application]name = SharedMyAppmimetype = application/x-ag-shared-myappextension = sharedmyappfiles = SharedMyApp.py, otherFile

[commands]Open = %(python)s SharedMyApp.py -a %(appUrl)s

AG Retreat 2006 – Hands-On Session

Example: Shared PDF

AG Retreat 2006 – Hands-On Session

Example: Shared PDFSharedAppClient

# Create shared application client self.sharedAppClient = SharedAppClient(name) self.log = self.sharedAppClient.InitLogging() # Get client profile

clientProfile = ClientProfile(UserConfig.instance().GetProfile()) # Join the application session self.sharedAppClient.Join(appUrl, clientProfile) self.id = self.sharedAppClient.GetPublicId() # Register callbacks for external events self.sharedAppClient.RegisterEventCallback("openFile", self.OpenCallback) self.sharedAppClient.RegisterEventCallback(“changePage", self.ChangePageCallback)

AG Retreat 2006 – Hands-On Session

Example: Shared PDFGet Current State

State: URL to file and current page number

# Get current stateself.file = self.sharedAppClient.GetData(“file")self.pageNr = self.sharedAppClient.GetData(“page") if self.file: try: self.dataStoreClient.Download(self.file, "tmp") self.pdf.LoadFile("tmp") self.pdf.setCurrentPage(self.pageNr) except: self.log.exception("PdfViewer.__init__: Download

failed %s"%(self.file))

AG Retreat 2006 – Hands-On Session

Example: Shared PDF

AG Retreat 2006 – Hands-On Session

Example: Shared PDFEvent Communication

# -- sender ---def OnNextPageButton(self, event): '''Invoked when user clicks the next button.''' self.pageNr = self.pageNr + 1 self.pdf.setCurrentPage(self.pageNr) self.sharedAppClient.SendEvent(“changePage", self.pageNr) self.sharedAppClient.SetData("page", self.pageNr)

# --- receiver ---def ChangePageCallback(self, event): ''' Invoked when a changePage event is received.''' self.pageNr = event.data id = event.GetSenderId() # Ignore my own events if self.id != id: wxCallAfter(self.pdf.setCurrentPage, self.pageNr)

Event: type – “changePage”, data – page number

AG Retreat 2006 – Hands-On Session

Example: Shared PDF

AG Retreat 2006 – Hands-On Session

Example: Shared PDFDatastoreClient

def PopulateCombobox(self, default = None): # Get pdf files from venue fileNames = []

wxBeginBusyCursor() try: self.dataStoreClient.LoadData() fileNames = self.dataStoreClient.QueryMatchingFiles("*.pdf") except: self.log.exception("FileSelectorDialog.PopulateCombobox: Failed.") wxEndBusyCursor() # Update combobox self.pdfList.Clear() for file in fileNames: self.pdfList.Append(file)

AG Retreat 2006 – Hands-On Session

Example: Shared PDFPackaging and Installation

1. Create SharedPDF.app:

2. SharedPDF.py + SharedPDF.app => SharedPDF.agpkg3 (zip package)

3. agpm3.py --p SharedPDF.agpkg3

[application]name = Shared PDFmimetype = application/x-ag-shared-pdfextension = sharedpdffiles = SharedPDF.py

[commands]Open = %(python)s SharedPDF.py -v %(venueUrl)s -a %(appUrl)s

AG Retreat 2006 – Hands-On Session

Starting Application Session

AG Retreat 2006 – Hands-On Session

AGTk 2.4 – 3.0 Migration

1. Connection id needed for venue data store; the id can be retrieved via the .app file.

2. Twisted-wxPython interaction; add reactor imports and reactor.interleave(wxCallAfter).

3. More restrictive rules on data format for events; only primitive data types allowed.

4. Data received from the application service when using the method sharedAppClient.GetData() may be unicode; convert received data to correct python type.

5. Use the new event method event.GetSenderId() to retrieve the public id of a sender.

6. An application package should have extension agpkg3.

http://www.mcs.anl.gov/fl/research/accessgrid/documentation/MigrationGuides/SharedApplicationsMigrationGuide.htm

AG Retreat 2006 – Hands-On Session

Exercises

Exercise 1: Shared StoplightExercise 2: Shared Group Chat exercise

http://www.mcs.anl.gov/fl/research/accessgrid/documentation/tutorial/Retreat2006/SharedApps/

AG Retreat 2006 – Hands-On Session

Exercise 1: Shared Stoplight

AG Retreat 2006 – Hands-On Session

Exercise 1: Shared Stoplight

Three Tasks:

1. Create an AG package, install, and start the application from the Venue Client.

2. Add a new button – yellow

3. Add a text field to change the title

AG Retreat 2006 – Hands-On Session

Exercise 1: Shared Stoplight

AG Retreat 2006 – Hands-On Session

Exercise 2: Shared Group Chat

AG Retreat 2006 – Hands-On Session

Documentation

• Reference Materialshttp://www.mcs.anl.gov/fl/research/accessgrid/documentation/developer.html

• Toolkit APIhttp://www.mcs.anl.gov/fl/research/accessgrid/documentation/developer/api/

• AGTk 2-3 Migration Guidehttp://www.mcs.anl.gov/fl/research/accessgrid/documentation/MigrationGuides/SharedApplicationsMigrationGuide.htm