24
24
#-----------------------------------------------------------------------------
26
from czmq cimport zmq_msg_t
26
from cpython cimport PyBytes_FromStringAndSize
28
from libzmq cimport zmq_msg_t, zmq_msg_data, zmq_msg_size
28
30
#-----------------------------------------------------------------------------
32
34
cdef class MessageTracker(object):
33
35
"""A class for tracking if 0MQ is done using one or more messages."""
35
cdef set queues # Message Queue objects to track.
37
cdef set events # Message Event objects to track.
36
38
cdef set peers # Other Message or MessageTracker objects.
40
"""A Message class for non-copy send/recvs."""
42
"""A Message Frame class for non-copy send/recvs."""
42
44
cdef zmq_msg_t zmq_msg
43
45
cdef object _data # The actual message data as a Python object.
44
46
cdef object _buffer # A Python Buffer/View of the message contents
45
47
cdef object _bytes # A bytes/str copy of the message.
46
48
cdef bint _failed_init # Flag to handle failed zmq_msg_init
47
cdef public object tracker_queue # Queue for use with zmq_free_fn.
49
cdef public object tracker_event # Event for use with zmq_free_fn.
48
50
cdef public object tracker # MessageTracker object.
51
cdef public bint more # whether RCVMORE was set
50
cdef Message fast_copy(self) # Create shallow copy of Message object.
53
cdef Frame fast_copy(self) # Create shallow copy of Message object.
51
54
cdef object _getbuffer(self) # Construct self._buffer.
53
cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg)
57
cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):
58
""" Copy the data from a zmq_msg_t """
59
cdef char *data_c = NULL
60
cdef Py_ssize_t data_len_c
62
data_c = <char *>zmq_msg_data(zmq_msg)
63
data_len_c = zmq_msg_size(zmq_msg)
64
return PyBytes_FromStringAndSize(data_c, data_len_c)