Loading ksp_client.py +51 −32 Original line number Diff line number Diff line import krpc import zmq import argparse from threading import Lock, Event class ModelRocket: socket = None realRocket = None def main(): parser = argparse.ArgumentParser(description='') parser.add_argument('addr', type=str, default="localhost:5556", nargs="?") args = parser.parse_args() host = "*" port = "5556" topic = "events" states = { -1:"abort", 0:"pre_launch",1:"liftoff", 2:"stage_1_separation", 3:"stage_2_separation"} stage_map = {0:0,1:1,2:2,3:3} states = {-1: "abort", 0: "pre_launch", 1: "liftoff", 2: "stage_1_separation", 3: "stage_2_separation"} stage_map = dict([(i,i) for i in range(10)]) def send(self,stage): self.socket.send("%d %d" % (self.topic, self.stage_map[stage])) def __init__(self,addr="localhost:5556"): context = zmq.Context() self.socket = context.socket(zmq.PUB) self.socket.bind("tcp://%s" % addr) socket = context.socket(zmq.PUB) socket.bind(f"tcp://{host}:{port}") conn = krpc.connect() running = Event() stopping = Event() def unlock(scene): print(f"In GameScene {scene.name}") if (scene == conn.krpc.GameScene.flight): running.set() stopping.clear() else: running.clear() stopping.set() if __name__ == "__main__": parser = argparse.ArgumentParser(description='') parser.add_argument('addr', type=str, default="localhost:5556", nargs="?") args = parser.parse_args() def stage_changed(new_stage): try: socket.send_string(f"{topic} {stage_map[new_stage]}") print(f"Sending event {topic} {new_stage}") except Exception as e: pass conn = krpc.connect() scene = conn.add_stream(getattr, conn.krpc, 'current_game_scene') scene.add_callback(unlock) scene.start() while True: running.wait() running.clear() vessel = conn.space_center.active_vessel control = vessel.control rocket = ModelRocket(args.addr) stage = conn.add_stream(getattr, control, 'current_stage') stage.add_callback(rocket.send) stage = conn.add_stream(getattr, control, 'current_stage', scene) def activate_callback(scene): if(scene == conn.krpc.GameScene.flight): stage.add_callback(stage_changed) stage.start() else: stage.wait() scene = conn.add_stream(getattr, conn.krpc, 'current_game_scene') scene.add_callback(activate_callback) stopping.wait() stopping.clear() print("Removing callback...") stage.remove_callback(stage_changed) stage.remove() while 42: pass if __name__ == "__main__": main() Loading
ksp_client.py +51 −32 Original line number Diff line number Diff line import krpc import zmq import argparse from threading import Lock, Event class ModelRocket: socket = None realRocket = None def main(): parser = argparse.ArgumentParser(description='') parser.add_argument('addr', type=str, default="localhost:5556", nargs="?") args = parser.parse_args() host = "*" port = "5556" topic = "events" states = { -1:"abort", 0:"pre_launch",1:"liftoff", 2:"stage_1_separation", 3:"stage_2_separation"} stage_map = {0:0,1:1,2:2,3:3} states = {-1: "abort", 0: "pre_launch", 1: "liftoff", 2: "stage_1_separation", 3: "stage_2_separation"} stage_map = dict([(i,i) for i in range(10)]) def send(self,stage): self.socket.send("%d %d" % (self.topic, self.stage_map[stage])) def __init__(self,addr="localhost:5556"): context = zmq.Context() self.socket = context.socket(zmq.PUB) self.socket.bind("tcp://%s" % addr) socket = context.socket(zmq.PUB) socket.bind(f"tcp://{host}:{port}") conn = krpc.connect() running = Event() stopping = Event() def unlock(scene): print(f"In GameScene {scene.name}") if (scene == conn.krpc.GameScene.flight): running.set() stopping.clear() else: running.clear() stopping.set() if __name__ == "__main__": parser = argparse.ArgumentParser(description='') parser.add_argument('addr', type=str, default="localhost:5556", nargs="?") args = parser.parse_args() def stage_changed(new_stage): try: socket.send_string(f"{topic} {stage_map[new_stage]}") print(f"Sending event {topic} {new_stage}") except Exception as e: pass conn = krpc.connect() scene = conn.add_stream(getattr, conn.krpc, 'current_game_scene') scene.add_callback(unlock) scene.start() while True: running.wait() running.clear() vessel = conn.space_center.active_vessel control = vessel.control rocket = ModelRocket(args.addr) stage = conn.add_stream(getattr, control, 'current_stage') stage.add_callback(rocket.send) stage = conn.add_stream(getattr, control, 'current_stage', scene) def activate_callback(scene): if(scene == conn.krpc.GameScene.flight): stage.add_callback(stage_changed) stage.start() else: stage.wait() scene = conn.add_stream(getattr, conn.krpc, 'current_game_scene') scene.add_callback(activate_callback) stopping.wait() stopping.clear() print("Removing callback...") stage.remove_callback(stage_changed) stage.remove() while 42: pass if __name__ == "__main__": main()