客户端回调中的libwebsockets用户指针

nhjlsmyf  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(213)

我正在使用venereable libwebsockets库开发一个客户端。
我不知道在哪里分配一个char *(我猜是在安装过程中的某个地方),这样我就可以通过客户机的lws_callback_function()中的void *user参数获得相同的值。
我试过在我的lws_protocols中设置user,我试过在我的struct lws_client_connect_info中设置userdata,还有很多其他地方我记不起来了。

cczfrluj

cczfrluj1#

我让这个工作,但采取了一点调查..
1.将用户数据隐藏在lws_context_creation_info中:

struct app_data_t { int something; };
    app_data_t app_data;
    app_data.something = 123456;
    ...
    lws_context_creation_info lws_cx_config; 
    ... 
    lws_cx_config.user = &app_data;
    ... 
    lws_context * lws_cx = lws_create_context(&lws_cx_config);

1.从回调恢复用户数据如下:

int callback(struct lws * wsi,
                 lws_callback_reasons reason,
                 void * pss_user_data, void * in, size_t len)
    {
        lws_context * lws_cx = lws_get_context(wsi);
        app_data_t * app_data = (app_data_t *)(ws_context_user(lws_cx));

        lwsl_user("callback: enter: something=%d", app_data->something);

        ...
    }
63lcw9qa

63lcw9qa2#

我猜你想要的是每个连接的私有数据吗
A.如果你只需要分配一块内存,你可以试试这个:

struct lws_protocols::per_session_data_size = 1024 bytes;
struct lws_context_creation_info::protocols = protocols;

然后你会在lws_callback(* user)中得到它,user是一个私有的1024字节内存块。
B.如果需要传递参数并使用它:

lws_client_conn_info.opaque_user_data = &mydata;

在lws_callback(* wsi)中:

MyData *my_private_data = (MyData*)lws_get_opaque_user_data(wsi);

相关问题