Flow

เรียกโฟลว์แมโครที่มีชื่อให้ทำงานพร้อมกันและส่งข้อความระหว่างกัน แต่ละโฟลว์มีตัวแปรของตน ส่งข้อมูลเริ่มต้นผ่าน Flow.params ข้อความเป็นสำเนาอิสระและอ่านตามลำดับที่ส่ง

รูปแบบคำสั่ง

Flow

ไม่สามารถสร้างคลาสนี้โดยตรงได้

ค่าที่ส่งกลับ

—

ตัวอย่าง

# บันทึกเทมเพลต enemy และตั้งค่า watch_enemy ก่อนเรียกใช้
# Main: เปิดใช้งาน watcher แล้วหยุดหลังงานหลัก
Flow.start("watch_enemy")
Flow.send("watch_enemy", {"command": "ARM"})
wait(1000)
Flow.stop("watch_enemy")

ฟิลด์

ชื่อคำอธิบาย
paramsdict
ข้อมูลเริ่มต้นของโฟลว์นี้ แต่ละครั้งที่อ่านจะได้ dict อิสระ การแก้ไขไม่เปลี่ยนข้อมูลผู้ส่งหรือการอ่านครั้งถัดไป โฟลว์หลักได้ dict ว่าง

เมธอด

6 เมธอด

Flow.start

เริ่มโฟลว์ที่ตั้งค่าไว้ให้ทำงานพร้อมโฟลว์หลัก ส่งข้อความได้ทันทีเมื่อคำสั่งคืนค่า มีโฟลว์เบื้องหลังได้สูงสุดสองโฟลว์ และโฟลว์เหล่านี้เริ่มโฟลว์อื่นได้ ชื่อเดียวกันเรียกซ้ำไม่ได้ แม้กำลังพักหรือหยุด ชื่อผิดหรือซ้ำ จำนวนโฟลว์เต็ม หรือโฟลว์เกิดข้อผิดพลาดจะหยุด Run ทั้งหมด System.stop() และ Main Stop ก็หยุดทุกโฟลว์ โฟลว์หลักรอโฟลว์เบื้องหลังก่อนจบ Run จึงต้องสั่งหยุดโฟลว์ที่วนไม่สิ้นสุด ข้อมูลเริ่มต้นถูกคัดลอกตามขีดจำกัดของ Flow.send()

รูปแบบคำสั่ง

Flow.start(name, params=None)

พารามิเตอร์

ชื่อคำอธิบาย
nameString
ชื่อที่ตรงกับโฟลว์ที่ตั้งค่าไว้
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น
paramsdict?
ข้อมูลเริ่มต้นที่ระบุได้ ระบบจะคัดลอกให้โฟลว์ใหม่อ่านผ่าน Flow.params
ไม่บังคับ · ระบุตามตำแหน่งหรือชื่อ
ค่าเริ่มต้น: None

ค่าที่ส่งกลับ

Int — เลขบวกที่เพิ่มขึ้นทุกครั้งที่เริ่ม ใช้ในสถานะบน dock และบันทึก ไม่สามารถใช้เลขนี้ควบคุมโฟลว์ได้

ตัวอย่าง

# เริ่มการตรวจจับและ telemetry ข้าง main flow
recognition_no = Flow.start("recognition", {"region": "arena", "threshold": 0.86})
telemetry_no = Flow.start("telemetry")

# อ่านอินพุตที่คัดลอกของ branch นี้ภายใน flow ตรวจจับที่ตั้งค่าไว้
region_name = Flow.params.get("region", "full_screen")
threshold = Flow.params.get("threshold", 0.8)

Flow.send

ส่งสำเนาแยกอิสระไปยังโฟลว์ที่กำลังทำงานโดยไม่รอ หลายโฟลว์ส่งข้อความได้อย่างปลอดภัย และรับข้อความตามลำดับที่ส่ง รวมถึงขณะพัก ค่าที่ใช้ได้คือ None, Boolean, จำนวนจำกัด, String, list, tuple และ dict ที่มีคีย์เป็น String ซ้อนกันได้ลึกไม่เกิน 8 ชั้น มีค่ารวมไม่เกิน 512 ค่า และข้อความยาวรวมไม่เกิน 65536 ฟังก์ชัน ออบเจ็กต์ทรัพยากรหรือของแอป และการอ้างอิงวนทำให้เกิดข้อผิดพลาด ทุกครั้งที่เริ่มมีคิวข้อความใหม่ ข้อความที่ยังไม่อ่านจะถูกทิ้งเมื่อโฟลว์หยุดหรือจบ

รูปแบบคำสั่ง

Flow.send(name, data)

พารามิเตอร์

ชื่อคำอธิบาย
nameString
ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น
dataAny
ค่าที่ต้องการส่ง ระบบจะคัดลอกก่อนเพิ่มลงในคิวข้อความ
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

