gwt: LoadDelayTask, keep refs with task

This commit is contained in:
Hannes Janetzek 2014-03-23 02:44:27 +01:00
parent 72b2349e11
commit fd941858dd
4 changed files with 43 additions and 31 deletions

View File

@ -1,10 +1,20 @@
package org.oscim.layers.tile;
import org.oscim.renderer.MapRenderer;
import org.oscim.tiling.ITileDataSink;
import com.badlogic.gdx.Gdx;
public abstract class LoadDelayTask implements Runnable {
public abstract class LoadDelayTask<T> implements Runnable {
protected final MapTile tile;
protected final ITileDataSink sink;
protected final T data;
public LoadDelayTask(MapTile tile, ITileDataSink sink, T data) {
this.tile = tile;
this.sink = sink;
this.data = data;
}
@Override
public void run() {

View File

@ -113,7 +113,7 @@ public abstract class TileLoader implements ITileDataSink {
boolean success = (result == SUCCESS) && !isInterrupted;
long now = MapRenderer.frametime;
log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
//log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
lastLoadTime = now;
mTileManager.jobCompleted(mTile, success);
@ -148,7 +148,7 @@ public abstract class TileLoader implements ITileDataSink {
}
public static void postLoadDelay(LoadDelayTask task) {
public static void postLoadDelay(LoadDelayTask<?> task) {
Gdx.app.postRunnable(task);
}

View File

@ -20,6 +20,7 @@ import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
import java.io.IOException;
import java.io.InputStream;
import org.oscim.layers.tile.LoadDelayTask;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileLoader;
import org.oscim.tiling.ITileDataSink;
@ -61,30 +62,32 @@ public class UrlTileDataSource implements ITileDataSource {
}
public void process(final InputStream is) {
TileLoader.postLoadDelay(new org.oscim.layers.tile.LoadDelayTask() {
TileLoader.postLoadDelay(new LoadDelayTask<InputStream>(mTile, mSink, is) {
@Override
public void continueLoading() {
if (!mTile.state(MapTile.State.LOADING)) {
mConn.requestCompleted();
mSink.completed(FAILED);
mTile = null;
mSink = null;
}
boolean win = false;
if (is != null) {
try {
win = mTileDecoder.decode(mTile, mSink, is);
} catch (IOException e) {
e.printStackTrace();
if (tile.state(MapTile.State.LOADING)) {
boolean win = false;
if (is != null) {
try {
win = mTileDecoder.decode(tile, sink, data);
} catch (IOException e) {
e.printStackTrace();
}
}
if (!win)
log.debug("{} failed", tile);
// FIXME
mConn.requestCompleted();
sink.completed(win ? SUCCESS : FAILED);
} else {
// FIXME
mConn.requestCompleted();
sink.completed(FAILED);
}
if (!win)
log.debug("{} failed", mTile);
mConn.requestCompleted();
mSink.completed(win ? SUCCESS : FAILED);
mTile = null;
mSink = null;

View File

@ -1,12 +1,11 @@
package org.oscim.tiling.source.bitmap;
import static org.oscim.tiling.ITileDataSink.QueryResult.FAILED;
import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
import org.oscim.gdx.client.GwtBitmap;
import org.oscim.layers.tile.LoadDelayTask;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileLoader;
import org.oscim.tiling.ITileDataSink;
import org.oscim.tiling.ITileDataSink.QueryResult;
import org.oscim.tiling.ITileDataSource;
import org.oscim.tiling.source.LwHttp;
import org.oscim.tiling.source.UrlTileSource;
@ -76,16 +75,16 @@ public class BitmapTileSource extends UrlTileSource {
img.addLoadHandler(new LoadHandler() {
public void onLoad(LoadEvent event) {
TileLoader.postLoadDelay(new org.oscim.layers.tile.LoadDelayTask() {
TileLoader.postLoadDelay(new LoadDelayTask<Image>(tile, sink, img) {
@Override
public void continueLoading() {
if (!tile.state(MapTile.State.LOADING)) {
sink.completed(FAILED);
RootPanel.get().remove(img);
sink.completed(QueryResult.FAILED);
RootPanel.get().remove(data);
} else {
sink.setTileImage(new GwtBitmap(img));
sink.completed(SUCCESS);
sink.setTileImage(new GwtBitmap(data));
sink.completed(QueryResult.SUCCESS);
}
}
});
@ -96,7 +95,7 @@ public class BitmapTileSource extends UrlTileSource {
@Override
public void onError(ErrorEvent event) {
sink.completed(FAILED);
sink.completed(QueryResult.FAILED);
RootPanel.get().remove(img);
}
});