Example #1
0
 def onTCPConnect( connector ) :
     obj.op = None
     if connector.getError() != 0 :
         onError()
         return
     obj.rpcConn = RPCConnection( connector.getSock(), reactor )
     obj.rpcConn.setCloseCallback( onError )
     obj.op = _doRPCCall( obj.rpcConn, 'Accept', [connectionId],
             onRouterAccept )
Example #2
0
 def onTCPConnect( connector ) :
     self.connectOp = None
     if connector.getError() != 0 :
         self.state = self.CLOSED
         connectCallback( False )
         return
     self.rpcConn = RPCConnection( connector.getSock(), self.reactor )
     self.rpcConn.setCloseCallback( self._onClose )
     self.state = self.CONNECTED
     connectCallback( True )
Example #3
0
 def __init__( self, sock, reactor, routerState ) :
     self.rpcConn = RPCConnection( sock, reactor )
     self.reactor = reactor
     self.routerState = routerState
     self.rpcConn.setCloseCallback( self.close )
     self.rpcConn.setRequestCallback( self._onRequest )
     self.requestTable = {}
     for msg in 'Ping Register Connect Accept'.split() :
         self.requestTable[msg] = getattr( self, '_do%s' % msg )
     self.routerState.handlers[self] = 1
     self.state = self.INITIAL
     self._lastActiveTime = time()
Example #4
0
    def _doOfferFiles(self, sock):
        self._setStatus('Sending request ...')
        self.state = self.OFFERINGFILES
        fileList = []
        for row in range(self.ui.fileList.count()):
            item = self.ui.fileList.item(row)
            fileList.append(self.fileItems[item][0])
        self.rpcConn = RPCConnection(sock, self.reactor)
        self.switchboard = RPCSwitchboard(self.rpcConn)
        self.fs = FlatFS(fileList)
        self.fileServer = FileServer(self.fs, self.switchboard)

        pending = {}
        for i, f in enumerate(fileList):
            pending[os.path.split(f)[1].lower()] = i

        def onClose():
            if pending:
                self._setError('Disconnected.')
            else:
                self._setStatus('Completed.')

        def onTransferStatus(payload):
            if type(payload) is not ListType: return
            if len(payload) != 4: return
            for x in payload:
                if type(x) is not IntType: return
                if x < 0: return
            fileId, numFiles, transferred, fileSize = payload
            if numFiles != len(fileList): return
            if not (1 <= fileId <= numFiles): return
            if transferred > fileSize: return
            fname = os.path.split(fileList[fileId - 1])[1]
            lfname = fname.lower()
            pos = pending.get(lfname, None)
            if pos is None: return
            if transferred == fileSize:
                percent = 100
                del pending[lfname]
            else:
                percent = transferred * 100 / fileSize
            self._setStatus('Sending file (%d/%d): %s (%d%%)' %
                            (pos + 1, len(fileList), fname, percent))

        self.switchboard.addOnewayAgent('TransferStatus', onTransferStatus)
        self.rpcConn.setCloseCallback(onClose)