ag retreat 2006 – hands-on session developing shared applications susanne lefvert...
Post on 01-Jan-2016
216 Views
Preview:
TRANSCRIPT
AG Retreat 2006 – Hands-On Session
Developing Shared Applications
Susanne Lefvert lefvert@mcs.anl.govUniversity 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
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 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 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 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
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
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
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
top related