Example #1
0
	def startRemoteDrawingThreads(self):
		# start remote command thread
		self.remotedrawingthread=ServerDrawingThread(self.remotecommandqueue,self.id,master=self.master)
		self.remotedrawingthread.start()
Example #2
0
class HiveSessionState(BeeSessionState):
	def __init__(self,master,width,height,type,maxundo):
		BeeSessionState.__init__(self,master,width,height,type)
		self.commandindexes={}
		self.historysize=maxundo
		self.master=master

	def localLayer(self,key):
		return False

	def startRemoteDrawingThreads(self):
		# start remote command thread
		self.remotedrawingthread=ServerDrawingThread(self.remotecommandqueue,self.id,master=self.master)
		self.remotedrawingthread.start()

	# send full resync to client with given ID
	def sendLayersToClient(self,id):
		# get a read lock on all layers and the list of layers
		lock=qtcore.QReadLocker(self.layerslistlock)
		locklist=[]
		for layer in self.layers:
			locklist.append(qtcore.QReadLocker(layer.imagelock))

		# send each layer to client
		index=0
		for layer in self.layers:
			index+=1
			self.sendLayerImageToClient(layer,index,id)

	def sendLayerImageToClient(self,layer,index,id):
		key=layer.key
		image=layer.getImageCopy()
		opacity=layer.getOpacity()
		compmode=layer.compmode
		owner=layer.owner

		# send command to create layer
		insertcommand=(DrawingCommandTypes.alllayer,AllLayerCommandTypes.insertlayer,key,index,image,owner)
		self.master.routinginput.put((insertcommand,id*-1))

		# set alpha and composition mode for layer
		alphacommand=(DrawingCommandTypes.layer,LayerCommandTypes.alpha,key,opacity)
		self.master.routinginput.put((alphacommand,id*-1))
		modecommand=(DrawingCommandTypes.layer,LayerCommandTypes.mode,key,compmode)
		self.master.routinginput.put((modecommand,id*-1))

	def addFatalErrorNotificationToQueue(self,owner,errormessage,source=ThreadTypes.network):
		self.queueCommand((DrawingCommandTypes.networkcontrol,NetworkControlCommandTypes.fatalerror,owner,errormessage),source)

	def addLayerRequestToQueue(self,layerkey,owner=0,source=ThreadTypes.network):
		self.queueCommand((DrawingCommandTypes.networkcontrol,NetworkControlCommandTypes.requestlayer,owner,layerkey),source)

	def addResyncRequestToQueue(self,owner=0,source=ThreadTypes.network):
		self.queueCommand((DrawingCommandTypes.networkcontrol,NetworkControlCommandTypes.resyncrequest,owner),source)

	def queueCommand(self,command,source=ThreadTypes.server,owner=0):
		#print "putting command in remote queue:", command
		self.remotecommandqueue.put(command)

	# the history is taken care of elsewhere
	def addCommandToHistory(self,command,source=0):
		pass