mirror of
https://github.com/isledecomp/isle.git
synced 2026-02-02 21:21:16 +00:00
implement most of MxStreamer::Open
This commit is contained in:
parent
c439da1597
commit
5b2cfe99ea
@ -3,6 +3,8 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "legoomni.h"
|
||||
#include "mxdiskstreamcontroller.h"
|
||||
#include "mxramstreamcontroller.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxStreamer, 0x2c);
|
||||
|
||||
@ -41,18 +43,36 @@ MxStreamer::~MxStreamer()
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b92c0
|
||||
MxStreamController *MxStreamer::Open(const char *name, MxU16 p_lookupType)
|
||||
MxStreamController *MxStreamer::Open(const char *p_name, MxU16 p_lookupType)
|
||||
{
|
||||
// TODO
|
||||
MxStreamController *stream = NULL;
|
||||
|
||||
MxStreamController *c = GetOpenStream(name);
|
||||
if (!GetOpenStream(p_name)) {
|
||||
switch (p_lookupType) {
|
||||
case e_DiskStream:
|
||||
stream = new MxDiskStreamController();
|
||||
break;
|
||||
case e_RAMStream:
|
||||
stream = new MxRAMStreamController();
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
if (!stream
|
||||
|| stream->Open(p_name) != SUCCESS
|
||||
|| AddStreamControllerToOpenList(stream) != SUCCESS) {
|
||||
delete stream;
|
||||
stream = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b9570
|
||||
// OFFSET: LEGO1 0x100b9570 STUB
|
||||
MxLong MxStreamer::Close(const char *p)
|
||||
{
|
||||
// TODO: Incomplete
|
||||
MxDSAction ds;
|
||||
|
||||
ds.SetUnknown24(-2);
|
||||
@ -63,7 +83,7 @@ MxLong MxStreamer::Close(const char *p)
|
||||
if (!p || !strcmp(p, c->atom.GetInternal())) {
|
||||
m_openStreams.erase(it);
|
||||
|
||||
if (c->IsStillInUse()) {
|
||||
if (!c->CanBeDeleted()) {
|
||||
// TODO: Send notification to `c`
|
||||
} else {
|
||||
delete c;
|
||||
|
||||
@ -42,11 +42,17 @@ class MxStreamerSubClass3 : public MxStreamerSubClass1
|
||||
class MxStreamer : public MxCore
|
||||
{
|
||||
public:
|
||||
MxStreamer();
|
||||
virtual ~MxStreamer() override;
|
||||
enum OpenMode
|
||||
{
|
||||
e_DiskStream,
|
||||
e_RAMStream
|
||||
};
|
||||
|
||||
__declspec(dllexport) MxStreamController *Open(const char *name, MxU16 p);
|
||||
__declspec(dllexport) MxLong Close(const char *p);
|
||||
MxStreamer();
|
||||
virtual ~MxStreamer() override; // vtable+0x0
|
||||
|
||||
__declspec(dllexport) MxStreamController *Open(const char *p_name, MxU16 p_openMode);
|
||||
__declspec(dllexport) MxLong Close(const char *p_name);
|
||||
|
||||
virtual MxLong Notify(MxParam &p) override; // vtable+0x4
|
||||
|
||||
@ -58,7 +64,7 @@ class MxStreamer : public MxCore
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b9010
|
||||
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
|
||||
inline virtual MxBool IsA(const char *p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(name, MxStreamer::ClassName()) || MxCore::IsA(name);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user