• 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.snowflake import Snowflake
from lib.genpy.snowflake.ttypes import *
 
import idworker
 
class SnowflakeServer(object):
    zope.interface.implements(Snowflake.Iface)
 
    def __init__(self, worker_id, datacenter_id):
        self.worker = idworker.IdWorker(worker_id, datacenter_id)
 
    def get_worker_id(self):
        return self.worker.get_worker_id()
 
    def get_datacenter_id(self):
        return self.worker.get_datacenter_id()
 
    def get_timestamp(self):
        return self.worker.get_timestamp()
 
    def get_id(self):
        return self.worker.get_id()
 
def print_usage():
    print 'python snowflakeserver.py <port> <worker_id> <datacenter_id>'
    print 'e.g. python snowflakeserver.py 1111 1 1'
 
def main():
    if len(sys.argv) != 4:
        return print_usage()
 
    port = int(sys.argv[1])
    worker_id = int(sys.argv[2])
    datacenter_id = int(sys.argv[3])
    reactor.listenTCP(port, TTwisted.ThriftServerFactory(
                                processor=Snowflake.Processor(SnowflakeServer(worker_id, datacenter_id)),
                                iprot_factory=TBinaryProtocol.TBinaryProtocolFactory()
    ))
    reactor.run()
 
if __name__ == '__main__':
    sys.exit(main())