def startRemoteDrawingThreads(self): # start remote command thread self.remotedrawingthread=ServerDrawingThread(self.remotecommandqueue,self.id,master=self.master) self.remotedrawingthread.start()
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