コード例 #1
0
ファイル: windows.py プロジェクト: HOLOGRAPHICpizza/GridToGo
	def becomeGridHost(self, *args):
		if self.clientObject.getLocalUser().gridHost:
			for uuid in self.clientObject.users:
				if self.clientObject.users[uuid].gridHostActive:
					#TODO: Allow moderators to take gridhost from others.
					showModalDialog(
						self.window,
						Gtk.MessageType.ERROR,
						'The grid is already being hosted.'
					)
					return

			#TODO: Show error dialogs on failures

			self.setStatus('Loading OpenSim distribution...')

			distribution = Distribution(self.clientObject.projectRoot, self.clientObject.externalhost, parent=self.window)
			d = Deferred()
			d.addCallback(self.startRobust)
			distribution.load(d)
			#TODO: Don't hardcode this

		else:
			showModalDialog(
				self.window,
				Gtk.MessageType.ERROR,
				'You do not have permission to become the grid host.'
			)
コード例 #2
0
ファイル: windows.py プロジェクト: AMasterOfFish/GridToGo
	def becomeGridHost(self, *args):
		if self.clientObject.getLocalUser().gridHost:
			for uuid in self.clientObject.users:
				if self.clientObject.users[uuid].gridHostActive:
					#TODO: Allow moderators to take gridhost from others.
					showModalDialog(
						self.window,
						Gtk.MessageType.ERROR,
						'The grid is already being hosted.'
					)
					return

			delta = DeltaUser(self.clientObject.getLocalUser().UUID)
			delta.gridHostActive = True

			# The delta gets applied when the server echos it back
			#self.clientObject.updateUser(delta)
			self.clientObject.protocol.writeRequest(delta)

			#TODO: Show error dialogs on failures

			self.setStatus('Loading OpenSim distribution...')

			distribution = Distribution(self.clientObject.projectRoot, parent=self.window)
			d = Deferred()
			d.addCallback(self.startRobust)
			distribution.load(d)
			#TODO: Don't hardcode this

		else:
			showModalDialog(
				self.window,
				Gtk.MessageType.ERROR,
				'You do not have permission to become the grid host.'
			)
コード例 #3
0
ファイル: windows.py プロジェクト: HOLOGRAPHICpizza/GridToGo
	def onHostRegion(self, *args):
		(model, iterator) = self.regionView.get_selection().get_selected()
		if model is None or iterator is None:
			return
		regionName = model[iterator][0]
		log.msg("Trying to host region " + regionName)
		log.msg("Region Hosts: " + str(self.clientObject.regions[regionName].hosts))
		region = self.clientObject.regions[regionName]
		user = self.clientObject.getLocalUser()
		if user.UUID in region.hosts:
			log.msg("Hosting region " + regionName)
			delta = DeltaRegion(regionName)
			delta.currentHost = user.UUID
			self.clientObject.protocol.writeRequest(delta)

			#TODO: Don't hardcode gridname and localhost
			distribution = Distribution(self.clientObject.projectRoot, self.clientObject.externalhost, parent=self.window)

			def hostRegion(dist):
				log.msg("Configuring region for hosting")

				# Do region-agnostic configuration
				dist.configure("GridName", self.clientObject.externalhost)

				# Do region-specific configuration
				self.clientObject.maxregionport += 1
				dist.configureRegion(region.regionName, region.location, self.clientObject.maxregionport)

				# We use the convention: consolePort = port + 10000
				protocol_ = process.spawnRegionProcess(
					dist.opensimdir,
					region.regionName,
					self.clientObject.maxregionport + 10000,
					self.clientObject.externalhost,
					callOnOutput=self.clientObject.processSimOutput)

				self.clientObject.processes[region.regionName] = protocol_
				
			d = Deferred()
			d.addCallback(hostRegion)
			distribution.load(d)

		else:
			showModalDialog(
				self.window,
				Gtk.MessageType.ERROR,
				"Not allowed to host region.")