#! /usr/bin/python3
""" With class and concurrently using threads
    Doesn't want to stop
"""
import threading
import socketserver
import socket
import sys
import signal

the_sum = 0

class SumHandler(socketserver.BaseRequestHandler):
    """
    Instantiated for each connection
    """
    def handle(self):
        in_stream = self.request.makefile("r")
        out_stream = self.request.makefile("w")
        client_address = self.request.getpeername()
        client_print = "{0}:{1}".format(socket.getfqdn(client_address[0]),
                                        client_address[1])
        print("Opening connection with {0}".format(client_print))
        try:
            while True:
                number_line = in_stream.readline().strip()
                print("{0} --> {1}".format(client_print, number_line))
                next_int = int(number_line)
                print("Reading the_sum")
                the_sum = the_sum + next_int
                out_stream.write("{0}\r\n".format(the_sum))
                out_stream.flush()
                print("{0} <-- {1}".format(client_print, the_sum))
        except Exception:
            # You'll get here on end-of-connection
            pass
        print("Closing connection with {0}".format(client_print))

class SumTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

if __name__ == "__main__":
    if len(sys.argv) <= 1:
        echo_port = 43210
    else:
        try:
            echo_port = int(sys.argv[1])
        except ValueError:
            print("Invalid port number: {0}".format(sys.argv[1]))
            sys.exit(2)
    try:
        server = SumTCPServer(("", echo_port), SumHandler)
        server_thread = threading.Thread(target=server.serve_forever)
        server_thread.daemon = False
        server_thread.start()
        signal.pause()
    except KeyboardInterrupt:
        pass
