我正在使用可venerable libwebsockets库来开发客户。
我不知道在哪里分配char *
(我假定的设置中的某个地方(我可以通过客户端的lws_callback_function()
中的void *user
参数来获得相同的操作。
我尝试在我的lws_protocols
中设置user
,我尝试在struct lws_client_connect_info
中设置userdata
,还有很多其他我不记得的地方。
我让这个工作了,但进行了一些调查。
- 在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);
- 这样的回调恢复用户数据:
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 *)(lws_context_user(lws_cx));
lwsl_user("callback: enter: something=%d", app_data->something);
...
}
我想您想要的是:每个连接的私人数据?
a。如果您只需要分配记忆,就可以尝试以下操作:
struct lws_protocols::per_session_data_size = 1024 bytes;
struct lws_context_creation_info::protocols = protocols;
然后您将在lws_callback(*用户(中获得它,用户是私有1024字节内存块。
b。如果您需要传递参数并使用:
lws_client_conn_info.opaque_user_data = &mydata;
在lws_callback(*WSI(中:
MyData *my_private_data = (MyData*)lws_get_opaque_user_data(wsi);