Skip to content

Commit a8009fa

Browse files
Fix: Prepend simtime to ZMQ write() payload for consistency (Issue #244)
1 parent 7b7086d commit a8009fa

2 files changed

Lines changed: 15 additions & 4 deletions

File tree

concore.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,13 @@ def write(port_identifier, name, val, delta=0):
375375
try:
376376
# Keep ZMQ payloads JSON-serializable by normalizing numpy types.
377377
zmq_val = convert_numpy_to_python(val)
378-
zmq_p.send_json_with_retry(zmq_val)
378+
if isinstance(zmq_val, list):
379+
# Prepend simtime to match file-based write behavior
380+
payload = [simtime + delta] + zmq_val
381+
zmq_p.send_json_with_retry(payload)
382+
simtime += delta
383+
else:
384+
zmq_p.send_json_with_retry(zmq_val)
379385
except zmq.error.ZMQError as e:
380386
logging.error(f"ZMQ write error on port {port_identifier} (name: {name}): {e}")
381387
except Exception as e:

tests/test_concore.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,16 @@ def send_json_with_retry(self, message):
236236
dummy = DummyPort()
237237
concore.zmq_ports["test_zmq"] = dummy
238238

239+
# Reset simtime for predictable test behavior
240+
concore.simtime = 0
241+
239242
payload = [np.int64(7), np.float64(3.5), {"x": np.float32(1.25)}]
240243
concore.write("test_zmq", "data", payload)
241244

242245
assert dummy.sent is not None
243-
assert dummy.sent == [7, 3.5, {"x": 1.25}]
244-
assert not isinstance(dummy.sent[0], np.generic)
246+
# ZMQ write now prepends simtime (0 in this case) to match file-based write behavior
247+
assert dummy.sent == [0, 7, 3.5, {"x": 1.25}]
248+
# Data values (after simtime) should be converted from numpy types
245249
assert not isinstance(dummy.sent[1], np.generic)
246-
assert not isinstance(dummy.sent[2]["x"], np.generic)
250+
assert not isinstance(dummy.sent[2], np.generic)
251+
assert not isinstance(dummy.sent[3]["x"], np.generic)

0 commit comments

Comments
 (0)