Example #1
0
    def handleClient(self,fd):
        # still need to figure out this whole thing.
        # Look at the Google group and on the 
        # slides called "event-driven-architecture"
        parser = HTMLParser(self.debug.isDebug())
        fileServer = FileServer(self.webServerConfig, self.debug.isDebug())

        while(True):
            request = self.cache[fd]
            try:
                data = self.clients[fd].recv(self.size)
                if data:
                    request += data
                else:
                    self.poller.unregister(fd)
                    self.clients[fd].close()
                    del self.clients[fd]
                    del self.last_used[fd]
                    break
            except socket.error, e:
                err = e.args[0]
                if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
                    break

            if request.find("\r\n\r\n"):
                response = ""
                if parser.parse(request):
                    self.debug.printMessage("Parsing Completed")
                    response = fileServer.getResponse(parser)

                else:
                    self.debug.printMessage("Parsing Failed")
                    errorCodes = ErrorResponseCodes()
                    response = errorCodes.get400()
                
                # Sending response
                while True:
                    try:
                        sentBytes = self.clients[fd].send(response)
                        break
                    except socket.error, e:
                        err = e.args[0]
                        if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
                            continue
                filePath = fileServer.getFilePath()
                if not filePath == "":
                    self.sendFile(self.clients[fd], filePath)

                break
    def __init__(self):
        self.myCommandServer = CommandServer()
        self.myCommandServer.registerObserver(self)
        self.myCommandServer.start()

        self.myMagtekUsbCardReader = MagtekUsbCardReader()
        self.myMagtekUsbCardReader.registerObserver(self)
        self.myMagtekUsbCardReader.start()

        self.myCameraCaptureServer = CameraCaptureServer()
        self.myCameraCaptureServer.start()

        self.myGuestDatabaseHandler = GuestDatabaseHandler()

        self.myLoggingDatabaseHandler = LoggingDatabaseHandler()
        self.myFileServer = FileServer()
        self.myFileServer.registerObserver(self)

        print "All modules have been asked to start"
 def __init__(self):
     self.myCommandServer = CommandServer()
     self.myCommandServer.registerObserver(self)
     self.myCommandServer.start()
     
     self.myMagtekUsbCardReader = MagtekUsbCardReader()
     self.myMagtekUsbCardReader.registerObserver(self)
     self.myMagtekUsbCardReader.start()
     
     self.myCameraCaptureServer = CameraCaptureServer()
     self.myCameraCaptureServer.start()
     
     self.myGuestDatabaseHandler = GuestDatabaseHandler()
     
     self.myLoggingDatabaseHandler = LoggingDatabaseHandler()
     self.myFileServer = FileServer()
     self.myFileServer.registerObserver(self)
     
     print "All modules have been asked to start"
