История изменений
Исправление cvs-255, (текущая версия) :
Здесь я вызываю callback, который хранится в conn->dgram_send_cb
static void dgram_send_cb(struct rdp_connection_s *c, const uint8_t *d, size_t l)
{
PyObject *connection = c->user_arg;
struct py_rdp_connection_s *conn = PyCapsule_GetPointer(connection, "RDP Connection");
if (conn->dgram_send_cb != Py_None)
{
printf("TYPE: %s\n", Py_TYPE(conn->dgram_send_cb)->tp_name);
printf("SEND %i bytes\n", l);
//PyObject *args = Py_BuildValue("(Oy#)", connection, d, l);
PyObject_CallObject(conn->dgram_send_cb, Py_BuildValue("()"));
printf("READY\n");
}
}
А тут я сохраняю этот callback
static PyObject* py_rdp_set_dgram_send_cb(PyObject* self, PyObject* args)
{
PyObject *connection;
PyObject *cb;
if (!PyArg_ParseTuple(args, "OO", &connection, &cb))
return NULL;
struct py_rdp_connection_s *conn = PyCapsule_GetPointer(connection, "RDP Connection");
if (conn == NULL)
return NULL;
conn->dgram_send_cb = cb;
Py_RETURN_NONE;
}
Дальше питоновский код:
Вот так все работает:
import rdp.wrapper
import serial
import sys
def cb(*args, **kwargs):
print("CALLBACK")
conn = rdp.wrapper.create_connection()
rdp.wrapper.set_dgram_send_cb(conn, cb)
rdp.wrapper.connect(conn,1,1)
А вот так падает (я пока временно убрал передачу аргументов в callback)
import rdp.wrapper
import serial
import sys
class test(object):
def cb(self):
print("CALLBACK")
def __init__(self):
self.conn = rdp.wrapper.create_connection()
rdp.wrapper.set_dgram_send_cb(self.conn, self.cb)
def connect(self):
rdp.wrapper.connect(self.conn,1,1)
t = test()
t.connect()
Причем CALLBACK он успевает написать
Исходная версия cvs-255, :
Здесь я вызываю callback, который хранится в conn->dgram_send_cb
static void dgram_send_cb(struct rdp_connection_s *c, const uint8_t *d, size_t l)
{
PyObject *connection = c->user_arg;
struct py_rdp_connection_s *conn = PyCapsule_GetPointer(connection, "RDP Connection");
if (conn->dgram_send_cb != Py_None)
{
printf("TYPE: %s\n", Py_TYPE(conn->dgram_send_cb)->tp_name);
printf("SEND %i bytes\n", l);
//PyObject *args = Py_BuildValue("(Oy#)", connection, d, l);
PyObject_CallObject(conn->dgram_send_cb, Py_BuildValue("()"));
printf("READY\n");
}
}
А тут я сохраняю этот callback
static PyObject* py_rdp_set_dgram_send_cb(PyObject* self, PyObject* args)
{
PyObject *connection;
PyObject *cb;
if (!PyArg_ParseTuple(args, "OO", &connection, &cb))
return NULL;
struct py_rdp_connection_s *conn = PyCapsule_GetPointer(connection, "RDP Connection");
if (conn == NULL)
return NULL;
conn->dgram_send_cb = cb;
Py_RETURN_NONE;
}
Дальше питоновский код:
Вот так все работает:
import rdp.wrapper
import serial
import sys
def cb(*args, **kwargs):
print("CALLBACK")
conn = rdp.wrapper.create_connection()
rdp.wrapper.set_dgram_send_cb(conn, cb)
rdp.wrapper.connect(conn,1,1)
А вот так падает
import rdp.wrapper
import serial
import sys
class test(object):
def cb(self):
print("CALLBACK")
def __init__(self):
self.conn = rdp.wrapper.create_connection()
rdp.wrapper.set_dgram_send_cb(self.conn, self.cb)
def connect(self):
rdp.wrapper.connect(self.conn,1,1)
t = test()
t.connect()
Причем CALLBACK он успевает написать