Advertisement
Guest User

Untitled

a guest
Jun 16th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.56 KB | None | 0 0
  1. #!/usr/bin/python -u
  2. # -*- coding: iso8859-1 -*-
  3.  
  4. import logging
  5. logging.basicConfig()
  6. logging.getLogger("").setLevel(logging.DEBUG)
  7.  
  8. log = logging.getLogger("AMI")
  9.  
  10. from twisted.internet import reactor
  11. from starpy import manager
  12.  
  13. class MyAMIFactory(manager.AMIFactory):
  14.     amiWorker = None
  15.     def __init__(self, username, password, worker):
  16.         log.info("Inicializando MyAMIFactory...")
  17.         self.amiWorker = worker
  18.         manager.AMIFactory.__init__(self, username, password)
  19.        
  20.     def clientConnectionLost(self, connector, reason):
  21.         log.error("Connection Lost, reason: %s" % reason.value)
  22.         self.amiWorker.onLoseConnection(reason)
  23.         reactor.callLater(10, self.amiWorker.connect)
  24.  
  25.     def clientConnectionFailed(self, connector, reason):
  26.         log.error("Connection Lost, reason: %s" % reason.value)
  27.         self.amiWorker.onLoseConnection(reason)
  28.         reactor.callLater(10, self.amiWorker.connect)
  29.  
  30. class AMIWorker():
  31.    
  32.     connected  = False
  33.     amiFactory = None
  34.     ami        = None
  35.    
  36.     ami_host = None
  37.     ami_port = None
  38.     ami_user = None
  39.     ami_pass = None
  40.    
  41.     def __init__(self, hostname = '127.0.0.1', port = 5038, username = 'ami_user', password = 'ami_pass'):
  42.         log.info("Inicializando AMIWorker...")
  43.         self.ami_host   = hostname
  44.         self.ami_port   = port
  45.         self.ami_user   = username
  46.         self.ami_pass   = password
  47.         self.amiFactory = MyAMIFactory(self.ami_user, self.ami_pass, self)
  48.         self.handlers   = {
  49.             "Newchannel" : self._handleNewchannel,
  50.             "Hangup"     : self._handleHangup
  51.         }
  52.      
  53.         reactor.callLater(1, self.connect)
  54.        
  55.     def connect(self):
  56.         log.info("Tentando se conectar a %s:%s" % (self.ami_host, self.ami_port))
  57.         d = self.amiFactory.login(self.ami_host, self.ami_port)
  58.         d.addCallback(self.onLoginSuccess)
  59.         d.addErrback(self.onLoginFailure)
  60.         return d
  61.    
  62.     def onLoginSuccess(self, ami):
  63.         log.info("Autenticacao bem sucedida...")
  64.         self.ami       = ami
  65.         self.connected = True
  66.         for event, handler in self.handlers.items():
  67.             self.ami.registerEvent(event, handler)
  68.        
  69.     def onLoginFailure(self, reason):
  70.         log.error("Falha de Autenticacao: %s" % reason.value)
  71.         self.connected = False
  72.        
  73.     def onLoseConnection(self, reason):
  74.         log.error("Perda de Conexao: %s" % reason.value)
  75.         self.connected = False
  76.    
  77.     def _handleNewchannel(self, ami, event):
  78.         log.debug("Recebido Evento Newchannel...")
  79.         print event # isso eh um dicionario
  80.          
  81.     def _handleHangup(self, ami, event):
  82.         log.debug("Recebido Evento Hangup...")
  83.         print event # isso eh um dicionario
  84.  
  85. if __name__ == '__main__':
  86.     ami = AMIWorker('127.0.0.1', 5038, 'guax', 'guaxinim')
  87.     reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement