Thay đổi trạng thái

Các ATMT.state trang trí biến đổi một phương pháp vào một hàm trả về một ngoại lệ. Nếu bạn nâng cao ngoại lệ đó, tình trạng máy tự động sẽ được thay đổi. Nếu sự thay đổi xảy ra trong quá trình chuyển đổi, hành động bị ràng buộc để quá trình chuyển đổi này sẽ được gọi. Các thông số cho chức năng thay thế phương pháp này sẽ được lưu giữ và cuối cùng giao cho phương pháp. Các ngoại lệ có một action_parameters phương pháp có thể được gọi là trước khi nó được nâng lên để nó sẽ lưu trữ các thông số sẽ được gửi đến tất cả các hành động bị ràng buộc để quá trình chuyển đổi hiện tại.

Như một ví dụ, chúng ta hãy xem xét trạng thái sau:

@ATMT.state()
def MY_STATE(self, param1, param2):
    print "state=MY_STATE. param1=%r param2=%r" % (param1, param2)

Trạng thái này sẽ đạt được với đoạn mã sau:

@ATMT.receive_condition(ANOTHER_STATE)
def received_ICMP(self, pkt):
    if ICMP in pkt:
        raise self.MY_STATE("got icmp", pkt[ICMP].type)

Giả sử chúng ta muốn để ràng buộc một hành động để chuyển đổi này, đó cũng sẽ cần một số thông số:

@ATMT.action(received_ICMP)
def on_ICMP(self, icmp_type, icmp_code):
    self.retaliate(icmp_type, icmp_code)

Các điều kiện cần trở thành:

@ATMT.receive_condition(ANOTHER_STATE)
def received_ICMP(self, pkt):
    if ICMP in pkt:
        raise self.MY_STATE("got icmp", pkt[ICMP].type).action_parameters(pkt[ICMP].type, pkt[ICMP].code)


Comments

Popular posts from this blog

Thiết lập card không dây trên Kali Linux

Monitor mode

Giới thiệu - Scapy