1#!/usr/bin/env python
2
3import logging
4from tornado.ioloop import IOLoop
5from tornado import gen
6from tornado.iostream import StreamClosedError
7from tornado.tcpserver import TCPServer
8from tornado.options import options, define
9
10define("port", default=9888, help="TCP port to listen on")
11logger = logging.getLogger(__name__)
12
13
14class EchoServer(TCPServer):
15    @gen.coroutine
16    def handle_stream(self, stream, address):
17        while True:
18            try:
19                data = yield stream.read_until(b"\n")
20                logger.info("Received bytes: %s", data)
21                if not data.endswith(b"\n"):
22                    data = data + b"\n"
23                yield stream.write(data)
24            except StreamClosedError:
25                logger.warning("Lost client at host %s", address[0])
26                break
27            except Exception as e:
28                print(e)
29
30
31if __name__ == "__main__":
32    options.parse_command_line()
33    server = EchoServer()
34    server.listen(options.port)
35    logger.info("Listening on TCP port %d", options.port)
36    IOLoop.current().start()
37