Boolean — True เมื่อรับข้อความแล้ว False เมื่อไม่รู้จักเป้าหมาย เป้าหมายไม่ทำงานหรือกำลังหยุด

ตัวอย่าง

# ส่งคำสั่ง ARM ให้ watcher ที่ตั้งค่าไว้
Flow.start("watch_enemy")
accepted = Flow.send("watch_enemy", {"command": "ARM"})
print(accepted)

Flow.receive

รอแล้วนำข้อความเก่าสุดของโฟลว์นี้ออกมา โฟลว์หลักและโฟลว์เบื้องหลังรับข้อความได้ กลุ่มที่มีชื่อซึ่งทำงานซ้อนในโฟลว์เดียวกันใช้คิวร่วมกับโฟลว์นั้น การยกเลิกทำให้หยุดรอทันที Pause เก็บข้อความในคิวไว้ list และ dict ที่ได้รับเป็นสำเนาอิสระ

รูปแบบคำสั่ง

Flow.receive(timeout=None)

พารามิเตอร์

ชื่อคำอธิบาย
timeoutNumber?
เวลารอแบบไม่บังคับ เป็นจำนวนจำกัด หน่วยมิลลิวินาที: 0 <= timeout < 2^63 ตัดเศษมิลลิวินาทีทิ้ง None รอไม่จำกัด 0 ตรวจทันที
ไม่บังคับ · ระบุตามตำแหน่งหรือชื่อ
ค่าเริ่มต้น: None

ค่าที่ส่งกลับ

Any? — ข้อความที่เก่าที่สุด หรือ None เมื่อหมดเวลารอหรือเมื่อตรวจทันทีแล้วไม่มีข้อความ ข้อความที่มีค่า None ก็คืนค่า None เช่นกัน

ตัวอย่าง

# โฟลว์ watch_enemy ที่ตั้งค่าไว้: รอ ARM แล้วตรวจคำสั่งระหว่างทำงาน
message = Flow.receive()
if message is not None and message.get("command") == "ARM":
    while True:
        command = Flow.poll()
        if command is not None:
            print(command)
        if Region().find("enemy", timeout=0).found:
            print("enemy")
        wait(100)

Flow.poll

รับข้อความที่เก่าที่สุดของโฟลว์นี้ทันทีโดยไม่รอ ใช้คิวข้อความและสำเนาแยกอิสระเช่นเดียวกับ Flow.receive()

รูปแบบคำสั่ง

Flow.poll()

ค่าที่ส่งกลับ

Any? — ข้อความที่เก่าที่สุด หรือ None เมื่อไม่มีข้อความ ข้อความที่มีค่า None ก็คืนค่า None เช่นกัน

ตัวอย่าง

# ตรวจคำสั่งโดยไม่รอ
message = Flow.poll()
if message is not None:
    print(message)

Flow.running

ตรวจว่าโฟลว์ตามชื่อกำลังทำงานหรือพักอยู่ ผลอาจเปลี่ยนทันทีหลังเรียก

รูปแบบคำสั่ง

Flow.running(name)

พารามิเตอร์

ชื่อคำอธิบาย
nameString
ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

Boolean — True ขณะทำงาน False เมื่อไม่รู้จัก กำลังหยุดหรือจบแล้ว

ตัวอย่าง

print(Flow.running("watch_enemy"))

Flow.stop

ขอหยุดโฟลว์เบื้องหลังหนึ่งโฟลว์และคืนค่าโดยไม่รอเก็บกวาด โฟลว์หลักและโฟลว์อื่นยังทำงาน คำสั่งนี้หยุดโฟลว์หลักไม่ได้ การหยุดตัวเองทำให้โฟลว์ผู้เรียกจบ สำหรับกลุ่มที่มีชื่อซ้อนอยู่ จะหยุดโฟลว์เบื้องหลังที่ครอบกลุ่มนั้น รอเก็บกวาดเสร็จก่อนเรียกชื่อเดิมอีกครั้ง Dock เบื้องหลังมี Pause/Resume ส่วน Main Pause/Resume มีผลทุกโฟลว์ และ Main Resume ล้างการพักแยกของทุกโฟลว์ด้วย

รูปแบบคำสั่ง

Flow.stop(name)

พารามิเตอร์

ชื่อคำอธิบาย
nameString
ชื่อที่ตรงกับโฟลว์ปลายทางที่ตั้งค่าไว้ โฟลว์หลักไม่มีชื่อที่กำหนดให้อัตโนมัติ
จำเป็น · ระบุตามตำแหน่งหรือชื่อ
ไม่มีค่าเริ่มต้น

ค่าที่ส่งกลับ

Boolean — True เมื่อเพิ่งขอหยุด False เมื่อเป้าหมายไม่มี ไม่รู้จัก กำลังหยุดหรือเป็น main True ไม่ยืนยันว่าเก็บกวาดเสร็จ

ตัวอย่าง

print(Flow.stop("watch_enemy"))