Example #1
0
 def __init__(self,peer):
     '''
     Constructor
     '''
     
     self.__peer = peer
     self.__tradings = TradingsRepository(peer)
     self.__isa= InformationServiceAgent(self)
Example #2
0
 def setServiceForTrading(self,trading):
     
    
     TradingLogger().resgiterLoggingInfo("Set Service For Trading ,Peer = %s"%(self.__peer.getPID()))
     self.getTradings().addElement(trading)
     self.__isa= InformationServiceAgent(self)
     self.__isa.searchServiceForTrading(trading)
     
     tradingUUID = trading.getUUID()
     #print " trading 1 ", tradingUUID
     timeStart =time.time()
     
     peer = ""
     
     while (trading.getStatus() == AbstractTrading.STARTED and ((time.time() - timeStart) < 20)) :
         
         #print " trading 2 ", tradingUUID
         
         #trading = self.getTradings().getElementID(tradingUUID)
         #
         if trading.getStatus() == AbstractTrading.NOTCOMLETE:
             continue 
         
        
         if (time.time() - timeStart) > 10 and trading.getAttempt() == 1:
             #print "time --->>>", time.time()-timeStart, trading.getAttempt()
             timeStart =time.time()
             trading.setAttempt(trading.getAttempt() +1)
             self.__isa.searchServiceForTrading(trading)
             
         
        
         peer,trust = trading.definyPeerTrading()
         #print "num peer tra",trading.getUUID(),time.time() , timeStart,len(trading.getPeersTrading())
         if trust >= 0.5 or len(trading.getPeersTrading())>3:
             if self.__isa.sendResponseToPeerWinner(trading,self.getPeer().getPID(),peer)== AbstractTrading.ACK:
                 trading.setStatus(AbstractTrading.COMPLETE)
                
                 ownershipCertificate = self.__isa.sendOwnershipCertificate(trading,self.getPeer().getURN(),peer)
                 trading.setOwnershipCertificate(ownershipCertificate)
             else:
                 trading.getPeersTrading().pop(peer)    
                 
             
     self.__isa.sendResponseToPeerAll(trading,self.getPeer().getPID(),peer)
     print "****** Final Trading ,Peer = %s = %s"%(self.__peer.getPID(),tranding.getSNow())
Example #3
0
class TradingManager(object):
    '''
    classdocs
    '''


    def __init__(self,peer):
        '''
        Constructor
        '''
        
        self.__peer = peer
        self.__tradings = TradingsRepository(peer)
        self.__isa= InformationServiceAgent(self)
        
    
    def getPeer(self):
        return self.__peer
        
    def getISA(self):
        return self.__isa
    
    def getTradings(self):
        return self.__tradings
    
    def creatTradingService(self,service,periodStart,periodEnd,quantity,type,snow):
        
        
        trading = TradingService(snow,service,periodStart,periodEnd,quantity,type)
        
        #TradingLogger().resgiterLoggingInfo("randig = URN = ,Peer = %s "%(self.__peer.getPID()))
        
        self.createTrading(trading)
        
        return trading
    
    
    
    def setServiceForTrading(self,trading):
        
       
        TradingLogger().resgiterLoggingInfo("Set Service For Trading ,Peer = %s"%(self.__peer.getPID()))
        self.getTradings().addElement(trading)
        self.__isa= InformationServiceAgent(self)
        self.__isa.searchServiceForTrading(trading)
        
        tradingUUID = trading.getUUID()
        #print " trading 1 ", tradingUUID
        timeStart =time.time()
        
        peer = ""
        
        while (trading.getStatus() == AbstractTrading.STARTED and ((time.time() - timeStart) < 20)) :
            
            #print " trading 2 ", tradingUUID
            
            #trading = self.getTradings().getElementID(tradingUUID)
            #
            if trading.getStatus() == AbstractTrading.NOTCOMLETE:
                continue 
            
           
            if (time.time() - timeStart) > 10 and trading.getAttempt() == 1:
                #print "time --->>>", time.time()-timeStart, trading.getAttempt()
                timeStart =time.time()
                trading.setAttempt(trading.getAttempt() +1)
                self.__isa.searchServiceForTrading(trading)
                
            
           
            peer,trust = trading.definyPeerTrading()
            #print "num peer tra",trading.getUUID(),time.time() , timeStart,len(trading.getPeersTrading())
            if trust >= 0.5 or len(trading.getPeersTrading())>3:
                if self.__isa.sendResponseToPeerWinner(trading,self.getPeer().getPID(),peer)== AbstractTrading.ACK:
                    trading.setStatus(AbstractTrading.COMPLETE)
                   
                    ownershipCertificate = self.__isa.sendOwnershipCertificate(trading,self.getPeer().getURN(),peer)
                    trading.setOwnershipCertificate(ownershipCertificate)
                else:
                    trading.getPeersTrading().pop(peer)    
                    
                
        self.__isa.sendResponseToPeerAll(trading,self.getPeer().getPID(),peer)
        print "****** Final Trading ,Peer = %s = %s"%(self.__peer.getPID(),tranding.getSNow())
        
    def createTrading(self,trading):
        
        try:        
            t = threading.Thread(target = self.setServiceForTrading,args=([trading]))
        
            t.start()
        except:
            
            traceback.print_exc()