tests/old/stopableServer.py
branchdevel
changeset 97 7556364b8104
parent 81 fea4c6760ca5
equal deleted inserted replaced
94:4349f10d77a6 97:7556364b8104
       
     1 import ConfigParser
       
     2 
       
     3 import threading
       
     4 
       
     5 from multiprocessing import Queue
       
     6 from multiprocessing.managers import BaseManager
       
     7 
       
     8 from iro import xmlrpc,anbieter
       
     9 from iro.user import User, Admin
       
    10 from iro.iro import MySMTP,MySmstrade,MyUserDB
       
    11 from iro.job import SMSJob, FAXJob, MailJob
       
    12 from iro.joblist import Joblist
       
    13 from iro.providerlist import Providerlist
       
    14 
       
    15 class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread):
       
    16     running=False
       
    17     def __init__(self, *args, **kwargs):
       
    18         xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
       
    19         threading.Thread.__init__(self)
       
    20         self.timeout=.5
       
    21    
       
    22     def start(self):
       
    23         self.running=True
       
    24         threading.Thread.start(self)
       
    25  
       
    26    
       
    27     def run(self):
       
    28         # *serve_forever* muss in einem eigenen Thread laufen, damit man es
       
    29         # unterbrochen werden kann!
       
    30         while (self.running):
       
    31             try:
       
    32                 self.handle_request()
       
    33             except :
       
    34                 break
       
    35    
       
    36     def stop(self):
       
    37         if (self.running):
       
    38             self.running=False
       
    39             self.server_close()
       
    40             self.join()
       
    41 
       
    42     def __del__(self):
       
    43         self.stop()
       
    44  
       
    45     def __enter__(self):
       
    46         self.start()
       
    47         return self
       
    48 
       
    49     def __exit__(self,type,value,traceback):
       
    50         self.stop()
       
    51 
       
    52 
       
    53 class Internal:
       
    54     pass
       
    55 
       
    56 def init_server():
       
    57     userlist=[{"name":"test","password":"test",  "class":User},
       
    58               {"name":"test2","password":"test2", "class": User},
       
    59               {"name":"admin","password":"admin", "class": Admin}]
       
    60 
       
    61 
       
    62     
       
    63     class MyManager(BaseManager):
       
    64         pass
       
    65 
       
    66     internal=Internal()
       
    67     
       
    68     MyManager.register('SMSJob', SMSJob) 
       
    69     MyManager.register('FaxJob', FAXJob) 
       
    70     MyManager.register('MailJob',MailJob) 
       
    71     MyManager.register('Providerlist',Providerlist) 
       
    72     manager = MyManager()
       
    73     manager.start()
       
    74     
       
    75     internal.manager=manager
       
    76     
       
    77     #anbieter erzeugen und konfigurieren
       
    78     sip=anbieter.sipgate()
       
    79     sip.read_basic_config("iro.conf")
       
    80     
       
    81     localhost=MySMTP()
       
    82     localhost.read_basic_config("iro.conf")
       
    83 
       
    84     smstrade=MySmstrade()
       
    85     smstrade.read_basic_config("iro.conf")
       
    86 
       
    87     #Benutzerdatenbank erstellen
       
    88     queue = Queue()
       
    89     internal.queue=queue
       
    90     provider=Providerlist()
       
    91     internal.provider=provider
       
    92     provider.add("sipgate", sip, ["sms", "fax", ])
       
    93     provider.add("smstrade", smstrade, ["sms", ])
       
    94     provider.add("geonet", None, ["sms", "fax", ])
       
    95     provider.add("fax.de", None, ["sms", "fax", ])
       
    96     provider.add("localhost", localhost, ["mail", ])
       
    97     provider.setDefault("sms","smstrade")
       
    98     provider.setDefault("fax","sipgate")
       
    99     provider.setDefault("mail","localhost")
       
   100     jobqueue=Joblist(manager,  queue, provider)
       
   101     internal.jobqueue=jobqueue
       
   102     userdb=MyUserDB(userlist,jobqueue)
       
   103     internal.userdb=userdb
       
   104 
       
   105 
       
   106     #Server starten
       
   107     cp = ConfigParser.ConfigParser()
       
   108     cp.read(["iro.conf"])
       
   109     cert=cp.get('server', 'cert')
       
   110     key=cp.get('server', 'key')
       
   111     serv = StoppableXMLRPCServer(addr=("localhost", 8000), 
       
   112                                       userdb=userdb,
       
   113                                       certificate=cert,privatekey=key,
       
   114                                       logRequests=False)
       
   115     serv.relam="xmlrpc"
       
   116     internal.serv=serv
       
   117     return internal
       
   118