gwt: LoadDelayTask, keep refs with task
This commit is contained in:
parent
72b2349e11
commit
fd941858dd
@ -1,10 +1,20 @@
|
|||||||
package org.oscim.layers.tile;
|
package org.oscim.layers.tile;
|
||||||
|
|
||||||
import org.oscim.renderer.MapRenderer;
|
import org.oscim.renderer.MapRenderer;
|
||||||
|
import org.oscim.tiling.ITileDataSink;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
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
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -113,7 +113,7 @@ public abstract class TileLoader implements ITileDataSink {
|
|||||||
boolean success = (result == SUCCESS) && !isInterrupted;
|
boolean success = (result == SUCCESS) && !isInterrupted;
|
||||||
long now = MapRenderer.frametime;
|
long now = MapRenderer.frametime;
|
||||||
|
|
||||||
log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
|
//log.debug("completed {} diff time:{}", mTile, (now - lastLoadTime));
|
||||||
lastLoadTime = now;
|
lastLoadTime = now;
|
||||||
|
|
||||||
mTileManager.jobCompleted(mTile, success);
|
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);
|
Gdx.app.postRunnable(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import static org.oscim.tiling.ITileDataSink.QueryResult.SUCCESS;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import org.oscim.layers.tile.LoadDelayTask;
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
@ -61,30 +62,32 @@ public class UrlTileDataSource implements ITileDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void process(final InputStream is) {
|
public void process(final InputStream is) {
|
||||||
TileLoader.postLoadDelay(new org.oscim.layers.tile.LoadDelayTask() {
|
TileLoader.postLoadDelay(new LoadDelayTask<InputStream>(mTile, mSink, is) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void continueLoading() {
|
public void continueLoading() {
|
||||||
if (!mTile.state(MapTile.State.LOADING)) {
|
|
||||||
mConn.requestCompleted();
|
if (tile.state(MapTile.State.LOADING)) {
|
||||||
mSink.completed(FAILED);
|
|
||||||
mTile = null;
|
|
||||||
mSink = null;
|
|
||||||
}
|
|
||||||
boolean win = false;
|
boolean win = false;
|
||||||
if (is != null) {
|
if (is != null) {
|
||||||
try {
|
try {
|
||||||
win = mTileDecoder.decode(mTile, mSink, is);
|
win = mTileDecoder.decode(tile, sink, data);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!win)
|
if (!win)
|
||||||
log.debug("{} failed", mTile);
|
log.debug("{} failed", tile);
|
||||||
|
|
||||||
|
// FIXME
|
||||||
mConn.requestCompleted();
|
mConn.requestCompleted();
|
||||||
|
|
||||||
mSink.completed(win ? SUCCESS : FAILED);
|
sink.completed(win ? SUCCESS : FAILED);
|
||||||
|
} else {
|
||||||
|
// FIXME
|
||||||
|
mConn.requestCompleted();
|
||||||
|
sink.completed(FAILED);
|
||||||
|
}
|
||||||
|
|
||||||
mTile = null;
|
mTile = null;
|
||||||
mSink = null;
|
mSink = null;
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package org.oscim.tiling.source.bitmap;
|
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.gdx.client.GwtBitmap;
|
||||||
|
import org.oscim.layers.tile.LoadDelayTask;
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.tiling.ITileDataSink;
|
import org.oscim.tiling.ITileDataSink;
|
||||||
|
import org.oscim.tiling.ITileDataSink.QueryResult;
|
||||||
import org.oscim.tiling.ITileDataSource;
|
import org.oscim.tiling.ITileDataSource;
|
||||||
import org.oscim.tiling.source.LwHttp;
|
import org.oscim.tiling.source.LwHttp;
|
||||||
import org.oscim.tiling.source.UrlTileSource;
|
import org.oscim.tiling.source.UrlTileSource;
|
||||||
@ -76,16 +75,16 @@ public class BitmapTileSource extends UrlTileSource {
|
|||||||
|
|
||||||
img.addLoadHandler(new LoadHandler() {
|
img.addLoadHandler(new LoadHandler() {
|
||||||
public void onLoad(LoadEvent event) {
|
public void onLoad(LoadEvent event) {
|
||||||
TileLoader.postLoadDelay(new org.oscim.layers.tile.LoadDelayTask() {
|
TileLoader.postLoadDelay(new LoadDelayTask<Image>(tile, sink, img) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void continueLoading() {
|
public void continueLoading() {
|
||||||
if (!tile.state(MapTile.State.LOADING)) {
|
if (!tile.state(MapTile.State.LOADING)) {
|
||||||
sink.completed(FAILED);
|
sink.completed(QueryResult.FAILED);
|
||||||
RootPanel.get().remove(img);
|
RootPanel.get().remove(data);
|
||||||
} else {
|
} else {
|
||||||
sink.setTileImage(new GwtBitmap(img));
|
sink.setTileImage(new GwtBitmap(data));
|
||||||
sink.completed(SUCCESS);
|
sink.completed(QueryResult.SUCCESS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -96,7 +95,7 @@ public class BitmapTileSource extends UrlTileSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(ErrorEvent event) {
|
public void onError(ErrorEvent event) {
|
||||||
sink.completed(FAILED);
|
sink.completed(QueryResult.FAILED);
|
||||||
RootPanel.get().remove(img);
|
RootPanel.get().remove(img);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user