|
|
|
@ -2,6 +2,7 @@ package org.qortal.api.websocket;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.StringWriter; |
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
import org.eclipse.jetty.websocket.api.Session; |
|
|
|
|
import org.eclipse.jetty.websocket.api.WebSocketException; |
|
|
|
@ -12,8 +13,8 @@ import org.eclipse.jetty.websocket.api.annotations.WebSocket;
|
|
|
|
|
import org.eclipse.jetty.websocket.servlet.WebSocketServlet; |
|
|
|
|
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; |
|
|
|
|
import org.qortal.api.ApiError; |
|
|
|
|
import org.qortal.api.model.BlockInfo; |
|
|
|
|
import org.qortal.controller.BlockNotifier; |
|
|
|
|
import org.qortal.data.block.BlockData; |
|
|
|
|
import org.qortal.repository.DataException; |
|
|
|
|
import org.qortal.repository.Repository; |
|
|
|
|
import org.qortal.repository.RepositoryManager; |
|
|
|
@ -30,7 +31,7 @@ public class BlocksWebSocket extends WebSocketServlet implements ApiWebSocket {
|
|
|
|
|
|
|
|
|
|
@OnWebSocketConnect |
|
|
|
|
public void onWebSocketConnect(Session session) { |
|
|
|
|
BlockNotifier.Listener listener = blockData -> onNotify(session, blockData); |
|
|
|
|
BlockNotifier.Listener listener = blockInfo -> onNotify(session, blockInfo); |
|
|
|
|
BlockNotifier.getInstance().register(session, listener); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -54,13 +55,19 @@ public class BlocksWebSocket extends WebSocketServlet implements ApiWebSocket {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try (final Repository repository = RepositoryManager.getRepository()) { |
|
|
|
|
BlockData blockData = repository.getBlockRepository().fromSignature(signature); |
|
|
|
|
if (blockData == null) { |
|
|
|
|
int height = repository.getBlockRepository().getHeightFromSignature(signature); |
|
|
|
|
if (height == 0) { |
|
|
|
|
sendError(session, ApiError.BLOCK_UNKNOWN); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onNotify(session, blockData); |
|
|
|
|
List<BlockInfo> blockInfos = repository.getBlockRepository().getBlockInfos(height, null, 1); |
|
|
|
|
if (blockInfos == null || blockInfos.isEmpty()) { |
|
|
|
|
sendError(session, ApiError.BLOCK_UNKNOWN); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onNotify(session, blockInfos.get(0)); |
|
|
|
|
} catch (DataException e) { |
|
|
|
|
sendError(session, ApiError.REPOSITORY_ISSUE); |
|
|
|
|
} |
|
|
|
@ -83,23 +90,23 @@ public class BlocksWebSocket extends WebSocketServlet implements ApiWebSocket {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try (final Repository repository = RepositoryManager.getRepository()) { |
|
|
|
|
BlockData blockData = repository.getBlockRepository().fromHeight(height); |
|
|
|
|
if (blockData == null) { |
|
|
|
|
List<BlockInfo> blockInfos = repository.getBlockRepository().getBlockInfos(height, null, 1); |
|
|
|
|
if (blockInfos == null || blockInfos.isEmpty()) { |
|
|
|
|
sendError(session, ApiError.BLOCK_UNKNOWN); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onNotify(session, blockData); |
|
|
|
|
onNotify(session, blockInfos.get(0)); |
|
|
|
|
} catch (DataException e) { |
|
|
|
|
sendError(session, ApiError.REPOSITORY_ISSUE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void onNotify(Session session, BlockData blockData) { |
|
|
|
|
private void onNotify(Session session, BlockInfo blockInfo) { |
|
|
|
|
StringWriter stringWriter = new StringWriter(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
this.marshall(stringWriter, blockData); |
|
|
|
|
this.marshall(stringWriter, blockInfo); |
|
|
|
|
|
|
|
|
|
session.getRemote().sendStringByFuture(stringWriter.toString()); |
|
|
|
|
} catch (IOException | WebSocketException e) { |
|
|
|
|