p3/src/main/java/iiis/systems/os/blockdb/BlockDatabaseServer.java

109 lines
4.2 KiB
Java
Executable File

package iiis.systems.os.blockdb;
import io.grpc.Server;
import io.grpc.netty.NettyServerBuilder;
import io.grpc.stub.StreamObserver;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.net.InetSocketAddress;
public class BlockDatabaseServer {
private Server server;
private void start(String address, int port) throws IOException {
server = NettyServerBuilder.forAddress(new InetSocketAddress(address, port))
.addService(new BlockDatabaseImpl())
.build()
.start();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.err.println("*** shutting down gRPC server since JVM is shutting down");
BlockDatabaseServer.this.stop();
System.err.println("*** server shut down");
}
});
}
private void stop() {
if (server != null) {
server.shutdown();
}
}
private void blockUntilShutdown() throws InterruptedException {
if (server != null) {
server.awaitTermination();
}
}
public static void main(String[] args) throws IOException, JSONException, InterruptedException {
JSONObject config = Util.readJsonFile("config.json");
//Util.writeJsonFile("config.json.out",config);
config = (JSONObject)config.get("1");
String address = config.getString("ip");
int port = Integer.parseInt(config.getString("port"));
String dataDir = config.getString("dataDir");
DatabaseEngine.setup(dataDir);
final BlockDatabaseServer server = new BlockDatabaseServer();
server.start(address, port);
server.blockUntilShutdown();
}
static class BlockDatabaseImpl extends BlockDatabaseGrpc.BlockDatabaseImplBase {
private final DatabaseEngine dbEngine = DatabaseEngine.getInstance();
@Override
public void get(GetRequest request, StreamObserver<GetResponse> responseObserver) {
int value = dbEngine.get(request.getUserID());
GetResponse response = GetResponse.newBuilder().setValue(value).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
@Override
public void put(Request request, StreamObserver<BooleanResponse> responseObserver) {
boolean success = dbEngine.put(request.getUserID(), request.getValue());
BooleanResponse response = BooleanResponse.newBuilder().setSuccess(success).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
@Override
public void withdraw(Request request, StreamObserver<BooleanResponse> responseObserver) {
boolean success = dbEngine.withdraw(request.getUserID(), request.getValue());
BooleanResponse response = BooleanResponse.newBuilder().setSuccess(success).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
@Override
public void deposit(Request request, StreamObserver<BooleanResponse> responseObserver) {
boolean success = dbEngine.deposit(request.getUserID(), request.getValue());
BooleanResponse response = BooleanResponse.newBuilder().setSuccess(success).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
@Override
public void transfer(TransferRequest request, StreamObserver<BooleanResponse> responseObserver) {
boolean success = dbEngine.transfer(request.getFromID(), request.getToID(), request.getValue());
BooleanResponse response = BooleanResponse.newBuilder().setSuccess(success).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
@Override
public void logLength(Null request, StreamObserver<GetResponse> responseObserver) {
int value = dbEngine.getLogLength();
GetResponse response = GetResponse.newBuilder().setValue(value).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
}