Example #4
0
def run_server(hostname, server_port, raft_port, super_node_address):
    
    #  Restricts the instantiation of a class to one "single" instance. 
    activeNodesChecker = ActiveNodesChecker()
    shardingHandler = ShardingHandler(activeNodesChecker)
    raftHelper = RaftHelper(hostname, server_port, raft_port, activeNodesChecker, super_node_address)

    # Declare the gRPC server with 10 max_workers
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

    # Add FileService to the server.
    fileService_pb2_grpc.add_FileserviceServicer_to_server(FileServer(hostname, server_port, activeNodesChecker, shardingHandler, super_node_address), server)
    
    # Add HeartBeatService to the server.
    heartbeat_pb2_grpc.add_HearBeatServicer_to_server(HeartbeatService.Heartbeat(), server)

    # Start the server on server_port.
    server.add_insecure_port('[::]:{}'.format(server_port))
    server.start()

    print("Starting raft")    

    # Start raft utility on separate thread.
    t1 = Thread(target=RaftHelper.startRaftServer, args=(raftHelper,))

    # Start activeNodeChecker utility on separate thread.
    t2 = Thread(target=ActiveNodesChecker.readAvailableIPAddresses, args=(activeNodesChecker,))

    t2.start()
    t1.start()

    print("Both threads have been started")

    # Keep the server running for '_ONE_DAY_IN_SECONDS' seconds.
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)
class MainServer():
    def __init__(self):
        self.myCommandServer = CommandServer()
        self.myCommandServer.registerObserver(self)
        self.myCommandServer.start()

        self.myMagtekUsbCardReader = MagtekUsbCardReader()
        self.myMagtekUsbCardReader.registerObserver(self)
        self.myMagtekUsbCardReader.start()

        self.myCameraCaptureServer = CameraCaptureServer()
        self.myCameraCaptureServer.start()

        self.myGuestDatabaseHandler = GuestDatabaseHandler()

        self.myLoggingDatabaseHandler = LoggingDatabaseHandler()
        self.myFileServer = FileServer()
        self.myFileServer.registerObserver(self)

        print "All modules have been asked to start"

    def notify(self, subjectName, eventType, message):
        if eventType == "status":
            print subjectName, "status", message
        if subjectName == "CommandServer" and eventType == "status" and message == "Closing connection":
            self.myFileServer.closeConnection()
        if subjectName == "CommandServer" and eventType == "message":
            self.handleTcpMessages(message)
        elif subjectName == "FileServer" and eventType == "status":
            if message[0:20] == "Ready to serve file:":
                self.myCommandServer.sendMessage("Image from disk is ready:" +
                                                 message[20:])
        elif subjectName == "CardReader" and eventType == "swipe":
            self.handleSwipe(
                HealthInsuranceCardInterpreter.Interpitate(message))

    def handleTcpMessages(self, message):
        print "CommandServer have recived message:", message
        if message == "pending":
            returnMessage = "status:connection accepted#"
            users = self.myLoggingDatabaseHandler.getUsernames()
            if len(users) > 0:
                returnMessage += "users:"
                for currentUsername in users:
                    returnMessage += "username:"******"#"
                returnMessage += "#"
            self.myCommandServer.sendMessage(returnMessage)
        elif message == "start video server":
            self.myCameraCaptureServer.showVideo()
            self.myCommandServer.sendMessage("video server is ready")

        elif message[0:17] == "take picture for ":
            filePath = self.myCameraCaptureServer.takePicture("Images")
            self.myGuestDatabaseHandler.addImageToGuest(message[17:], filePath)
            self.myFileServer.serveFile(filePath)
        elif message[0:7] == "search:":
            print message
            name = re.search(r"name:(.*?)#", message[7:]).group(1)
            sex = re.search(r"sex:(.*?)#", message[7:]).group(1)
            searchResult = self.myGuestDatabaseHandler.searchForGuests(
                name, sex)
            commandString = "searchResult:"
            if searchResult:
                for guestEntry in searchResult:
                    commandString += self.createGuestInfoCommandString(
                        guestEntry)
            commandString += "#"
            self.myCommandServer.sendMessage(commandString)
            # sendGuestInfo:guestId:18#user:username:Nick Storsen#password:1234###
        elif message[0:13] == "sendGuestInfo":
            guestId = re.search(r"guestId:(.*?)#", message).group(1)
            username = re.search(r"username:(.*?)#", message[17:]).group(1)
            password = re.search(r"password:(.*?)#", message[17:]).group(1)
            if self.myLoggingDatabaseHandler.addEvent(
                    "Requested guest info for id: " + guestId, username,
                    password):
                guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuestById(
                    guestId)
                commandString = self.createGuestInfoCommandString(
                    guestFromDataBase)
                print commandString
                self.myCommandServer.sendMessage(commandString)
        elif message[0:23] == "send picture from disk:":
            self.myFileServer.serveFile(message[23:len(message) - 1])
        elif message == "give me the night list":
            guestsForNight = self.myGuestDatabaseHandler.getGuestsForNight()
            commandString = "guestsForNight:"
            if guestsForNight:
                for guestEntry in guestsForNight:
                    commandString += self.createGuestInfoCommandString(
                        guestEntry)
            commandString += "#"
            print commandString
            self.myCommandServer.sendMessage(commandString)
        elif message[0:3] == "BAN":
            #BAN:guestId:1#timeFrame:1 Months#user:username:Ole Andersen#password:A###
            guestId = re.search(r"guestId:(.*?)#", message).group(1)
            timeFrame = re.search(r"timeFrame:(.*?) Months#", message).group(1)
            username = re.search(r"username:(.*?)#", message).group(1)
            password = re.search(r"password:(.*?)#", message).group(1)
            #if self.myLoggingDatabaseHandler.addEvent("BANNED guest id: " +guestId , username, password):
            if timeFrame > 0:
                self.myGuestDatabaseHandler.addEventToGuest(
                    guestId,
                    "BAN " + (datetime.date.today() + datetime.timedelta(
                        int(timeFrame) * 365 / 12)).isoformat())
                print "BAN:dateTime:" + (
                    datetime.date.today() + datetime.timedelta(
                        int(timeFrame) * 365 / 12)).isoformat() + "# "
            else:
                self.myGuestDatabaseHandler.addEventToGuest(
                    guestId, "BAN Life")

            #  print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# "
            #else:
            #    pass
            #self.myGuestDatabaseHandler.addEventToGuest(re.search(r"guestId:(.*?)#", message).group(1), BAN )

    def handleSwipe(self, cardInfo):
        guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(
            str(cardInfo[0]), str(cardInfo[1]))
        if not guestFromDataBase:
            self.myGuestDatabaseHandler.addGuest(str(cardInfo[0]),
                                                 str(cardInfo[1]),
                                                 str(cardInfo[2]))
            guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(
                str(cardInfo[0]), str(cardInfo[1]))
        else:
            self.myGuestDatabaseHandler.enterGuest(guestFromDataBase[0])
        commandString = self.createGuestSwipeInfoCommandString(
            guestFromDataBase)
        print commandString
        self.myCommandServer.sendMessage(commandString)

    def createGuestSwipeInfoCommandString(self, informationList):
        if informationList == None:
            return
        returnString = "guestSwipeInfo:guestId:" + str(
            informationList[0]) + "#"
        returnString += " Image:" + str(
            informationList[4]) + "# DocumentationImage:" + str(
                informationList[5]) + "#"
        returnString += " Events:"
        for eventItem in informationList[6]:
            returnString += "Event:dateTime:" + eventItem[
                0] + "#Description:" + eventItem[1] + "##"
        returnString += "##"
        return returnString

    def createGuestInfoCommandString(self, informationList):
        if informationList == None:
            return
        returnString = "guestInfo:name:" + str(informationList[1]) + "#"
        returnString += " birthday:" + str(informationList[2]) + "#"
        returnString += " sex:" + str(informationList[3]) + "#"
        returnString += " guestId:" + str(informationList[0]) + "#"
        returnString += " Image:" + str(
            informationList[4]) + "# DocumentationImage:" + str(
                informationList[5]) + "#"
        returnString += " Events:"
        for eventItem in informationList[6]:
            returnString += "Event:dateTime:" + eventItem[
                0] + "#Description:" + eventItem[1] + "##"
        returnString += "##"
        return returnString
