#! /usr/bin/python
from CompareAndSwap import CompareAndSwapRegister
import re
import socket

def serverCAS():
    pat = re.compile('^\s*(\d+)\s+(\d+)\s*\n$')
    reg = CompareAndSwapRegister()

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ;
        s.bind(('', 22222))
        s.listen(1)

    
        while True:
            strm, addr = s.accept()
            print "Connection from ", addr
            instrm  = strm.makefile('r')
            outstrm = strm.makefile('w')
            line = instrm.recv(1000)
            while line:
                print line,
                mat = pat.match(line)
                if (mat == None):
                    repl = 'Bad Syntax'
                else:
                    repl = (str(reg.CompareAndSwap(int(mat.group(1)),
                                                   int(mat.group(2)))))
                strm.send(repl+'\n\r')
                line = strm.recv(1000)
            strm.close()
    except KeyboardInterrupt:
        print 'Exiting'
        s.close()


if __name__ == "__main__":
    serverCAS()

