mirror of
https://gitee.com/BDWare/cp.git
synced 2025-01-10 01:44:08 +00:00
support doip cluster mode
This commit is contained in:
parent
723c9c7a06
commit
fd1690c97b
@ -6,7 +6,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "org.bdware.sc"
|
group = "org.bdware.sc"
|
||||||
version = "1.8.5"
|
version = "1.8.7"
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
// options.compilerArgs << '-Xlint:none'
|
// options.compilerArgs << '-Xlint:none'
|
||||||
// options.compilerArgs << '-Xlint:deprecation' << "-Werror"
|
// options.compilerArgs << '-Xlint:deprecation' << "-Werror"
|
||||||
@ -48,8 +48,8 @@ dependencies {
|
|||||||
implementation 'com.sun.mail:javax.mail:1.6.2'
|
implementation 'com.sun.mail:javax.mail:1.6.2'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
||||||
implementation 'org.bdware.bdcontract:sdk-java:1.0.2'
|
implementation 'org.bdware.bdcontract:sdk-java:1.0.2'
|
||||||
implementation 'org.bdware.doip:doip-audit-tool:1.2.4'
|
implementation 'org.bdware.doip:doip-audit-tool:1.2.6'
|
||||||
implementation 'org.bdware.doip:doip-sdk:1.4.0'
|
implementation 'org.bdware.doip:doip-sdk:1.4.2'
|
||||||
implementation fileTree(dir: 'lib', include: '*.jar')
|
implementation fileTree(dir: 'lib', include: '*.jar')
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ public class DebugMain {
|
|||||||
config.cPort = jsonObject.get("cPort").getAsInt();
|
config.cPort = jsonObject.get("cPort").getAsInt();
|
||||||
config.port = jsonObject.get("port").getAsInt();
|
config.port = jsonObject.get("port").getAsInt();
|
||||||
JsonObject ownerAndScript = new JsonObject();
|
JsonObject ownerAndScript = new JsonObject();
|
||||||
String arg = "abc&owner=" + config.publicKey + "&script=" + config.ypkPath;
|
String arg = "abc&owner=" + config.publicKey + "&script=" + config.ypkPath + "&doipStartPort=" + config.doipStartPort;
|
||||||
url = String.format(urlFormat, config.agentAddress, "allocateKeyPair", arg);
|
url = String.format(urlFormat, config.agentAddress, "allocateKeyPair", arg);
|
||||||
resp = HttpUtil.httpGet(url);
|
resp = HttpUtil.httpGet(url);
|
||||||
LOGGER.info(url);
|
LOGGER.info(url);
|
||||||
@ -133,6 +133,7 @@ public class DebugMain {
|
|||||||
String killBeforeStart;
|
String killBeforeStart;
|
||||||
String ypkPath;
|
String ypkPath;
|
||||||
String cpHost;
|
String cpHost;
|
||||||
|
int doipStartPort;
|
||||||
//AutoAppend
|
//AutoAppend
|
||||||
int port;
|
int port;
|
||||||
String cmi;
|
String cmi;
|
||||||
|
@ -728,7 +728,7 @@ public class ContractProcess {
|
|||||||
startPort = arg.getAsJsonObject().get("doipStartPort").getAsInt();
|
startPort = arg.getAsJsonObject().get("doipStartPort").getAsInt();
|
||||||
}
|
}
|
||||||
LOGGER.info("Fetch the onStartingDoipServerRes from router successfully, the result is " + onStartingDoipServerRes);
|
LOGGER.info("Fetch the onStartingDoipServerRes from router successfully, the result is " + onStartingDoipServerRes);
|
||||||
int doipListenPort = DoipClusterServer.startDoipServer(startPort);
|
int doipListenPort = DoipClusterServer.startDoipServer(startPort,onStartingDoipServerRes);
|
||||||
returnValue.addProperty("doipListenPort", doipListenPort);
|
returnValue.addProperty("doipListenPort", doipListenPort);
|
||||||
this.contract.setDoipPort(doipListenPort);
|
this.contract.setDoipPort(doipListenPort);
|
||||||
returnValue.addProperty("doipStartPort", startPort);
|
returnValue.addProperty("doipStartPort", startPort);
|
||||||
|
15
src/main/java/org/bdware/sc/boundry/utils/DigestUtil.java
Normal file
15
src/main/java/org/bdware/sc/boundry/utils/DigestUtil.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package org.bdware.sc.boundry.utils;
|
||||||
|
|
||||||
|
import org.bdware.sc.compiler.PermissionStub;
|
||||||
|
import org.bdware.sc.node.Permission;
|
||||||
|
|
||||||
|
@PermissionStub(permission = Permission.Digest)
|
||||||
|
public class DigestUtil {
|
||||||
|
public static String md5Hex(String arg) {
|
||||||
|
return org.apache.commons.codec.digest.DigestUtils.md5Hex(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String sha256Hex(String arg) {
|
||||||
|
return org.apache.commons.codec.digest.DigestUtils.sha256Hex(arg);
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,6 @@
|
|||||||
package org.bdware.sc.engine;
|
package org.bdware.sc.engine;
|
||||||
|
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import org.bdware.doip.codec.doipMessage.DoipMessage;
|
|
||||||
import org.bdware.sc.util.JsonUtil;
|
|
||||||
import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror;
|
import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror;
|
||||||
import wrp.jdk.nashorn.internal.objects.NativeArray;
|
import wrp.jdk.nashorn.internal.objects.NativeArray;
|
||||||
import wrp.jdk.nashorn.internal.runtime.PropertyMap;
|
import wrp.jdk.nashorn.internal.runtime.PropertyMap;
|
||||||
@ -149,8 +147,6 @@ public class JSONTool {
|
|||||||
return jsonObject;
|
return jsonObject;
|
||||||
} else if (obj.getClass() == jdk.internal.dynalink.beans.StaticClass.class) {
|
} else if (obj.getClass() == jdk.internal.dynalink.beans.StaticClass.class) {
|
||||||
return JsonNull.INSTANCE;
|
return JsonNull.INSTANCE;
|
||||||
} else if (obj.getClass() == DoipMessage.class) {
|
|
||||||
return JsonUtil.fromJson(JsonUtil.toJson(obj), JsonObject.class);
|
|
||||||
} else if (obj instanceof Number) {
|
} else if (obj instanceof Number) {
|
||||||
return new JsonPrimitive((Number) obj);
|
return new JsonPrimitive((Number) obj);
|
||||||
} else if (obj instanceof String) {
|
} else if (obj instanceof String) {
|
||||||
|
@ -57,7 +57,6 @@ public class AccessHandler implements AnnotationHook {
|
|||||||
LOGGER.info("verify success!" + argPacks.request.getRequester());
|
LOGGER.info("verify success!" + argPacks.request.getRequester());
|
||||||
if (acFunction == null) return argPacks;
|
if (acFunction == null) return argPacks;
|
||||||
DesktopEngine de = (DesktopEngine) desktopEngine;
|
DesktopEngine de = (DesktopEngine) desktopEngine;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ContractRequest input = argPacks.request;
|
ContractRequest input = argPacks.request;
|
||||||
JO jo = new JO(PropertyMap.newMap());
|
JO jo = new JO(PropertyMap.newMap());
|
||||||
|
@ -34,15 +34,20 @@ public class DOOPAfterExecHandler implements AnnotationHook {
|
|||||||
originDoipMsg = doipMessagePacker.rawDoipMsg;
|
originDoipMsg = doipMessagePacker.rawDoipMsg;
|
||||||
// if http, directly return
|
// if http, directly return
|
||||||
if (doipMessagePacker.source.equals("http")) {
|
if (doipMessagePacker.source.equals("http")) {
|
||||||
|
if (argPacks.ret != null && argPacks.ret instanceof DoipMessage) {
|
||||||
|
argPacks.ret = JsonUtil.parseObject(JsonDoipMessage.fromDoipMessage((DoipMessage) argPacks.ret));
|
||||||
|
}
|
||||||
return argPacks;
|
return argPacks;
|
||||||
} else {
|
} else {
|
||||||
// pack
|
// pack
|
||||||
JsonObject jsonObjectRes = JSONTool.convertMirrorToJson(argPacks.ret).getAsJsonObject();
|
if (!(argPacks.ret instanceof DoipMessage)) {
|
||||||
|
JsonObject jsonObjectRes = ((JsonElement)argPacks.ret).getAsJsonObject();
|
||||||
// validate json response
|
// validate json response
|
||||||
ArgSchemaVisitor visitor = new ArgSchemaVisitor(jsonObjectRes);
|
ArgSchemaVisitor visitor = new ArgSchemaVisitor(jsonObjectRes);
|
||||||
validateJsonElementRulesByArgSchemaVisitor(jsonResponseRules, visitor);
|
validateJsonElementRulesByArgSchemaVisitor(jsonResponseRules, visitor);
|
||||||
JsonDoipMessage returnedMessage = JsonUtil.fromJson(jsonObjectRes, JsonDoipMessage.class);
|
JsonDoipMessage returnedMessage = JsonUtil.fromJson(jsonObjectRes, JsonDoipMessage.class);
|
||||||
argPacks.ret = returnedMessage.toResponseDoipMessage(originDoipMsg);
|
argPacks.ret = returnedMessage.toResponseDoipMessage(originDoipMsg);
|
||||||
|
}
|
||||||
return argPacks;
|
return argPacks;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3,8 +3,9 @@ package org.bdware.sc.engine.hook;
|
|||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
import org.bdware.doip.codec.JsonDoipMessage;
|
||||||
import org.bdware.doip.codec.doipMessage.DoipMessage;
|
import org.bdware.doip.codec.doipMessage.DoipMessage;
|
||||||
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
|
import org.bdware.doip.codec.doipMessage.MessageCredential;
|
||||||
import org.bdware.doip.codec.operations.BasicOperations;
|
import org.bdware.doip.codec.operations.BasicOperations;
|
||||||
import org.bdware.sc.JSEngine;
|
import org.bdware.sc.JSEngine;
|
||||||
import org.bdware.sc.bean.ContractRequest;
|
import org.bdware.sc.bean.ContractRequest;
|
||||||
@ -12,10 +13,7 @@ import org.bdware.sc.boundry.ScriptReturnException;
|
|||||||
import org.bdware.sc.entity.DoipMessagePacker;
|
import org.bdware.sc.entity.DoipMessagePacker;
|
||||||
import org.bdware.sc.node.AnnotationHook;
|
import org.bdware.sc.node.AnnotationHook;
|
||||||
import org.bdware.sc.node.ArgPacks;
|
import org.bdware.sc.node.ArgPacks;
|
||||||
|
import org.bdware.sc.util.JsonUtil;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class DOOPBeforeExecHandler implements AnnotationHook {
|
public class DOOPBeforeExecHandler implements AnnotationHook {
|
||||||
|
|
||||||
@ -31,17 +29,20 @@ public class DOOPBeforeExecHandler implements AnnotationHook {
|
|||||||
public ArgPacks handle(JSEngine desktopEngine, ArgPacks argPacks) {
|
public ArgPacks handle(JSEngine desktopEngine, ArgPacks argPacks) {
|
||||||
Object arg = argPacks.arg;
|
Object arg = argPacks.arg;
|
||||||
DoipMessagePacker doipMsgPackerArg = new DoipMessagePacker();
|
DoipMessagePacker doipMsgPackerArg = new DoipMessagePacker();
|
||||||
|
|
||||||
if (arg instanceof DoipMessagePacker) {
|
if (arg instanceof DoipMessagePacker) {
|
||||||
doipMsgPackerArg = (DoipMessagePacker) arg;
|
doipMsgPackerArg = (DoipMessagePacker) arg;
|
||||||
} else {
|
} else {
|
||||||
// validate http request's params
|
// validate http request's params
|
||||||
ContractRequest httpReq = argPacks.request;
|
ContractRequest httpReq = argPacks.request;
|
||||||
validateHTTPRequestArgs(httpReq);
|
validateHTTPRequestArgs(httpReq);
|
||||||
|
|
||||||
// set doipMsgPackerArg struct's params
|
// set doipMsgPackerArg struct's params
|
||||||
doipMsgPackerArg.setSource("http");
|
doipMsgPackerArg.setSource("http");
|
||||||
doipMsgPackerArg.rawDoipMsg = convertHttpRequestToDoipMessage(httpReq);
|
doipMsgPackerArg.rawDoipMsg = convertHttpRequestToDoipMessage(httpReq);
|
||||||
|
if (httpReq.verifySignature()) {
|
||||||
|
doipMsgPackerArg.rawDoipMsg.credential = new MessageCredential(httpReq.getRequester(), new byte[0]);
|
||||||
|
} else {
|
||||||
|
doipMsgPackerArg.rawDoipMsg.credential = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
argPacks.arg = doipMsgPackerArg;
|
argPacks.arg = doipMsgPackerArg;
|
||||||
@ -82,71 +83,8 @@ public class DOOPBeforeExecHandler implements AnnotationHook {
|
|||||||
|
|
||||||
public DoipMessage convertHttpRequestToDoipMessage(ContractRequest httpReq) {
|
public DoipMessage convertHttpRequestToDoipMessage(ContractRequest httpReq) {
|
||||||
JsonObject jsonParams = JsonParser.parseString(httpReq.getArg().getAsString()).getAsJsonObject();
|
JsonObject jsonParams = JsonParser.parseString(httpReq.getArg().getAsString()).getAsJsonObject();
|
||||||
// taking Extension into consideration
|
JsonDoipMessage doipMessage = JsonUtil.fromJson(jsonParams, JsonDoipMessage.class);
|
||||||
JsonObject header = jsonParams.get("header") != null ? jsonParams.get("header").getAsJsonObject() : null;
|
return doipMessage.toRequestDoipMessage();
|
||||||
String body = jsonParams.get("body") != null ? jsonParams.get("body").getAsString() : null;
|
|
||||||
DoipMessage doipMessage = null;
|
|
||||||
switch (httpOperation) {
|
|
||||||
case Hello:
|
|
||||||
case Delete:
|
|
||||||
case ListOps:
|
|
||||||
doipMessage = new DoipMessageFactory.DoipMessageBuilder().createRequest(header.get("identifier").getAsString(), httpOperation.getName()).create();
|
|
||||||
break;
|
|
||||||
case Create:
|
|
||||||
case Update:
|
|
||||||
doipMessage = new DoipMessageFactory.DoipMessageBuilder()
|
|
||||||
.createRequest(header.get("identifier").getAsString(), httpOperation.getName())
|
|
||||||
.setBody(body.getBytes(StandardCharsets.UTF_8))
|
|
||||||
.create();
|
|
||||||
break;
|
|
||||||
case Search:
|
|
||||||
DoipMessageFactory.DoipMessageBuilder searchBuilder = new DoipMessageFactory.DoipMessageBuilder()
|
|
||||||
.createRequest(header.get("identifier").getAsString(), httpOperation.getName());
|
|
||||||
JsonElement query = header.get("query");
|
|
||||||
if (query != null) searchBuilder.addAttributes("query", query.getAsString());
|
|
||||||
JsonElement pageNum = header.get("pageNum");
|
|
||||||
if (pageNum != null) searchBuilder.addAttributes("pageNum", pageNum.getAsInt());
|
|
||||||
JsonElement pageSize = header.get("pageSize");
|
|
||||||
if (pageSize != null) searchBuilder.addAttributes("pageSize", pageSize.getAsInt());
|
|
||||||
JsonElement type = header.get("type");
|
|
||||||
if (type != null) searchBuilder.addAttributes("type", type.getAsString());
|
|
||||||
|
|
||||||
doipMessage = searchBuilder.create();
|
|
||||||
break;
|
|
||||||
case Retrieve:
|
|
||||||
doipMessage = new DoipMessageFactory.DoipMessageBuilder().createRequest(header.get("identifier").getAsString(), httpOperation.getName()).create();
|
|
||||||
JsonElement element = header.get("element");
|
|
||||||
JsonElement includeElementData = header.get("includeElementData");
|
|
||||||
if (element != null) doipMessage.header.parameters.addAttribute("element", element.getAsString());
|
|
||||||
if (includeElementData != null && includeElementData.getAsBoolean())
|
|
||||||
doipMessage.header.parameters.addAttribute("includeElementData", "true");
|
|
||||||
break;
|
|
||||||
case Extension:
|
|
||||||
DoipMessageFactory.DoipMessageBuilder extensionBuilder = new DoipMessageFactory.DoipMessageBuilder();
|
|
||||||
if (header != null) {
|
|
||||||
if (header.get("identifier") != null) {
|
|
||||||
extensionBuilder = extensionBuilder
|
|
||||||
.createRequest(header.get("identifier").getAsString(), httpOperation.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<Map.Entry<String, JsonElement>> entries = header.entrySet();
|
|
||||||
for (Map.Entry<String, JsonElement> entry : entries) {
|
|
||||||
extensionBuilder.addAttributes(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (body != null) {
|
|
||||||
extensionBuilder.setBody(body.getBytes(StandardCharsets.UTF_8));
|
|
||||||
}
|
|
||||||
|
|
||||||
doipMessage = extensionBuilder.create();
|
|
||||||
break;
|
|
||||||
case Unknown:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return doipMessage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.bdware.sc.engine.hook;
|
package org.bdware.sc.engine.hook;
|
||||||
|
|
||||||
|
import org.bdware.doip.codec.doipMessage.DoipMessage;
|
||||||
import org.bdware.sc.JSEngine;
|
import org.bdware.sc.JSEngine;
|
||||||
import org.bdware.sc.engine.JSONTool;
|
import org.bdware.sc.engine.JSONTool;
|
||||||
import org.bdware.sc.node.AnnotationHook;
|
import org.bdware.sc.node.AnnotationHook;
|
||||||
@ -8,6 +9,8 @@ import org.bdware.sc.node.ArgPacks;
|
|||||||
public class ObjToJsonHandler implements AnnotationHook {
|
public class ObjToJsonHandler implements AnnotationHook {
|
||||||
@Override
|
@Override
|
||||||
public ArgPacks handle(JSEngine desktopEngine, ArgPacks argPacks) {
|
public ArgPacks handle(JSEngine desktopEngine, ArgPacks argPacks) {
|
||||||
|
if (argPacks.ret instanceof DoipMessage)
|
||||||
|
return argPacks;
|
||||||
argPacks.ret = JSONTool.convertMirrorToJson(argPacks.ret);
|
argPacks.ret = JSONTool.convertMirrorToJson(argPacks.ret);
|
||||||
return argPacks;
|
return argPacks;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@ import org.bdware.doip.codec.doipMessage.HeaderParameter;
|
|||||||
import org.bdware.doip.codec.operations.BasicOperations;
|
import org.bdware.doip.codec.operations.BasicOperations;
|
||||||
import org.bdware.doip.endpoint.server.DoipRequestHandler;
|
import org.bdware.doip.endpoint.server.DoipRequestHandler;
|
||||||
import org.bdware.doip.endpoint.server.NettyServerHandler;
|
import org.bdware.doip.endpoint.server.NettyServerHandler;
|
||||||
import org.bdware.doip.endpoint.server.RepositoryHandler;
|
|
||||||
import org.bdware.sc.ContractProcess;
|
import org.bdware.sc.ContractProcess;
|
||||||
import org.bdware.sc.bean.ContractRequest;
|
import org.bdware.sc.bean.ContractRequest;
|
||||||
import org.bdware.sc.boundry.JavaScriptEntry;
|
import org.bdware.sc.boundry.JavaScriptEntry;
|
||||||
@ -24,7 +23,7 @@ import java.io.PrintStream;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class DOOPRequestHandler implements DoipRequestHandler, RepositoryHandler {
|
public class DOOPRequestHandler implements DoipRequestHandler {
|
||||||
static Logger logger = LogManager.getLogger(NettyServerHandler.class);
|
static Logger logger = LogManager.getLogger(NettyServerHandler.class);
|
||||||
public Map<String, FunctionNode> doipFunctionNodeMap;
|
public Map<String, FunctionNode> doipFunctionNodeMap;
|
||||||
|
|
||||||
@ -71,81 +70,6 @@ public class DOOPRequestHandler implements DoipRequestHandler, RepositoryHandler
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleHello(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.Hello.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation Hello is not provided");
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleListOps(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.ListOps.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation ListOps is not provided");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleCreate(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.Create.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation Create is not provided");
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleUpdate(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.Update.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation Update is not provided");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleDelete(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.Delete.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation Delete is not provided");
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DoipMessage handleRetrieve(DoipMessage request) {
|
|
||||||
FunctionNode fn = doipFunctionNodeMap.get(BasicOperations.Retrieve.getName());
|
|
||||||
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
|
|
||||||
if (fn != null) {
|
|
||||||
return buildRequestAndInvokeEngine(fn, request);
|
|
||||||
} else {
|
|
||||||
logger.error("DoipOperation Retrieve is not provided");
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DoipMessage buildRequestAndInvokeEngine(FunctionNode fn, DoipMessage msg) {
|
public DoipMessage buildRequestAndInvokeEngine(FunctionNode fn, DoipMessage msg) {
|
||||||
ContractRequest contractRequest = constructContractRequest(fn, msg);
|
ContractRequest contractRequest = constructContractRequest(fn, msg);
|
||||||
DoipMessagePacker arg = new DoipMessagePacker("doip", msg);
|
DoipMessagePacker arg = new DoipMessagePacker("doip", msg);
|
||||||
|
@ -42,9 +42,9 @@ public class DoipClusterServer extends DoipServerImpl {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int startDoipServer(int startPort) throws InterruptedException {
|
public static int startDoipServer(int startPort, JsonElement otherConfigs) throws InterruptedException {
|
||||||
try {
|
try {
|
||||||
int ret = DoipLocalSingleton.run(startPort);
|
int ret = DoipLocalSingleton.run(startPort, otherConfigs);
|
||||||
return ret;
|
return ret;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
package org.bdware.sc.server;
|
package org.bdware.sc.server;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.bdware.doip.audit.EndpointConfig;
|
||||||
|
import org.bdware.doip.audit.EndpointInfo;
|
||||||
|
import org.bdware.doip.audit.client.AuditIrpClient;
|
||||||
|
import org.bdware.doip.audit.config.TempConfigStorage;
|
||||||
import org.bdware.doip.endpoint.server.DoipListenerConfig;
|
import org.bdware.doip.endpoint.server.DoipListenerConfig;
|
||||||
import org.bdware.doip.endpoint.server.DoipServerImpl;
|
import org.bdware.doip.endpoint.server.DoipServerImpl;
|
||||||
import org.bdware.doip.endpoint.server.DoipServiceInfo;
|
import org.bdware.doip.endpoint.server.DoipServiceInfo;
|
||||||
@ -12,6 +17,7 @@ import org.bdware.sc.handler.DOOPRequestHandler;
|
|||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class DoipLocalSingleton {
|
public class DoipLocalSingleton {
|
||||||
static Logger LOGGER = LogManager.getLogger(DoipLocalSingleton.class);
|
static Logger LOGGER = LogManager.getLogger(DoipLocalSingleton.class);
|
||||||
@ -24,7 +30,7 @@ public class DoipLocalSingleton {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
DoipLocalSingleton.run(port);
|
DoipLocalSingleton.run(port, null);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -33,17 +39,17 @@ public class DoipLocalSingleton {
|
|||||||
doipServerThread.start();
|
doipServerThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int run(int port) throws InterruptedException {
|
public static int run(int port, JsonElement otherConfigs) throws InterruptedException {
|
||||||
int i = -1;
|
int i = -1;
|
||||||
LOGGER.info("try to listener port:" + port);
|
LOGGER.info("try to listener port:" + port);
|
||||||
for (i = run("tcp://127.0.0.1:" + port++); i < 0; ) {
|
for (i = run("tcp://127.0.0.1:" + port++, otherConfigs); i < 0; ) {
|
||||||
LOGGER.info("try again to listener port:" + port);
|
LOGGER.info("try again to listener port:" + port);
|
||||||
i = run("tcp://127.0.0.1:" + port++);
|
i = run("tcp://127.0.0.1:" + port++, otherConfigs);
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int run(String doipAddr) throws InterruptedException {
|
public static int run(String doipAddr, JsonElement otherConfigs) throws InterruptedException {
|
||||||
List<DoipListenerConfig> infos = new ArrayList<>();
|
List<DoipListenerConfig> infos = new ArrayList<>();
|
||||||
int port = -1;
|
int port = -1;
|
||||||
try {
|
try {
|
||||||
@ -53,10 +59,28 @@ public class DoipLocalSingleton {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
DoipServiceInfo info = new DoipServiceInfo("aibd.govdata.tj/do.3f9c41e6-9f8e-48a0-9220-53f438d40e43", "ownerDEF", "gateRepo", infos);
|
String repoID = "bdtest/BDRepo/" + UUID.randomUUID().toString();
|
||||||
|
String owner = ContractProcess.instance.getContract().getOwner();
|
||||||
|
String repoType = "Repository";
|
||||||
|
try {
|
||||||
|
if (otherConfigs != null && otherConfigs.isJsonObject()) {
|
||||||
|
EndpointConfig config = new TempConfigStorage(otherConfigs.toString()).loadAsEndpointConfig();
|
||||||
|
if (config.routerURI != null) {
|
||||||
|
AuditIrpClient irpClient = new AuditIrpClient(config);
|
||||||
|
EndpointInfo endpointInfo = irpClient.getEndpointInfo();
|
||||||
|
repoID = endpointInfo.getDoId();
|
||||||
|
owner = endpointInfo.getPubKey();
|
||||||
|
infos.clear();
|
||||||
|
infos.add(new DoipListenerConfig(endpointInfo.getURI(), "2.1"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
DoipServiceInfo info = new DoipServiceInfo(repoID, owner, repoType, infos);
|
||||||
server = new DoipServerImpl(info);
|
server = new DoipServerImpl(info);
|
||||||
DOOPRequestHandler handler = ContractProcess.instance.doopRequestHandler;
|
DOOPRequestHandler handler = ContractProcess.instance.doopRequestHandler;
|
||||||
server.setRepositoryHandler(handler);
|
server.setRequestCallback(handler);
|
||||||
ResultChecker checker = new ResultChecker();
|
ResultChecker checker = new ResultChecker();
|
||||||
server.start(checker);
|
server.start(checker);
|
||||||
checker.waitForResult(1000);
|
checker.waitForResult(1000);
|
||||||
|
Loading…
Reference in New Issue
Block a user