21
21
import com .hedera .block .server .consumer .LiveStreamObserver ;
22
22
import com .hedera .block .server .consumer .LiveStreamObserverImpl ;
23
23
import com .hedera .block .server .mediator .StreamMediator ;
24
+ import com .hedera .block .server .persistence .BlockPersistenceHandler ;
24
25
import com .hedera .block .server .producer .ProducerBlockStreamObserver ;
26
+ import io .grpc .Status ;
25
27
import io .grpc .stub .StreamObserver ;
26
28
import io .helidon .webserver .grpc .GrpcService ;
27
29
28
30
import java .time .Clock ;
31
+ import java .util .Optional ;
29
32
30
33
import static io .helidon .webserver .grpc .ResponseHelper .complete ;
31
34
@@ -45,6 +48,7 @@ public class BlockStreamService implements GrpcService {
45
48
46
49
private final long timeoutThresholdMillis ;
47
50
private final StreamMediator <BlockStreamServiceGrpcProto .Block , BlockStreamServiceGrpcProto .BlockResponse > streamMediator ;
51
+ private final BlockPersistenceHandler <BlockStreamServiceGrpcProto .Block > blockPersistenceHandler ;
48
52
49
53
/**
50
54
* Constructor for the BlockStreamService class.
@@ -53,10 +57,12 @@ public class BlockStreamService implements GrpcService {
53
57
* @param streamMediator the stream mediator
54
58
*/
55
59
public BlockStreamService (final long timeoutThresholdMillis ,
56
- final StreamMediator <BlockStreamServiceGrpcProto .Block , BlockStreamServiceGrpcProto .BlockResponse > streamMediator ) {
60
+ final StreamMediator <BlockStreamServiceGrpcProto .Block , BlockStreamServiceGrpcProto .BlockResponse > streamMediator ,
61
+ final BlockPersistenceHandler <BlockStreamServiceGrpcProto .Block > blockPersistenceHandler ) {
57
62
58
63
this .timeoutThresholdMillis = timeoutThresholdMillis ;
59
64
this .streamMediator = streamMediator ;
65
+ this .blockPersistenceHandler = blockPersistenceHandler ;
60
66
}
61
67
62
68
/**
@@ -133,11 +139,22 @@ private StreamObserver<BlockStreamServiceGrpcProto.BlockResponse> streamSource(f
133
139
return streamObserver ;
134
140
}
135
141
136
- private void getBlock (BlockStreamServiceGrpcProto .BlockRequest request , StreamObserver <BlockStreamServiceGrpcProto .Block > responseObserver ) {
142
+ private void getBlock (BlockStreamServiceGrpcProto .Block block , StreamObserver <BlockStreamServiceGrpcProto .Block > responseObserver ) {
137
143
String message = "GET BLOCK RESPONSE! " ;
138
144
LOGGER .log (System .Logger .Level .INFO , "GetBlock request received" );
139
- BlockStreamServiceGrpcProto .Block response = BlockStreamServiceGrpcProto .Block .newBuilder ().setValue (message ).build ();
140
- complete (responseObserver , response );
145
+ Optional <BlockStreamServiceGrpcProto .Block > responseBlock = blockPersistenceHandler .read (block .getId ());
146
+ if (responseBlock .isPresent ()) {
147
+ LOGGER .log (System .Logger .Level .INFO , "SENDING BLOCK # " + block .getId ());
148
+ complete (responseObserver , responseBlock .get ()); // TODO: Should return int and not quoted string
149
+ } else {
150
+ LOGGER .log (System .Logger .Level .INFO , "DID NOT FIND YOUR BLOCK" );
151
+ // TODO: Fix below. It could return gRPC equivalent of 404 NOT FOUND
152
+ responseObserver .onError (Status .NOT_FOUND
153
+ .withDescription ("DID NOT FIND YOUR BLOCK" )
154
+ .asRuntimeException ()
155
+ );
156
+ // complete(responseObserver, BlockStreamServiceGrpcProto.Block.getDefaultInstance());
157
+ }
141
158
}
142
159
}
143
160
0 commit comments