class MainServer():
    def __init__(self):
        self.myCommandServer = CommandServer()
        self.myCommandServer.registerObserver(self)
        self.myCommandServer.start()
        
        self.myMagtekUsbCardReader = MagtekUsbCardReader()
        self.myMagtekUsbCardReader.registerObserver(self)
        self.myMagtekUsbCardReader.start()
        
        self.myCameraCaptureServer = CameraCaptureServer()
        self.myCameraCaptureServer.start()
        
        self.myGuestDatabaseHandler = GuestDatabaseHandler()
        
        self.myLoggingDatabaseHandler = LoggingDatabaseHandler()
        self.myFileServer = FileServer()
        self.myFileServer.registerObserver(self)
        
        print "All modules have been asked to start"

    def notify(self, subjectName,eventType, message):
        if eventType =="status":
            print subjectName, "status", message
        if subjectName == "CommandServer" and eventType =="status" and message == "Closing connection":
            self.myFileServer.closeConnection()
        if subjectName == "CommandServer" and eventType =="message":
            self.handleTcpMessages(message)
        elif subjectName == "FileServer" and eventType =="status":
            if message[0:20] == "Ready to serve file:":
                self.myCommandServer.sendMessage("Image from disk is ready:" + message[20:])   
        elif subjectName == "CardReader" and eventType =="swipe":
            self.handleSwipe(HealthInsuranceCardInterpreter.Interpitate(message))
       
    def handleTcpMessages(self, message):
        print "CommandServer have recived message:", message
        if message == "pending":
            returnMessage = "status:connection accepted#"
            users = self.myLoggingDatabaseHandler.getUsernames()
            if len(users) >0:
                returnMessage += "users:"
                for currentUsername in users:
                    returnMessage += "username:"******"#"
                returnMessage += "#"
            self.myCommandServer.sendMessage(returnMessage)
        elif message == "start video server":
            self.myCameraCaptureServer.showVideo()
            self.myCommandServer.sendMessage("video server is ready")
            
        elif message[0:17] == "take picture for ":
            filePath = self.myCameraCaptureServer.takePicture("Images")
            self.myGuestDatabaseHandler.addImageToGuest(message[17:], filePath)
            self.myFileServer.serveFile(filePath)
        elif message[0:7] == "search:":
            print message
            name = re.search(r"name:(.*?)#", message[7:]).group(1)
            sex = re.search(r"sex:(.*?)#", message[7:]).group(1)
            searchResult = self.myGuestDatabaseHandler.searchForGuests(name, sex)
            commandString = "searchResult:"
            if searchResult:
                for guestEntry in searchResult:
                    commandString += self.createGuestInfoCommandString(guestEntry)
            commandString += "#"
            self.myCommandServer.sendMessage(commandString)
            # sendGuestInfo:guestId:18#user:username:Nick Storsen#password:1234###
        elif message[0:13] == "sendGuestInfo":
            guestId  = re.search(r"guestId:(.*?)#", message).group(1)
            username = re.search(r"username:(.*?)#", message[17:]).group(1)
            password= re.search(r"password:(.*?)#", message[17:]).group(1)
            if self.myLoggingDatabaseHandler.addEvent("Requested guest info for id: " +guestId , username, password):
                guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuestById(guestId)
                commandString = self.createGuestInfoCommandString(guestFromDataBase)
                print commandString
                self.myCommandServer.sendMessage(commandString)
        elif message[0:23] == "send picture from disk:":
            self.myFileServer.serveFile(message[23:len(message) - 1])
        elif message == "give me the night list":
            guestsForNight = self.myGuestDatabaseHandler.getGuestsForNight()
            commandString = "guestsForNight:"
            if guestsForNight:
                for guestEntry in guestsForNight:
                    commandString += self.createGuestInfoCommandString(guestEntry)
            commandString += "#"
            print commandString
            self.myCommandServer.sendMessage(commandString)
        elif message[0:3] == "BAN":
            #BAN:guestId:1#timeFrame:1 Months#user:username:Ole Andersen#password:A###
            guestId  = re.search(r"guestId:(.*?)#", message).group(1)
            timeFrame  = re.search(r"timeFrame:(.*?) Months#", message).group(1)
            username = re.search(r"username:(.*?)#", message).group(1)
            password = re.search(r"password:(.*?)#", message).group(1)
            #if self.myLoggingDatabaseHandler.addEvent("BANNED guest id: " +guestId , username, password):
            if timeFrame > 0:
                self.myGuestDatabaseHandler.addEventToGuest(guestId, "BAN " + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat())
                print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# "
            else:
                 self.myGuestDatabaseHandler.addEventToGuest(guestId, "BAN Life")
                   
              #  print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# "
            #else:
            #    pass
            #self.myGuestDatabaseHandler.addEventToGuest(re.search(r"guestId:(.*?)#", message).group(1), BAN )
            
    def handleSwipe(self, cardInfo):
        guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(str(cardInfo[0]), str(cardInfo[1]))
        if not guestFromDataBase:
            self.myGuestDatabaseHandler.addGuest(str(cardInfo[0]), str(cardInfo[1]), str(cardInfo[2]))
            guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(str(cardInfo[0]), str(cardInfo[1]))
        else:
            self.myGuestDatabaseHandler.enterGuest(guestFromDataBase[0])
        commandString = self.createGuestSwipeInfoCommandString(guestFromDataBase)
        print commandString
        self.myCommandServer.sendMessage(commandString)
        
    def createGuestSwipeInfoCommandString(self, informationList):
        if informationList == None:
            return
        returnString  = "guestSwipeInfo:guestId:" + str(informationList[0]) + "#"
        returnString += " Image:" + str(informationList[4]) + "# DocumentationImage:" + str(informationList[5]) + "#"
        returnString += " Events:"
        for eventItem in informationList[6]:
            returnString += "Event:dateTime:" + eventItem[0] + "#Description:" + eventItem[1] + "##"
        returnString += "##"
        return returnString
    def createGuestInfoCommandString(self, informationList):
        if informationList == None:
            return
        returnString  = "guestInfo:name:" + str(informationList[1]) +"#"
        returnString += " birthday:" + str(informationList[2]) + "#"
        returnString += " sex:" + str(informationList[3]) + "#"
        returnString += " guestId:" + str(informationList[0]) + "#"
        returnString += " Image:" + str(informationList[4]) + "# DocumentationImage:" + str(informationList[5]) + "#"
        returnString += " Events:"
        for eventItem in informationList[6]:
            returnString += "Event:dateTime:" + eventItem[0] + "#Description:" + eventItem[1] + "##"
        returnString += "##"
        return returnString