• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

import sys
sys.path = ['..'] + sys.path
 
import zope
from twisted.internet import reactor
 
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.transport import TTwisted
from thrift.protocol import TBinaryProtocol
 
from lib.genpy.uidticketer import UIDTicketer
from lib.genpy.uidticketer.ttypes import *
 
import idworker
 
class TicketServer(object):
    zope.interface.implements(UIDTicketer.Iface)
 
    def __init__(self, worker_id, worker_increment, worker_offset, mysql_host, mysql_user, mysql_passwd, mysql_db):
        self.worker = idworker.IdWorker(worker_id, worker_increment, worker_offset, mysql_host, mysql_user, mysql_passwd, mysql_db)
 
    def get_worker_id(self):
        return self.worker.get_worker_id()
 
    def get_worker_increment(self):
        return self.worker.get_worker_increment()
 
    def get_worker_offset(self):
        return self.worker.get_worker_offset()
 
    def get_id(self):
        return self.worker.get_id()
 
def print_usage():
    print 'python ticketserver.py <port> <worker_id> <worker_increment> <worker_offset> <mysql_host> <mysql_user> <mysql_passwd> <mysql_db>'
    print 'e.g.: python ticketserver.py 2222 1 2 3 localhost user passwd uidticketer'
 
def main():
    if len(sys.argv) != 9:
        return print_usage()
 
    port = int(sys.argv[1])
    worker_id = int(sys.argv[2])
    worker_increment = int(sys.argv[3])
    worker_offset = int(sys.argv[4])
    mysql_host = sys.argv[5]
    mysql_user = sys.argv[6]
    mysql_passwd = sys.argv[7]
    mysql_db = sys.argv[8]
 
    reactor.listenTCP(port, TTwisted.ThriftServerFactory(
                                processor=UIDTicketer.Processor(TicketServer(worker_id, worker_increment, worker_offset, mysql_host, mysql_user, mysql_passwd, mysql_db)),
                                iprot_factory=TBinaryProtocol.TBinaryProtocolFactory()
    ))
    reactor.run()
 
if __name__ == '__main__':
    sys.exit(main())