82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
#%%
|
|
import zmq
|
|
import time
|
|
|
|
from communication.communicate_datapacket import DataPacket
|
|
|
|
|
|
def receiver(url, receiver_processing, VERBOSE=False):
|
|
|
|
with zmq.Context() as context:
|
|
|
|
# establishing connection...
|
|
socket = context.socket(zmq.REP)
|
|
socket.bind(url)
|
|
data_in = None
|
|
data_out_cache = None
|
|
|
|
while socket.closed is False:
|
|
|
|
# MAIN JOB: here we do a fast task!
|
|
if VERBOSE:
|
|
print("RECEIVER: doing fast main job")
|
|
data_out = receiver_processing.update(data_in)
|
|
data_in = None # clear after processing!
|
|
if data_out is not None:
|
|
data_out_cache = data_out
|
|
|
|
# CHECK: is packet available?
|
|
if VERBOSE:
|
|
print("RECEIVER: Now looking for packets...")
|
|
try:
|
|
packet_in = socket.recv_pyobj(zmq.NOBLOCK)
|
|
packet_available = True
|
|
if VERBOSE:
|
|
print(" ...packet available!")
|
|
except zmq.error.Again:
|
|
packet_available = False
|
|
if VERBOSE:
|
|
print(" ...nothing found")
|
|
|
|
flag_stop = False
|
|
if packet_available:
|
|
|
|
# YES, packet is available - interpret it!
|
|
if packet_in.message == "stop":
|
|
flag_stop = True
|
|
if VERBOSE:
|
|
print("RECEIVER: I have to stop this program!")
|
|
if packet_in.message == "sender":
|
|
data_in = packet_in.data
|
|
|
|
if VERBOSE:
|
|
print("RECEIVER: Confirm data packet was received and processed.")
|
|
packet_out = DataPacket(data=data_out_cache, message="receiver")
|
|
print(packet_out)
|
|
socket.send_pyobj(packet_out)
|
|
data_out_cache = None
|
|
|
|
if flag_stop:
|
|
if VERBOSE:
|
|
print("RECEIVER: Trying to close socket!")
|
|
socket.close()
|
|
|
|
if VERBOSE:
|
|
print("RECEIVER: Socket is closed!")
|
|
if VERBOSE:
|
|
print("RECEIVER: Context seems to have been released!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
from test_class_animate import TestClassAnimate
|
|
|
|
# count = None
|
|
url: str = "tcp://*:5555" # number specifies communication channel
|
|
|
|
class_processing = TestClassAnimate(show_vertical_bar=True, wait_interval=0.1)
|
|
receiver(url, class_processing, VERBOSE=True)
|
|
del class_processing
|
|
|
|
|
|
# %%
|