def testProcessRetrievedInventory(): print(sys._getframe().f_code.co_name + ": ") dbConnect = DbConnect(InventoryDAO.getDbDir()) connector = dbConnect.getConnection() customerId = 1 barcode = 1 quantity = 2 androidService = AndroidService() inventoryReservation = androidService.reserveInventoryIfAvailable(customerId, barcode, quantity) print(inventoryReservation) # (True, reservedInventoryLoc, newVirtualCartRowId) arduinoService = ArduinoService() print( arduinoService.processRetrievedInventory(1, 1) ) inventoryDAO = InventoryDAO(connector) print( inventoryDAO.selectAllEntries() ) virtualCartDAO = VirtualCartDAO(connector) print( virtualCartDAO.selectAllEntries() ) print("===================================================") print("Testing testProcessRetrievedInventory-------------------complete\n\n\n")
def testNumItemsAvailable(): dbConnect = DbConnect(BarcodeDAO.getDbDir()) connector = dbConnect.getConnection() service = AndroidService() print(service.numItemsAvailable(1)) print("===================================================") print("Testing numItemsAvailable-------------------complete\n\n\n")
def testGetFirstPageInfo(): dbConnect = DbConnect(BarcodeDAO.getDbDir()) connector = dbConnect.getConnection() service = AndroidService() print(sys._getframe().f_code.co_name + ": ") print( service.getFirstPageInfo() ) print("===================================================") print("Testing getFirstPageInfo-------------------complete\n\n\n")
def testReserveInventoryIfAvailable(): dbConnect = DbConnect(InventoryDAO.getDbDir()) connector = dbConnect.getConnection() service = AndroidService() print(sys._getframe().f_code.co_name + ": ") print( service.reserveInventoryIfAvailable(1, 1, 1) ) print( service.numItemsAvailable(1) ) print( service.reserveInventoryIfAvailable(1, 1, 1) ) print( service.numItemsAvailable(1) ) print("===================================================") print("Testing reserveInventoryIfAvailable--------complete\n\n\n")
def main(): tabletService = AndroidService() # (True, [inventoryDetailsId, X_index, Y_index, X_encoder, Y_encoder]..., newVirtualCartRowId) reservationInfo1 = tabletService.reserveInventoryIfAvailable(1, 1, 1) reservationInfo2 = tabletService.reserveInventoryIfAvailable(1, 2, 1) depositInfo1 = (MessageFormat.depInv, 1) depositInfo2 = (MessageFormat.depInv, 2) print(reservationInfo1) print(reservationInfo2) aQueue = queue.Queue(maxsize=0) arduinoComm = ArduinoComm("/dev/ttyACM0", baudrate=9600, timeout=None) # [ MessageFormat.retInv # (True, # [inventoryDetailsId, barcodeDetailsFk, X_index, Y_index, X_encoder, Y_encoder, checkoutFlag], # newVirtualCartRowId) # ] robotService = ArduinoService() for info in reservationInfo1[1]: encAbove = robotService.getLocationBoxAbove(info[0]) aQueue.put([MessageFormat.retInv, (reservationInfo1[0], list(info)+encAbove, reservationInfo1[2])]) arduinoComm.enqueue(aQueue) time.sleep(5) for info in reservationInfo2[1]: encAbove = robotService.getLocationBoxAbove(info[0]) aQueue.put([MessageFormat.retInv, (reservationInfo2[0], list(info)+encAbove, reservationInfo2[2]) ]) arduinoComm.enqueue(aQueue) time.sleep(5) aQueue.put(depositInfo1) arduinoComm.enqueue(aQueue) time.sleep(5) aQueue.put(depositInfo2) arduinoComm.enqueue(aQueue)
def testRetrieval(): tabletService = AndroidService() # invLoc = [inventoryDetailsId, X_index, Y_index, X_encoder, Y_encoder] [isAvailable, invLoc, vCartRowID] = tabletService.reserveInventoryIfAvailable(self, 1, 1, 1) arduinoComm = ArduinoSerialInterface() msg = "P>A" for data in invLoc: msg = msg + " " + str(data) print("msg: " + msg) arduinoComm.serialWrite(message) while (robotMsg = arduinoComm.serialRead()) == "": pass
def __init__(self): threading.Thread.__init__(self) self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.s.bind((TCPServlet.TCP_IP, TCPServlet.TCP_PORT)) self.s.listen(1) # accept() is a blocking operation, need to handle this later (self.conn, self.addr) = self.s.accept() # Set timeout for non-blocking IO self.conn.settimeout(2) print('Connection address:' + str(self.addr)) # Create AndroidService object to make calls to database self.service = AndroidService() # Create message queue self.msgQueue = queue.Queue(0)
class TCPServlet(threading.Thread): # IP Address of the server (host, that is, RPi) TCP_IP = '10.0.0.200' TCP_PORT = 5005 BUFFER_SIZE = 4096 #s = None #conn = None #addr = None #service = None # When initialized, the TCPServlet will create a socket connection def __init__(self): threading.Thread.__init__(self) self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.s.bind((TCPServlet.TCP_IP, TCPServlet.TCP_PORT)) self.s.listen(1) # accept() is a blocking operation, need to handle this later (self.conn, self.addr) = self.s.accept() # Set timeout for non-blocking IO self.conn.settimeout(2) print('Connection address:' + str(self.addr)) # Create AndroidService object to make calls to database self.service = AndroidService() # Create message queue self.msgQueue = queue.Queue(0) def getMsgQueue(self): return self.msgQueue def run(self): while 1: print("Waiting for data...") try: # Keep listening for incoming data data = self.conn.recv(TCPServlet.BUFFER_SIZE) except socket.timeout as e: err = e.args[0] if err == 'timed out': # yield the current thread sleep(1) print('recv timed out, retry later') continue else: print(e) sys.exit(1) except socket.error as e: print("Another error popped up") print(e) sys.exit(1) else: if not data: print("no data, exiting") break else: # Handle incoming data print("received data:" + data.decode('utf-8')) parsed_data = json.loads(data.decode('utf-8')) request_type = parsed_data["Request"] request_type = request_type.strip() response = "" print("Received request for: " + request_type) if request_type == "MainDisplay": # received message only consists of header # return main display query_result = self.service.getFirstPageInfo() shoelist = list() for tup in query_result: selection = tup[0] name = tup[1] brand = tup[2] desc = tup[3] price = tup[4] shoe = {'Selection':selection,'Name':name,'Brand':brand,'Desc':desc,'Price':price} shoelist.append(shoe) msg = {} # shoe1 = {'Name':'Nike','Price':'3', 'Selection':'Selection1'} # shoe2 = {'Name':'Adidas','Price':'4', 'Selection':'Selection2'} msg['Type'] = 'MainDisplay' # msg['Shoes'] = [shoe1, shoe2] msg['Shoes'] = shoelist response = json.dumps(msg); elif request_type == "DetailedShoeDisplay": # received message contains selection of requested shoe # return detailed info for available shoes of selection print("Selection: " + parsed_data["Selection"]) selection = (parsed_data["Selection"]).strip() query_result = self.service.getSecondPageInfo(selection) shoelist = list() for tup in query_result: barcode = tup[0] size_US = tup[1] size_UK = tup[2] size_EURO = tup[3] sizelist = [size_US, size_UK, size_EURO] sex = tup[4] avail = tup[5] shoe = {'Barcode':barcode,'Size':sizelist,'Sex':sex,'Avail':avail} shoelist.append(shoe) msg = {} msg['Type'] = 'DetailedShoeDisplay' msg['Shoes'] = shoelist response = json.dumps(msg) elif request_type == "AvailabilityUpdate": # return availability of the specified barcode print("Barcode: " + parsed_data["Barcode"]) # Special case where JSON isn't used, just return a number # Not sure if need to strip barcode, it's supposed to be a number barcode = (parsed_data["Barcode"]).strip() response = self.service.numItemsAvailable(barcode); print("Availability: " + str(response)) elif request_type == "Order": # order a shoe # no need for a response print("Barcode: " + parsed_data["Barcode"]) customerID = "1" # Hardcoded customer ID # Not sure if need to strip barcode, it's supposed to be a number # barcode = (parsed_data["Barcode"]).strip() # Order only one shoe. Don't need to get the response. service_response = self.service.reserveInventoryIfAvailable(customerID, parsed_data["Barcode"], 1) queued = (MessageFormat.retInv, service_response) # Put this into the queue so that the admin task can relay it to the robot self.msgQueue.put(queued) elif request_type == "Restock": # restock a shoe # no need for a response print("Barcode: " + parsed_data["Barcode"]) barcode_string = str(parsed_data["Barcode"]) queued = (MessageFormat.depInv, int(barcode_string)) self.msgQueue.put(queued) # Need to append newline character so that it sends properly print("Response: " + str(response)) response = str(response) + "\n" print(len(response)) check = response.strip() if len(check) > 0: num = self.conn.send(bytes(response, 'UTF-8')) # echo print("number of bytes sent:", num) print("bye felicia") self.conn.close() sys.exit(0)