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 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