import socket, select, string, sys

username = raw_input("Enter a username: ")  # type: str

def prompt() :
	sys.stdout.write('[' + username + '] ');
	sys.stdout.flush()

#main function
if __name__ == "__main__":

	if(len(sys.argv) < 3) :
		print 'Usage: python telnet.py hostname port'
		sys.exit()

	host = sys.argv[1]
	port = int(sys.argv[2])

	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.settimeout(2)

	# connect to remote host
	try :
		s.connect((host, port))
	except :
		print 'Unable to connect'
		sys.exit()

	print """
 /$$   /$$ /$$$$$$$  /$$   /$$ /$$$$$$$                  /$$                   /$$
| $$  / $$| $$__  $$| $$  | $$| $$__  $$                | $$                  | $$
|  $$/ $$/| $$  \ $$| $$  | $$| $$  \ $$        /$$$$$$$| $$$$$$$   /$$$$$$  /$$$$$$
 \  $$$$/ | $$$$$$$/| $$  | $$| $$$$$$$        /$$_____/| $$__  $$ |____  $$|_  $$_/
  >$$  $$ | $$____/ | $$  | $$| $$__  $$      | $$      | $$  \ $$  /$$$$$$$  | $$
 /$$/\  $$| $$      | $$  | $$| $$  \ $$      | $$      | $$  | $$ /$$__  $$  | $$ /$$
| $$  \ $$| $$      |  $$$$$$/| $$$$$$$/      |  $$$$$$$| $$  | $$|  $$$$$$$  |  $$$$/
|__/  |__/|__/       \______/ |_______/        \_______/|__/  |__/ \_______/   \___/


    """
	print 'Connected to remote host. Start sending messages'
	prompt()

	s.send(username);

	while 1:
		socket_list = [sys.stdin, s]

		# Get the list sockets which are readable
		read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])

		for sock in read_sockets:
			#incoming message from remote server
			if sock == s:
				data = sock.recv(4096)
				if not data :
					print '\nDisconnected from chat server'
					sys.exit()
				else :
					#print data
					sys.stdout.write(data)
					prompt()

			#user entered a message
			else :
				msg = sys.stdin.readline()
				s.send(msg)
				prompt()
