from time import sleep
from sys import exit

import socket
import arduino_serial_comms as asc

SERVER_PORT = 5000
BUFFER_SIZE = 1024

STOP_TIME = 0.5

def setup_server():
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind(('', SERVER_PORT))
        s.listen(1)
        print("Waiting for Raspberry Pi to connect...")
        (conn, addr) = s.accept()
        print(f"Raspberry Pi connected by {addr}")
        return conn

def serve(conn, arduino):
    with conn:
        try:
            while True:
                direction = conn.recv(BUFFER_SIZE)
                if not direction:
                    break
                arduino.write(direction)
                asc.read_from_arduino(arduino)
        except KeyboardInterrupt:
            arduino.write("stop\n".encode('utf-8'))
            sleep(STOP_TIME)
            exit(130)

if __name__ == "__main__":
    arduino = asc.connect_to_arduino()
    conn = setup_server()
    serve(conn, arduino)
