def onmessage_cb(channel, datatype, data, length, userdata): if datatype == RTCDC_DATATYPE_STRING: message = ffi.cast("char *", data) message = ffi.string(message) message = message[:length].decode("UTF-8") if datatype == RTCDC_DATATYPE_BINARY: message = ffi.cast("char *", data) message = ffi.buffer(message, length)[:] if userdata: ffi.from_handle(userdata)._onMessage(message)
def onconnect_cb(peer, userdata): ffi.from_handle(userdata)._onConnect(peer, userdata)
def oncandidate_cb(peer, candidate, userdata): candidate = ffi.string(candidate) ffi.from_handle(userdata)._onCandidate(peer, candidate)
def onchannel_cb(peer, dc, userdata): dc.on_message = lib.onmessage_cb dc.user_data = userdata ffi.from_handle(userdata)._onChannel(peer, dc)
def onclose_cb(channel, userdata): ffi.from_handle(userdata)._onClose(channel)
def onopen_cb(channel, userdata): ffi.from_handle(userdata)._onOpen(channel)