import socket
import sys
import readline

class RemoteShell():
    "Wrapper around Python that can filter input/output to the shell"
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.prompt = '>>> '
        

    def send_data(self, data):
        if not data or data == '':
            data = " "
        # Create a socket (SOCK_STREAM means a TCP socket)
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # Connect to server and send data
        self.sock.connect((self.host, self.port))
        self.sock.send(data)
        # Receive data from the server and shut down
        response = self.sock.recv(1024)
        self.sock.close()
        if response in ['>>> ', '... ']:
            self.prompt = response
        else:
            self.prompt = ">>> "
            print response,

    def interact(self):
        while True:
            self.push()

    def push(self):
        line = raw_input(self.prompt)
        self.send_data(line)
        
if __name__ == '__main__':
    shell = RemoteShell('localhost', 50008)
    shell.interact()