# ---------------------------------------------------------------------------- #
## \file expect.py
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
import pexpect
import time
import sys

lserver = sys.argv[1]
musicdir = sys.argv[2]
verbose = True if len(sys.argv) > 3 and sys.argv[3] == '-v' else False
err = False


class Server:

    def __init__(self):
        self.s = pexpect.spawn('build/mpserver {}'.format(musicdir))
        if verbose:
            self.s.logfile = sys.stdout.buffer
        time.sleep(1)

    def __del__(self):
        if err:
            return
        self.s.expect(pexpect.EOF)


class send:

    def __init__(self, method):
        if err:
            return
        self.c = pexpect.spawn('client.py {} {}'.format(lserver, method))
        if verbose:
            self.c.logfile = sys.stdout.buffer
            print(method)

    def __del__(self):
        if err:
            return
        self.c.expect(pexpect.EOF)

    def expect(self, s):
        global err
        if err:
            return
        try:
            self.c.expect_exact('{}\r\n'.format(s))
        except:
            err = True
            raise


s = Server()