#!/usr/bin/env python3

from mock_decorators import setup, teardown
from flask import Flask, request
from threading import Thread
import socket
import select
import sys
import os

@setup('WiFi release ClientContext')
def setup_tcpsrv(e):

    global thread

    app = Flask(__name__)

    def run():

        global running

        running = False
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        for port in range(8266, 8285 + 1):
            try:
                print ('trying port %d' %port, file=sys.stderr)
                server_address = ("0.0.0.0", port)
                sock.bind(server_address)
                sock.listen(1)
                running = True
                break
            except Exception:
                print >>sys.stderr, 'busy'
        if not running:
            return
        print ('starting up on %s port %s' % server_address, file=sys.stderr)
        print ( 'waiting for connections', file=sys.stderr)
        while running:
            print ('loop', file=sys.stderr)
            readable, writable, errored = select.select([sock], [], [], 1.0)
            if readable:
                connection, client_address = sock.accept()
                try:
                    print('client connected: %s' % str(client_address), file=sys.stderr)
                finally:
                    print ('close', file=sys.stderr)
                    connection.shutdown(socket.SHUT_RDWR)
                    connection.close()

    thread = Thread(target=run)
    thread.start()

@teardown('WiFi release ClientContext')
def teardown_tcpsrv(e):
    
    global thread
    global running
    
    print ('closing', file=sys.stderr)
    running = False
    thread.join()
    return 0