mirror of
https://github.com/microsoft/autogen.git
synced 2025-10-01 11:06:58 +00:00

* Add isort * Apply isort on py files * Fix circular import * Fix format for notebooks * Fix format --------- Co-authored-by: Chi Wang <wang.chi@microsoft.com>
147 lines
4.5 KiB
Python
147 lines
4.5 KiB
Python
import sys
|
|
import time
|
|
from typing import Any, Dict
|
|
|
|
import _paths
|
|
import zmq
|
|
from autogencap.Config import dealer_url, router_url, xpub_url, xsub_url
|
|
from zmq.utils.monitor import recv_monitor_message
|
|
|
|
|
|
def zmq_sub_test():
|
|
context = zmq.Context()
|
|
sub_socket = context.socket(zmq.SUB)
|
|
sub_socket.setsockopt(zmq.LINGER, 0)
|
|
sub_socket.setsockopt(zmq.RCVTIMEO, 10000)
|
|
sub_socket.connect(xpub_url)
|
|
sub_socket.setsockopt_string(zmq.SUBSCRIBE, "")
|
|
start_time = time.time()
|
|
while True:
|
|
try:
|
|
msg = sub_socket.recv_string()
|
|
print(f"Received: {msg}")
|
|
start_time = time.time()
|
|
except KeyboardInterrupt:
|
|
print("Interrupted by user. Exiting...")
|
|
break
|
|
except zmq.Again:
|
|
elapsed_time = time.time() - start_time
|
|
if elapsed_time > 60000: # in seconds
|
|
break
|
|
print(f"No message received in {elapsed_time:.2f} seconds")
|
|
sub_socket.close()
|
|
|
|
|
|
def event_monitor(pub_socket: zmq.Socket) -> None:
|
|
monitor = pub_socket.get_monitor_socket()
|
|
while monitor.poll():
|
|
evt: Dict[str, Any] = {}
|
|
mon_evt = recv_monitor_message(monitor)
|
|
evt.update(mon_evt)
|
|
print(evt)
|
|
if evt["event"] == zmq.EVENT_MONITOR_STOPPED or evt["event"] == zmq.EVENT_HANDSHAKE_SUCCEEDED:
|
|
break
|
|
monitor.close()
|
|
|
|
|
|
def zmq_pub_test():
|
|
context = zmq.Context()
|
|
pub_socket = context.socket(zmq.PUB)
|
|
pub_socket.setsockopt(zmq.XPUB_VERBOSE, 1)
|
|
pub_socket.setsockopt(zmq.LINGER, 0)
|
|
pub_socket.connect(xsub_url)
|
|
event_monitor(pub_socket)
|
|
zmq_req_test(context)
|
|
for i in range(1, 11):
|
|
pub_socket.send_string(str(i))
|
|
pub_socket.close()
|
|
|
|
|
|
def zmq_router_dealer_test():
|
|
context = zmq.Context()
|
|
router_socket = context.socket(zmq.ROUTER)
|
|
router_socket.bind(router_url)
|
|
dealer_socket = context.socket(zmq.DEALER)
|
|
dealer_socket.bind(dealer_url)
|
|
try:
|
|
# Poll sockets for events
|
|
poller: zmq.Poller = zmq.Poller()
|
|
poller.register(router_socket, zmq.POLLIN)
|
|
poller.register(dealer_socket, zmq.POLLIN)
|
|
|
|
print("Running...")
|
|
# Receive msgs, forward and process
|
|
start_time = time.time()
|
|
last_time = start_time
|
|
while True:
|
|
events = dict(poller.poll(500))
|
|
since_last_time = time.time() - last_time
|
|
if since_last_time > 60: # in seconds
|
|
elapsed_time = time.time() - start_time
|
|
print(f"Elapsed time: {elapsed_time:.2f} seconds")
|
|
last_time = time.time()
|
|
|
|
if router_socket in events:
|
|
message = router_socket.recv_multipart()
|
|
print("BROKER", f"subscription message: {message[0]}")
|
|
dealer_socket.send_multipart(message)
|
|
|
|
if dealer_socket in events:
|
|
message = dealer_socket.recv_multipart()
|
|
print("BROKER", f"publishing message: {message[0]}")
|
|
router_socket.send_multipart(message)
|
|
|
|
except Exception as e:
|
|
print("BROKER", f"thread encountered an error: {e}")
|
|
finally:
|
|
print("BROKER", "thread ended")
|
|
return
|
|
|
|
|
|
def zmq_req_test(context: zmq.Context = None):
|
|
if context is None:
|
|
context = zmq.Context()
|
|
req_socket = context.socket(zmq.REQ)
|
|
req_socket.connect(router_url)
|
|
try:
|
|
req_socket.send_string("Request ")
|
|
message = req_socket.recv_string()
|
|
print(f"Received: {message}")
|
|
except KeyboardInterrupt:
|
|
print("Interrupted by user. Exiting...")
|
|
finally:
|
|
req_socket.close()
|
|
|
|
|
|
def zmq_rep_test():
|
|
context = zmq.Context()
|
|
rep_socket = context.socket(zmq.REP)
|
|
rep_socket.connect(dealer_url)
|
|
try:
|
|
while True:
|
|
message = rep_socket.recv_string()
|
|
print(f"Received: {message}")
|
|
rep_socket.send_string("Acknowledged: " + message)
|
|
except KeyboardInterrupt:
|
|
print("Interrupted by user. Exiting...")
|
|
finally:
|
|
rep_socket.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
if sys.argv[1] == "pub":
|
|
zmq_pub_test()
|
|
elif sys.argv[1] == "sub":
|
|
zmq_sub_test()
|
|
elif sys.argv[1] == "router":
|
|
zmq_router_dealer_test()
|
|
elif sys.argv[1] == "req":
|
|
zmq_req_test()
|
|
elif sys.argv[1] == "rep":
|
|
zmq_rep_test()
|
|
else:
|
|
print("Invalid argument. Please use 'pub', 'sub' 'router', 'req', 'rep'")
|
|
else:
|
|
print("Please provide an argument. Please use 'pub', 'sub' 'router', 'req', 'rep'")
|