summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/IO/IOTask.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-02 20:51:00 +0800
committerchai <chaifix@163.com>2019-08-02 20:51:00 +0800
commitbad78945ceba425f6a80e3b8dca2414d592970eb (patch)
tree8bf7540766349c534bf9e5746b24fd7507ba034e /source/modules/asura-utils/IO/IOTask.cpp
parent99b90496765df21c5f377f42b9ed073ccb34c1fd (diff)
*修改文件名格式
Diffstat (limited to 'source/modules/asura-utils/IO/IOTask.cpp')
-rw-r--r--source/modules/asura-utils/IO/IOTask.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/source/modules/asura-utils/IO/IOTask.cpp b/source/modules/asura-utils/IO/IOTask.cpp
new file mode 100644
index 0000000..bfa6726
--- /dev/null
+++ b/source/modules/asura-utils/IO/IOTask.cpp
@@ -0,0 +1,61 @@
+#include "FileSystem.h"
+#include "IOTask.h"
+
+#include <iostream>
+
+using namespace AEScripting;
+using namespace Luax;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ IOTask::IOTask(const std::string& path, DataBuffer* buffer, IOTaskType type)
+ : m_Path(path)
+ , m_Buffer(buffer)
+ {
+ if (buffer)
+ buffer->Retain();
+ }
+
+ IOTask::~IOTask()
+ {
+ if (m_Buffer)
+ m_Buffer->Release();
+ }
+
+ bool IOTask::Execute()
+ {
+ File file(m_Path);
+ if (m_Type == IOTASK_TYPE_WRITE)
+ {
+
+ }
+ // pathȡݱmBuffer
+ else if (m_Type == IOTASK_TYPE_READ)
+ {
+ if (!m_Buffer)
+ return false;
+ file.Open(File::FILE_MODE_READ);
+ file.ReadAll(m_Buffer);
+ file.Close();
+ }
+ return true;
+ }
+
+ void IOTask::Invoke(lua_State* invokeThreaad)
+ {
+ if (m_Callback)
+ {
+ LuaxScopedState state(invokeThreaad);
+ if (this->PushLuaxMemberRef(state, m_Callback))
+ {
+ this->PushLuaxMemberRef(state, m_BufferRef);
+ state.Call(1, 0);
+ }
+ }
+ }
+
+ }
+}