From 9d7ee8450e94d1bf1fede2b25e5045b7d7867c32 Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Tue, 29 Sep 2020 00:55:40 -0700 Subject: [PATCH] Changed strategy to support FileHandleAdapter and AsyncAdapter --- .../com/riiablo/assets/AdapterNotFound.java | 11 ++++++++ core/src/com/riiablo/assets/AssetManager.java | 27 ++++++++++--------- core/src/com/riiablo/assets/AsyncAdapter.java | 3 +++ .../com/riiablo/assets/FileHandleAdapter.java | 12 +++++++++ .../riiablo/assets/GdxFileHandleAdapter.java | 23 ++++++++++++++++ .../riiablo/assets/MPQFileHandleAdapter.java | 23 ++++++++++++++++ .../com/riiablo/assets/ReaderNotFound.java | 11 -------- .../com/riiablo/assets/AssetManagerTest.java | 5 ++-- 8 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 core/src/com/riiablo/assets/AdapterNotFound.java create mode 100644 core/src/com/riiablo/assets/AsyncAdapter.java create mode 100644 core/src/com/riiablo/assets/FileHandleAdapter.java create mode 100644 core/src/com/riiablo/assets/GdxFileHandleAdapter.java create mode 100644 core/src/com/riiablo/assets/MPQFileHandleAdapter.java delete mode 100644 core/src/com/riiablo/assets/ReaderNotFound.java diff --git a/core/src/com/riiablo/assets/AdapterNotFound.java b/core/src/com/riiablo/assets/AdapterNotFound.java new file mode 100644 index 00000000..f9d91cd3 --- /dev/null +++ b/core/src/com/riiablo/assets/AdapterNotFound.java @@ -0,0 +1,11 @@ +package com.riiablo.assets; + +public class AdapterNotFound extends RuntimeException { + AdapterNotFound(Class type) { + this(type, null); + } + + AdapterNotFound(Class type, Throwable cause) { + super("Adapter not found for " + type.getSimpleName(), cause); + } +} diff --git a/core/src/com/riiablo/assets/AssetManager.java b/core/src/com/riiablo/assets/AssetManager.java index 2a90b960..7f6c6c4f 100644 --- a/core/src/com/riiablo/assets/AssetManager.java +++ b/core/src/com/riiablo/assets/AssetManager.java @@ -34,7 +34,7 @@ public class AssetManager implements Disposable, LoadTask.Callback, AsyncReader. final ArrayBlockingQueue completedTasks = new ArrayBlockingQueue<>(256); final ArrayList drain = new ArrayList<>(256); - final Map readers = new ConcurrentHashMap<>(); + final Map readers = new ConcurrentHashMap<>(); final ExecutorService io; final ExecutorService async; @@ -94,21 +94,21 @@ public class AssetManager implements Disposable, LoadTask.Callback, AsyncReader. loaders.put(type, loader); } - public SyncReader getReader(Class type) { + public FileHandleAdapter getAdapter(Class type) { return readers.get(type); } - SyncReader findReader(Class type) { - final SyncReader reader = getReader(type); - if (reader == null) throw new ReaderNotFound(type); + FileHandleAdapter findAdapter(Class type) { + final FileHandleAdapter reader = getAdapter(type); + if (reader == null) throw new AdapterNotFound(type); return reader; } - public void setReader(Class type, SyncReader reader) { + public void setAdapter(Class type, FileHandleAdapter adapter) { if (type == null) throw new IllegalArgumentException("type cannot be null"); - if (reader == null) throw new IllegalArgumentException("reader cannot be null"); - log.debug("Reader set {} -> {}", type.getSimpleName(), reader.getClass()); - readers.put(type, reader); + if (adapter == null) throw new IllegalArgumentException("adapter cannot be null"); + log.debug("Adapter set {} -> {}", type.getSimpleName(), adapter.getClass()); + readers.put(type, adapter); } public void clear() { @@ -160,10 +160,13 @@ public class AssetManager implements Disposable, LoadTask.Callback, AsyncReader. } final AssetLoader loader = findLoader(asset.type); + if (loader instanceof AsyncAssetLoader) { + //... + } final FileHandle handle = loader.resolver().resolve(asset); - final SyncReader reader = findReader(handle.getClass()); - if (reader instanceof AsyncReader) { - io.submit(((AsyncReader) reader).readFuture(asset, this)); + final FileHandleAdapter adapter = findAdapter(handle.getClass()); + if (adapter instanceof AsyncAdapter) { +// io.submit(((AsyncReader) reader).readFuture(asset, this)); } else { // io.submit(reader.create(asset)); } diff --git a/core/src/com/riiablo/assets/AsyncAdapter.java b/core/src/com/riiablo/assets/AsyncAdapter.java new file mode 100644 index 00000000..6fcb98d1 --- /dev/null +++ b/core/src/com/riiablo/assets/AsyncAdapter.java @@ -0,0 +1,3 @@ +package com.riiablo.assets; + +public interface AsyncAdapter {} diff --git a/core/src/com/riiablo/assets/FileHandleAdapter.java b/core/src/com/riiablo/assets/FileHandleAdapter.java new file mode 100644 index 00000000..ca99d6a9 --- /dev/null +++ b/core/src/com/riiablo/assets/FileHandleAdapter.java @@ -0,0 +1,12 @@ +package com.riiablo.assets; + +import io.netty.buffer.ByteBuf; +import java.io.InputStream; + +import com.badlogic.gdx.files.FileHandle; + +public interface FileHandleAdapter { + byte[] readBytes(T handle); + InputStream read(T handle); + ByteBuf readByteBuf(T handle); +} diff --git a/core/src/com/riiablo/assets/GdxFileHandleAdapter.java b/core/src/com/riiablo/assets/GdxFileHandleAdapter.java new file mode 100644 index 00000000..29ab08a7 --- /dev/null +++ b/core/src/com/riiablo/assets/GdxFileHandleAdapter.java @@ -0,0 +1,23 @@ +package com.riiablo.assets; + +import io.netty.buffer.ByteBuf; +import java.io.InputStream; + +import com.badlogic.gdx.files.FileHandle; + +public class GdxFileHandleAdapter implements FileHandleAdapter { + @Override + public byte[] readBytes(FileHandle handle) { + return handle.readBytes(); + } + + @Override + public InputStream read(FileHandle handle) { + return handle.read(); + } + + @Override + public ByteBuf readByteBuf(FileHandle handle) { + throw new UnsupportedOperationException(); + } +} diff --git a/core/src/com/riiablo/assets/MPQFileHandleAdapter.java b/core/src/com/riiablo/assets/MPQFileHandleAdapter.java new file mode 100644 index 00000000..2804f2ba --- /dev/null +++ b/core/src/com/riiablo/assets/MPQFileHandleAdapter.java @@ -0,0 +1,23 @@ +package com.riiablo.assets; + +import io.netty.buffer.ByteBuf; +import java.io.InputStream; + +import com.riiablo.mpq_bytebuf.MPQFileHandle; + +public class MPQFileHandleAdapter implements FileHandleAdapter, AsyncAdapter { + @Override + public byte[] readBytes(MPQFileHandle handle) { + throw new UnsupportedOperationException(); + } + + @Override + public InputStream read(MPQFileHandle handle) { + return handle.read(); + } + + @Override + public ByteBuf readByteBuf(MPQFileHandle handle) { + return handle.readByteBuf(); + } +} diff --git a/core/src/com/riiablo/assets/ReaderNotFound.java b/core/src/com/riiablo/assets/ReaderNotFound.java deleted file mode 100644 index 848f8df9..00000000 --- a/core/src/com/riiablo/assets/ReaderNotFound.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.riiablo.assets; - -public class ReaderNotFound extends RuntimeException { - ReaderNotFound(Class type) { - this(type, null); - } - - ReaderNotFound(Class type, Throwable cause) { - super("Reader not found for " + type.getSimpleName(), cause); - } -} diff --git a/core/test/com/riiablo/assets/AssetManagerTest.java b/core/test/com/riiablo/assets/AssetManagerTest.java index e44a6512..2a1527fe 100644 --- a/core/test/com/riiablo/assets/AssetManagerTest.java +++ b/core/test/com/riiablo/assets/AssetManagerTest.java @@ -4,7 +4,6 @@ import org.junit.BeforeClass; import org.junit.Test; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.riiablo.RiiabloTest; @@ -23,8 +22,8 @@ public class AssetManagerTest extends RiiabloTest { public void init() { AssetManager assets = new AssetManager(1); MPQFileHandleResolver resolver = new MPQFileHandleResolver(Gdx.files.absolute("C:\\diablo")); - assets.setReader(FileHandle.class, new FileHandleReader(new InternalFileHandleResolver())); - assets.setReader(MPQFileHandle.class, new MPQFileHandleReader(resolver)); + assets.setAdapter(FileHandle.class, new GdxFileHandleAdapter()); + assets.setAdapter(MPQFileHandle.class, new MPQFileHandleAdapter()); assets.dispose(); } } \ No newline at end of file