![JAR search and dependency download from the Maven repository](/logo.png)
org.bdware.doip.cluster.util.RouteJoinUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of doip-audit-tool Show documentation
Show all versions of doip-audit-tool Show documentation
doip audit tool developed by bdware
The newest version!
package org.bdware.doip.cluster.util;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.doip.cluster.callback.AsyncJSResultCallback;
import org.bdware.doip.cluster.callback.JoinCountCallback;
import org.bdware.doip.cluster.client.DoaClusterClient;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.endpoint.client.DoipMessageCallback;
import org.bdware.sc.bean.ForkInfo;
import org.bdware.sc.bean.JoinInfo;
import org.bdware.sc.bean.RouteInfo;
import org.bdware.sc.util.JsonUtil;
import wrp.jdk.nashorn.api.scripting.NashornScriptEngineUtil;
import java.util.Map;
public class RouteJoinUtil {
public static final Logger LOGGER = LogManager.getLogger(RouteJoinUtil.class);
public static void route(DoipMessage doipParam, RouteInfo routeInfo, NashornScriptEngineUtil engineUtil, AsyncJSResultCallback asyncJSResultCallback) {
try {
// If the operation truly has routeInfo
String[] BDRepoIDs = engineUtil.doipClusterUtil.getMembers();
if (routeInfo != null) {
if (routeInfo.useDefault == null) {
engineUtil.invokeFunctionWithObjectAsync(routeInfo.funcName, asyncJSResultCallback, doipParam);
return;
}
switch (routeInfo.useDefault) {
case byRequester:
int val = 0;
if (doipParam.credential != null && doipParam.credential.getSigner() != null) {
val = doipParam.credential.getSigner().hashCode() % BDRepoIDs.length;
while (val < 0 && BDRepoIDs.length > 0) {
val = val + BDRepoIDs.length;
}
}
asyncJSResultCallback.onResult(new String[]{BDRepoIDs[val]});
return;
case byArgHash:
val = JsonUtil.toJson(doipParam).hashCode();
val = val % BDRepoIDs.length;
while (val < 0) {
val += BDRepoIDs.length;
}
asyncJSResultCallback.onResult(new String[]{BDRepoIDs[val]});
return;
case byJsonPropHash:
JsonElement jo = tryLoadJsonProp(JsonUtil.parseObject(doipParam).getAsJsonObject(), routeInfo.param);
val = jo.toString().hashCode() % BDRepoIDs.length;
while (val < 0) {
val += BDRepoIDs.length;
}
asyncJSResultCallback.onResult(new String[]{BDRepoIDs[val]});
return;
default:
asyncJSResultCallback.onResult(BDRepoIDs);
return;
}
// 如果没有RouteInfo,默认随机选择一台机器发送
} else {
LOGGER.warn("Not RouteInfo in the function");
String[] retVal = BDRepoIDs.length != 0 ? new String[]{BDRepoIDs[(int) (Math.random() * BDRepoIDs.length)]} : BDRepoIDs;
asyncJSResultCallback.onResult(retVal);
return;
}
} catch (Exception e) {
e.printStackTrace();
}
asyncJSResultCallback.onResult(null);
}
public static JsonElement tryLoadJsonProp(JsonObject routeInfoArg, String param) {
try {
if (routeInfoArg == null)
return JsonNull.INSTANCE;
JsonObject arg;
if (routeInfoArg.isJsonPrimitive()) {
arg = JsonUtil.parseString(routeInfoArg.getAsString()).getAsJsonObject();
} else arg = routeInfoArg.getAsJsonObject();
if (!param.contains(".")) {
return arg.get(param);
} else {
String[] props = param.split("\\.");
JsonElement result = arg;
for (String str : props)
result = result.getAsJsonObject().get(str);
return result;
}
} catch (Exception e) {
e.printStackTrace();
return JsonNull.INSTANCE;
}
}
public static void ddoSendMsgAndJoin(Map cookie, DoaClusterClient doaClusterClient, NashornScriptEngineUtil engineUtil, DoipMessage msg, JoinInfo joinInfo, ForkInfo forkInfo, String[] doidList, DoipMessageCallback cb, JsonObject appendixes) {
JoinCountCallback callback = new JoinCountCallback(cookie, doaClusterClient, engineUtil, msg, joinInfo, forkInfo, doidList, cb, appendixes);
getJoinCount(engineUtil, msg, joinInfo, doidList, callback);
}
public static void getJoinCount(NashornScriptEngineUtil engineUtil, DoipMessage msg, JoinInfo joinInfo, String[] doidList, JoinCountCallback callback) {
try {
if (joinInfo == null) {
callback.onResult(doidList.length);
return;
}
if (joinInfo.joinCountFuncName != null) {
engineUtil.invokeFunctionWithObjectAsync(joinInfo.joinCountFuncName, callback, msg, doidList);
return;
}
if (joinInfo.joinCount != 0) {
callback.onResult(joinInfo.joinCount);
return;
}
} catch (Exception e) {
e.printStackTrace();
}
callback.onResult(doidList.length);
return;
}
public static int getJoinCount(String publicKey, NashornScriptEngineUtil engineUtil, JoinInfo joinInfo, int serversNum, JsonObject joinParams) {
try {
if (joinInfo == null) return serversNum;
if (joinInfo.joinCountFuncName != null) {
JsonElement requester = publicKey == null ? JsonNull.INSTANCE : new JsonPrimitive(publicKey);
return engineUtil.invokeFunction(joinInfo.joinCountFuncName, Integer.class, joinParams, requester);
}
if (joinInfo.joinCount != 0) return joinInfo.joinCount;
} catch (Exception e) {
e.printStackTrace();
}
return serversNum;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy