#!/usr/bin/env python
import argparse

from greenrpc import DEFAULT_PORT
from greenrpc.server import TCPServer, WSGIServer

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Start a new GreenRPC TCP Server")
    parser.add_argument("modules", metavar="<module>", type=str, nargs="+",
                        help="Python module to expose for the RPC Server")
    default_bind = "127.0.0.1:%s" % (DEFAULT_PORT, )
    parser.add_argument("--bind", dest="bind", type=str, default=default_bind,
                        help="<address>:<port> to bind the server to (default: %s)" % (default_bind, ))
    parser.add_argument("--spawn", dest="spawn", type=int, default=4,
                        help="number of greenlets to spawn (default: 4)")
    parser.add_argument("--http", dest="http", action="store_true", default=False,
                        help="whether to start an http server instead of tcp (default: False)")

    args = parser.parse_args()
    address, _, port = args.bind.partition(":")
    bind = (address, int(port))
    if args.http:
        server = WSGIServer(args.modules, bind=bind, spawn=args.spawn)
    else:
        server = TCPServer(args.modules, bind=bind, spawn=args.spawn)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print "Stopping GreenRPC Server"
        server.stop()
