def get_random_product(self, queue): """ Pull the data for a random product - useful for testing """ packet = Packet(PacketTypes.RandomProduct, {}) message = Message(packet).get_xml() self.send_queue.put( MessagingQueueItem(PacketTypes.GetRandomProduct, message, queue))
def get_user_data(self, rfid, queue): """ Get the user data associated with the rfid """ packet = Packet(PacketTypes.GetUser, {"rfid": rfid}) message = Message(packet).get_xml() self.send_queue.put( MessagingQueueItem(PacketTypes.GetUser, message, queue))
def get_product(self, barcode, queue): """ Get the product data associated with the barcode """ packet = Packet(PacketTypes.GetProduct, {"barcode": barcode}) message = Message(packet).get_xml() self.send_queue.put( MessagingQueueItem(PacketTypes.GetProduct, message, queue))
def process_packets(self, packets): """ Process a list of packets """ reply = Message() ## The reply starts as an empty message for packet in packets: self.logger.info("Handling '%s' packet..." % packet.type) if packet.type == PacketTypes.Ping: reply.add_packet(Packet(PacketTypes.PingReply)) elif packet.type == PacketTypes.GetProduct: reply.add_packet(self.get_product_from_data(packet.data)) elif packet.type == PacketTypes.GetUser: reply.add_packet(self.get_user_from_data(packet.data)) elif packet.type == PacketTypes.Transaction: reply.add_packet(self.apply_transaction_from_data(packet.data)) elif packet.type == PacketTypes.AddProduct: reply.add_packet(self.add_product_from_data(packet.data)) elif packet.type == PacketTypes.AddCredit: reply.add_packet(self.add_credit_from_data(packet.data)) elif packet.type == PacketTypes.GetRandomProduct: reply.add_packet(self.get_random_product_packet()) elif packet.type == PacketTypes.PingReply: pass # No action required for ping reply else: self.logger.warning("Unknown packet '%s'" % packet.type) return reply.get_xml()
def append_char(self, char): submenu = self.pane.shortcuts.get(char, None) if submenu is not None: self.change_menu_action(submenu) if submenu.children or submenu.explaining_text: self.pane.enter_branch(submenu) else: messages.receive(Message(self.currentAction, self.currentComplement))
def ping_server(self): """ Ping the server to test it's still there """ self.logger.info("Testing connection on %s port %d" % self.server_address) message = Message(PacketTypes.Ping).get_xml() self.send_queue.put(MessagingQueueItem(PacketTypes.Ping, message, None))
def add_credit(self, member_id, amountinpence, queue): """ Add credit to a user account """ packet = Packet(PacketTypes.AddCredit, { "memberid": member_id, "amountinpence": amountinpence }) message = Message(packet).get_xml() self.send_queue.put( MessagingQueueItem(PacketTypes.AddCredit, message, queue))
def parse_reply(message): """ Convert byte-level message into XML """ dom = parseString(message) packets = dom.getElementsByTagName('packet') for packet in packets: packettype = packet.attributes.getNamedItem("type").value if packettype == PacketTypes.Ping: return Message(PacketTypes.PingReply)
def add_product(self, barcode, description, price_in_pence, queue): """ Add a new product to the database """ packet = Packet( PacketTypes.AddProduct, { "barcode": barcode, "description": description, "price_in_pence": price_in_pence }) message = Message(packet).get_xml() self.send_queue.put( MessagingQueueItem(PacketTypes.AddProduct, message, queue))
def send_transactions(self, productdata, member_id, queue): """ Send transaction requests to the server """ self.logger.info("Sending transactions") message = Message() for (barcode, count) in productdata: packet = Packet(PacketTypes.Transaction, { "barcode": barcode, "memberid": member_id, "count": count }) message.add_packet(packet) self.send_queue.put( MessagingQueueItem(PacketTypes.Transaction, message.get_xml(), queue))
def to_message_json(self): m_type = Message.MessageType.BIKE_TAKE if self.type == Event.EventType.BIKE_TAKE else Message.MessageType.BIKE_RETURN message = Message(m_type, self.__dict__) return message.to_json()
def escape(self): if self.pane.can_go_back(): self.pane.go_back() self.change_menu_action(self.pane.current_branch) else: messages.receive(Message(Message.QUIT))
def sendAreaMessage(self): if self.currentAction is not Message.VIEW: for x in range(self.selection.x, self.selection.x2 + 1): for y in range(self.selection.y, self.selection.y2 + 1): messages.receive(Message(self.currentAction, (x,y)))
from messaging import listify import messaging from messaging import Message, header2int import random random.seed(11) reqs = [ Message(header2int['R_ATTACK'], (0, 3), [[-1, 9]]), Message(header2int['R_MOVE'], (2, 3), [3]), Message(header2int['R_MOVE'], (1, 14), [2]), Message(header2int['R_MOVE'], (0, 10), [0]), # Message(header2int['SPAWN'], 2, [(2,16)]), Message(header2int['SPAWN'], 2, [[2, 16]]), Message(header2int['R_ATTACK'], (1, 10), [[-1, 4]]), Message(header2int['R_MOVE'], (0, 10), [0]), Message(header2int['R_ATTACK'], (2, 7), [[-1, 8]]), ] random.shuffle(reqs, lambda: random.random()) reqs.sort() # random.shuffle(reqs, lambda: random.random()) for r in reqs: print(r) ''' Fri 20:17:21.498 0 Message Message::R_ATTACK from (0, 3) with args:[[-1, 9]] from (0, 3) was processed successfully. DAS feedback: Knight {0|3} attacks Dragon {-1|9} for 1 damage, reducing its hp from 974 to 973. Fri 20:17:21.498 0 Message Message::R_MOVE from (2, 13) with args:[3] from (2, 13) was processed successfully. DAS feedback: Knight {2|13} moves down from (1, 10) to (2, 10). Fri 20:17:21.498 0 Message Message::R_MOVE from (1, 14) with args:[2] from (1, 14) was processed successfully. DAS feedback: Knight {1|14} moves left from (1, 20) to (1, 19). Fri 20:17:21.498 0 Message Message::R_MOVE from (0, 10) with args:[0] from (0, 10) was processed successfully. DAS feedback: Knight {0|10} moves right from (13, 5) to (13, 6).
def kill_station(self, id): kill_message = Message(Message.MessageType.SHUTDOWN, {}) addr = self.stations[id] resp = requests.post(addr, data=kill_message.to_json()) if resp.status_code == 200: print("Success in shutdown of ", id)
def send(self, points, points_info): if self.cooperate: message = Message(self, points, points_info) self.message_dispatcher.broadcast(message)