I've been developing a set of node services called JMast (JMastConsumer and JMastProducer services) which basically provide a form of application sharing using streaming technologies. However, whilst I can get the software to boot from AG 3.0.2 with parameters passed correctly I'm having a problem where I'm being passed the same multicast address/port as the vic tool which causes vic to crash. If I change the Capabilities type (say, from "JMAST" to "jmast1") a different address to vic is assigned in the first instance of execution but the next time I run the software its back to giving me the same address/port as vic and I can't really work out why.
Posted below are the scripts I've been using, I'm a novice at this so any comments/help would be greatly appreciated. Thanks, Ismail Bhana #----------------------------------------------------------------------------- # Name: JMastProducerService.py # Author: IMB # Created: 2007/01/01 # Copyright: (c) 2007 # Licence: See LICENSE.TXT #----------------------------------------------------------------------------- import os import time import agversion agversion.select(3) from AccessGrid import Toolkit from AccessGrid.Descriptions import Capability from AccessGrid.AGService import AGService from AccessGrid.AGParameter import OptionSetParameter class JMastProducerService( AGService ): encodings = [ "jpeg/rtp" ] quality = [ "Highest", "High", "Medium", "Low", "Lowest" ] size = [ "None", "800x600", "600x400", "640x480", "480x300", "300x200" ] def __init__( self ): AGService.__init__( self ) self.capabilities = [ Capability(Capability.PRODUCER, "JMAST", "JPEG/RTP", 100000, self.id) ] self.executable = os.path.join(os.getcwd(), "JMastProducer.exe") # Set configuration parameters self.encoding = OptionSetParameter("Stream Encoding", "jpeg/rtp", JMastProducerService.encodings) self.quality = OptionSetParameter("Stream Quality", "Medium", JMastProducerService.quality) self.size = OptionSetParameter("Max. Window Size", "None", JMastProducerService.size) self.configuration.append(self.encoding) self.configuration.append(self.quality) self.configuration.append(self.size) self.profile = None def Start(self): self.log.debug("JMastProducerService.Start: Starting Service") try: options = [] if self.enabled: self.log.debug('self.streamDescription: %s', self.streamDescription) options.append("-streamName") options.append(self.streamDescription.name) options.append("-streamType") options.append(self.streamDescription.location.type) options.append("-streamAddr") options.append(self.streamDescription.location.host) options.append("-streamPort") options.append(self.streamDescription.location.port) options.append("-streamTTL") options.append(self.streamDescription.location.ttl) options.append("-optionEncoding") options.append(self.encoding.value) options.append("-optionQuality") options.append(self.quality.value) options.append("-optionSize") options.append(self.size.value) self.log.debug(" executable = %s" % self.executable) self.log.debug(" options = %s" % options) self._Start(options) except: self.log.exception("Exception in JMastProducerService.Start") raise Exception("Failed to start service") def Stop(self): self.log.debug("JMastProducerService.Stop: Stopping Service") jmastKill = os.path.join(os.getcwd(), "KillProducer.exe") self.processManager.StartProcess(jmastKill, []) time.sleep(0.2) AGService.ForceStop(self) def SetStream(self, streamDescription): self.log.debug('JMastProducerService.SetStream: %s', streamDescription) self.log.debug(' enabled: %d', self.enabled) ret = AGService.ConfigureStream(self, streamDescription) if ret and self.started: # service is already running with this config; ignore return # if started, stop if self.started: self.Stop() # if enabled, start if self.enabled: self.Start() def SetIdentity(self, profile): self.log.debug("JMastProducerService.SetIdentity: %s %s", profile.name, profile.email) self.profile = profile if __name__ == "__main__": from AccessGrid.interfaces.AGService_interface import AGService as AGServiceI from AccessGrid.AGService import RunService service = JMastProducerService() serviceI = AGServiceI(service) RunService(service, serviceI) #----------------------------------------------------------------------------- # Name: JMastConsumerService.py # Author: IMB # Created: 2007/01/01 # Copyright: (c) 2007 # Licence: See LICENSE.TXT #----------------------------------------------------------------------------- import os import time import agversion agversion.select(3) from AccessGrid import Toolkit from AccessGrid.Descriptions import Capability from AccessGrid.AGService import AGService from AccessGrid.AGParameter import OptionSetParameter class JMastConsumerService( AGService ): def __init__( self ): AGService.__init__( self ) self.capabilities = [ Capability(Capability.CONSUMER, "JMAST", "JPEG/RTP", 100000, self.id) ] self.executable = os.path.join(os.getcwd(), "JMastConsumer.exe") self.profile = None def Start(self): self.log.debug("JMastConsumer.Start: Starting Service") try: options = [] if self.enabled: self.log.debug('self.streamDescription: %s', self.streamDescription) options.append("-streamName") options.append(self.streamDescription.name) options.append("-streamType") options.append(self.streamDescription.location.type) options.append("-streamAddr") options.append(self.streamDescription.location.host) options.append("-streamPort") options.append(self.streamDescription.location.port) options.append("-streamTTL") options.append(self.streamDescription.location.ttl) self.log.debug(" executable = %s" % self.executable) self.log.debug(" options = %s" % options) self._Start(options) except: self.log.exception("Exception in JMastConsumerService.Start") raise Exception("Failed to start service") def Stop(self): self.log.debug("JMastConsumerService.Stop: Stopping Service") jmastKill = os.path.join(os.getcwd(), "KillConsumer.exe") self.processManager.StartProcess(jmastKill, []) time.sleep(0.2) AGService.ForceStop(self) def SetStream(self, streamDescription): self.log.debug('JMastConsumerService.SetStream: %s', streamDescription) self.log.debug(' enabled: %d', self.enabled) ret = AGService.ConfigureStream(self, streamDescription) if ret and self.started: # service is already running with this config; ignore return # if started, stop if self.started: self.Stop() # if enabled, start if self.enabled: self.Start() def SetIdentity(self, profile): self.log.debug("JMastConsumerService.SetIdentity: %s %s", profile.name, profile.email) self.profile = profile if __name__ == "__main__": from AccessGrid.interfaces.AGService_interface import AGService as AGServiceI from AccessGrid.AGService import RunService service = JMastConsumerService() serviceI = AGServiceI(service) RunService(service, serviceI) [ServiceDescription] name = JMastProducerService description = JMast Multicast Application Sharing Tool Producer capabilities = Capability1 executable = JMastProducerService.py platform = neutral version = 0.1 [Capability1] role = producer type = JMAST [ServiceDescription] name = JMastConsumerService description = JMast Multicast Application Sharing Tool Consumer capabilities = Capability1 executable = JMastConsumerService.py platform = neutral version = 0.1 [Capability1] role = consumer type = JMAST