mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
add event_source_fd_set_fd
This commit is contained in:
parent
8680ac8579
commit
0e85a30882
@ -1,4 +1,8 @@
|
||||
# 最新动态
|
||||
|
||||
2025/02/27
|
||||
* 增加event_source_fd对象支持fd为-1和设置fd的情况(感谢智明提供补丁)
|
||||
|
||||
2025/02/26
|
||||
* 修复conf_node的node_type不正确的问题(感谢福明提供补丁)
|
||||
|
||||
|
@ -31,7 +31,8 @@ static int32_t event_source_fd_get_fd(event_source_t* source) {
|
||||
}
|
||||
|
||||
static ret_t event_source_fd_check(event_source_t* source) {
|
||||
return RET_OK;
|
||||
event_source_fd_t* event_source_fd = EVENT_SOURCE_FD(source);
|
||||
return event_source_fd->fd >= 0 ? RET_OK : RET_FAIL;
|
||||
}
|
||||
|
||||
static ret_t event_source_fd_dispatch(event_source_t* source) {
|
||||
@ -48,7 +49,7 @@ event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event,
|
||||
tk_object_t* obj = NULL;
|
||||
event_source_t* event_source = NULL;
|
||||
event_source_fd_t* event_source_fd = NULL;
|
||||
return_value_if_fail(fd >= 0 && on_event != NULL, NULL);
|
||||
return_value_if_fail(on_event != NULL, NULL);
|
||||
|
||||
obj = tk_object_create(&s_event_source_fd_vtable);
|
||||
event_source = EVENT_SOURCE(obj);
|
||||
@ -66,3 +67,10 @@ event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event,
|
||||
|
||||
return event_source;
|
||||
}
|
||||
|
||||
ret_t event_source_fd_set_fd(event_source_t* source, int fd) {
|
||||
event_source_fd_t* event_source_fd = EVENT_SOURCE_FD(source);
|
||||
return_value_if_fail(event_source_fd != NULL, RET_BAD_PARAMS);
|
||||
event_source_fd->fd = fd;
|
||||
return RET_OK;
|
||||
}
|
||||
|
@ -59,6 +59,18 @@ struct _event_source_fd_t {
|
||||
*/
|
||||
event_source_t* event_source_fd_create(int fd, event_source_on_event_t on_event, void* ctx);
|
||||
|
||||
/**
|
||||
* @method event_source_fd_set_fd
|
||||
*
|
||||
* 修改事件源的 fd。
|
||||
*
|
||||
* @param {event_source_t*} source 事件源对象。
|
||||
* @param {int} fd 可以用select等待的文件描述符。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t event_source_fd_set_fd(event_source_t* source, int fd);
|
||||
|
||||
#define EVENT_SOURCE_FD(obj) ((event_source_fd_t*)(obj))
|
||||
|
||||
END_C_DECLS
|
||||
|
@ -10,6 +10,7 @@ static ret_t event_source_on_data(event_source_t* source) {
|
||||
}
|
||||
|
||||
TEST(EventSourceFd, basic) {
|
||||
s_fd_times = 0;
|
||||
event_source_t* event_source = event_source_fd_create(1, event_source_on_data, NULL);
|
||||
|
||||
ASSERT_EQ(event_source_get_fd(event_source), 1);
|
||||
@ -20,3 +21,32 @@ TEST(EventSourceFd, basic) {
|
||||
|
||||
tk_object_unref(TK_OBJECT(event_source));
|
||||
}
|
||||
|
||||
TEST(EventSourceFd, none_fd) {
|
||||
int fd = 2;
|
||||
s_fd_times = 0;
|
||||
event_source_t* event_source = event_source_fd_create(-1, event_source_on_data, NULL);
|
||||
ASSERT_EQ(event_source != NULL, true);
|
||||
ASSERT_EQ(event_source_fd_set_fd(event_source, fd), RET_OK);
|
||||
|
||||
ASSERT_EQ(event_source_get_fd(event_source), fd);
|
||||
ASSERT_EQ(event_source_check(event_source), RET_OK);
|
||||
ASSERT_EQ(event_source_get_wakeup_time(event_source), 0xffffu);
|
||||
ASSERT_EQ(event_source_dispatch(event_source), RET_OK);
|
||||
ASSERT_EQ(s_fd_times, 1u);
|
||||
|
||||
ASSERT_EQ(event_source_fd_set_fd(event_source, -1), RET_OK);
|
||||
ASSERT_EQ(event_source_get_fd(event_source), -1);
|
||||
ASSERT_EQ(event_source_check(event_source), RET_FAIL);
|
||||
ASSERT_EQ(s_fd_times, 1u);
|
||||
|
||||
ASSERT_EQ(event_source_fd_set_fd(event_source, fd), RET_OK);
|
||||
ASSERT_EQ(event_source_get_fd(event_source), fd);
|
||||
ASSERT_EQ(event_source_check(event_source), RET_OK);
|
||||
ASSERT_EQ(event_source_get_wakeup_time(event_source), 0xffffu);
|
||||
ASSERT_EQ(event_source_dispatch(event_source), RET_OK);
|
||||
ASSERT_EQ(s_fd_times, 2u);
|
||||
|
||||
tk_object_unref(TK_OBJECT(event_source));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user