'From etoys2.2 of 21 September 2007 [latest update: #1731] on 29 October 2007 at 7:06:18 pm'! "Change Set: removePipe-bf Date: 29 October 2007 Author: Bert Freudenberg Remove old pipe protocol from when we still used the Python wrapper."! AbstractLauncher subclass: #SugarLauncher instanceVariableNames: 'process pipe dbus activities buddies serviceName handlers ' classVariableNames: 'Current ' poolDictionaries: '' category: 'Sugar'! !SugarLauncher methodsFor: 'running' stamp: 'bf 10/29/2007 16:46'! shutDown Project allSubInstancesDo: [:prj | prj removeParameter: #sugarId]. ServerDirectory inImageServers keysAndValuesDo: [:srvrName :srvr | (srvr isKindOf: SugarDatastoreDirectory) ifTrue: [ ServerDirectory removeServerNamed: srvrName ifAbsent: []]]. Current := nil. World windowEventHandler: nil. buddies := Dictionary new. handlers := Dictionary new. process ifNotNil: [ process terminate. process := nil]. ! ! !SugarLauncher methodsFor: 'running' stamp: 'bf 10/29/2007 16:46'! startUp self class allInstances do: [:ea | ea shutDown]. Current := self. parameters at: 'ACTIVITY_ID' ifPresent: [ :activityId | World windowEventHandler: self. process := [self runDBusService: 'org.laptop.Activity', activityId] forkAt: Processor userInterruptPriority named: 'Sugar DBus service'. ServerDirectory addServer: (SugarDatastoreDirectory mimetype: 'application/x-squeak-project' extension: '.pr') named: SugarLauncher defaultDatastoreDirName. parameters at: 'OBJECT_ID' ifPresent: [:id | ^self resumeJournalEntry: id]. Project current projectParameterAt: #sugarAutoSave put: true. self createJournalEntryFor: Project current filename: '' mimetype: ''. ^self welcome: (parameters at: 'URI' ifAbsent: [''])]. self welcome: '' ! ! !SugarLauncher methodsFor: 'dbus' stamp: 'bf 10/29/2007 16:47'! runDBusService: aString | msg error serviceName | serviceName := aString. dbus := DBusConnection connectToSessionBus. dbus registerName: serviceName. dbus registerSemaphore: Semaphore new. [[ [dbus dataRemains] whileTrue: [ (msg := dbus popMessage) ifNotNil: [ ((self dispatchDBusMessage: msg) not and: [msg isMethodCall]) ifTrue: [ error := DBusMessageError newFor: msg name: (DBusMessageError dbusErrorUnknownMethod) withMessage: serviceName, ' does not understand ', msg selector, '()'. error ifNotNil: [dbus sendMessage: error]]. ]]. dbus readSemaphore wait. ] repeat] ensure: [dbus releaseName: serviceName] ! ! SugarLauncher removeSelector: #addBuddyKey:args:! SugarLauncher removeSelector: #delBuddyKey:args:! SugarLauncher removeSelector: #fetchCommandsFrom:! SugarLauncher removeSelector: #handlePipeCommand:! SugarLauncher removeSelector: #nick:! SugarLauncher removeSelector: #share:! SugarLauncher removeSelector: #unknownPipeCommand:! AbstractLauncher subclass: #SugarLauncher instanceVariableNames: 'process dbus buddies handlers' classVariableNames: 'Current' poolDictionaries: '' category: 'Sugar'! !SugarLauncher reorganize! ('running' shutDown startUp) ('commands' active: quit save welcome:) ('accessing' buddies ownerBuddy) ('dbus' dbusMessageRegistry dispatchDBusMessage: handleActivitySetActive: handleDBusIntrospect: introspect runDBusService: sendDBusMessage: sendDBusMessage:onSuccess:onError: sendDBusMessage:timeout:) ('events' windowEvent:) ('datastore' createJournalEntryFor:filename:mimetype: findJournalEntries: getFilename: getFile: getProperties: handleStream:mimetype:titled: makeJournalEntryFor:filename:mimetype: propertiesFrom: resumeJournalEntry: updateJournalEntry: updateJournalEntry:for:filename:mimetype:) ('presence' buddiesFromDBus ownerFromDBus) ('testing' isRunningInSugar) !