1 module neton.rpcservice.RegistryService; 2 3 import neton.protocol.neton; 4 import neton.protocol.neton; 5 import neton.protocol.netonrpc; 6 import grpc; 7 import hunt.logging; 8 import neton.server.NetonRpcServer; 9 import neton.util.Future; 10 import neton.rpcservice.Command; 11 import std.stdio; 12 13 class RegistryService : RegistryBase 14 { 15 16 override Status Range(RangeRequest req, ref RangeResponse response) 17 { 18 if(req.key.length == 0) 19 { 20 logError("get key is null"); 21 return new Status(StatusCode.INVALID_ARGUMENT); 22 } 23 24 auto f = new Future!(RangeRequest, RangeResponse)(req); 25 26 RpcRequest rreq; 27 rreq.CMD = RpcReqCommand.RegistryRangeRequest; 28 rreq.Key = cast(string)(req.key); 29 rreq.Hash = f.toHash(); 30 NetonRpcServer.instance().ReadIndex(rreq, f); 31 logDebug("waiting ..... : ", rreq); 32 response = f.get(); 33 logDebug("waiting done..... : ",response); 34 if(response is null) 35 response = new RangeResponse(); 36 37 return Status.OK; 38 } 39 40 override Status Put(PutRequest req, ref PutResponse response) 41 { 42 logDebug("--------------"); 43 44 if(req.key.length == 0) 45 { 46 logError("put key is null"); 47 return new Status(StatusCode.INVALID_ARGUMENT); 48 } 49 50 auto f = new Future!(PutRequest, PutResponse)(req); 51 52 RpcRequest rreq; 53 rreq.CMD = RpcReqCommand.RegistryPutRequest; 54 rreq.Key = cast(string)(req.key); 55 rreq.Value = cast(string)(req.value); 56 rreq.LeaseID = req.lease; 57 rreq.Hash = f.toHash(); 58 NetonRpcServer.instance().Propose(rreq, f); 59 logDebug("waiting ..... : ", rreq); 60 response = f.get(); 61 logDebug("waiting done....."); 62 if(response !is null) 63 return Status.OK; 64 else 65 return new Status(StatusCode.INVALID_ARGUMENT); 66 } 67 68 override Status DeleteRange(DeleteRangeRequest req, ref DeleteRangeResponse response) 69 { 70 logDebug("--------------"); 71 72 if(req.key.length == 0) 73 { 74 logError("delete key is null"); 75 return new Status(StatusCode.INVALID_ARGUMENT); 76 } 77 78 auto f = new Future!(DeleteRangeRequest, DeleteRangeResponse)(req); 79 80 RpcRequest rreq; 81 rreq.CMD = RpcReqCommand.RegistryDeleteRangeRequest; 82 rreq.Key = cast(string)(req.key); 83 rreq.Hash = f.toHash(); 84 NetonRpcServer.instance().Propose(rreq, f); 85 logDebug("waiting ..... : ", rreq); 86 response = f.get(); 87 logDebug("waiting done....."); 88 89 if(response !is null) 90 return Status.OK; 91 else 92 return new Status(StatusCode.INVALID_ARGUMENT); 93 } 94 95 }