summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/io/binding/_io_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/libs/asura-lib-utils/io/binding/_io_task.cpp')
-rw-r--r--source/libs/asura-lib-utils/io/binding/_io_task.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/source/libs/asura-lib-utils/io/binding/_io_task.cpp b/source/libs/asura-lib-utils/io/binding/_io_task.cpp
index c03ff2a..b3c5988 100644
--- a/source/libs/asura-lib-utils/io/binding/_io_task.cpp
+++ b/source/libs/asura-lib-utils/io/binding/_io_task.cpp
@@ -16,19 +16,29 @@ namespace AsuraEngine
LUAX_POSTPROCESS(IOTask)
{
+ LUAX_REGISTER_ENUM(state, "EIOTaskType",
+ { "READ", IOTASK_TYPE_READ },
+ { "WRITE", IOTASK_TYPE_WRITE },
+ { "APPEND", IOTASK_TYPE_APPEND }
+ );
}
- // task = IOTask.New(path, dst)
+ // task = IOTask.New(path, buffer, type, callback)
LUAX_IMPL_METHOD(IOTask, _New)
{
LUAX_STATE(L);
- cc8* path = state.CheckParam<cc8*>(1);
+ cc8* path = state.CheckValue<cc8*>(1);
DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
- IOTask* task = new IOTask(path, db);
+ IOTaskType type = (IOTaskType)state.CheckValue<int>(3);
+ bool cbk = state.GetTop() >= 4 && state.IsType(4, LUA_TFUNCTION);
+
+ IOTask* task = new IOTask(path, db, type);
+ task->SetLuaxMemberRef(state, task->mBufferRef, 2);
+ if(cbk)
+ task->SetLuaxMemberRef(state, task->mCallback, 4);
task->PushLuaxUserdata(state);
- task->SetLuaxMemberRef(state, task->mDstRef, 2);
return 1;
}