diff --git a/pom.xml b/pom.xml
index 827cee5..1543744 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
com.sunyard
sydapi4j
- 1.13.20220908
+ 1.12.20220908-1
diff --git a/src/main/java/com/sunyard/sge/database/ISM3.java b/src/main/java/com/sunyard/sge/database/ISM3.java
new file mode 100644
index 0000000..bfa739d
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/ISM3.java
@@ -0,0 +1,6 @@
+package com.sunyard.sge.database;
+
+public interface ISM3 {
+ public void update(byte[] pcData);
+ public String digest();
+}
diff --git a/src/main/java/com/sunyard/sge/database/ISM4.java b/src/main/java/com/sunyard/sge/database/ISM4.java
new file mode 100644
index 0000000..c824256
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/ISM4.java
@@ -0,0 +1,6 @@
+package com.sunyard.sge.database;
+
+public interface ISM4 {
+ public byte[] update(byte[] pcData);
+ public byte[] finish();
+}
diff --git a/src/main/java/com/sunyard/sge/database/ISM4Mac.java b/src/main/java/com/sunyard/sge/database/ISM4Mac.java
new file mode 100644
index 0000000..0f061e8
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/ISM4Mac.java
@@ -0,0 +1,6 @@
+package com.sunyard.sge.database;
+
+public interface ISM4Mac {
+ public void update(byte[] pcData);
+ public String disget();
+}
diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java
index 15e9fd3..7973d6f 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi.java
@@ -2,6 +2,7 @@ package com.sunyard.sge.database;
import com.sunyard.sge.log.LogFactory;
import org.apache.logging.log4j.Logger;
+import racal.sunyard.main.SydApi4j;
import java.util.List;
@@ -28,7 +29,7 @@ public interface SydApi {
throw new IllegalArgumentException("地址不能为空且等级范围为0到3");
}
Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel);
-// SydApi4j.setLogger(logger);
+ SydApi4j.setLogger(logger);
}
/**
@@ -271,9 +272,9 @@ public interface SydApi {
);
- public SydSM4 initSM4(int iKeyIndex, int ende);
+ public ISM4 initSM4(int iKeyIndex, int ende);
- public SydSM3 initSM3();
+ public ISM3 initSM3();
- public SydSM4Mac initSM4Mac(int iKeyIndex);
+ public ISM4Mac initSM4Mac(int iKeyIndex);
}
diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
index fb8b6d0..d7f3d02 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java
@@ -1,6 +1,5 @@
package com.sunyard.sge.database;
-import com.sunyard.SydApiException;
import com.sunyard.sge.database.pool.HsmLinkInfo;
import com.sunyard.sge.pool.CommWorker;
import racal.sunyard.main.SydApi4j;
@@ -8,17 +7,14 @@ import racal.sunyard.main.SydApi4j;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.FutureTask;
+
+import static com.sunyard.sge.database.SydApiConfig.BATCH_SIZE;
/**
* 主要用于短连接
*/
-public class SydApi4Database extends SydApi4Function {
- private static final int BATCH_SIZE = 7680;
- // 长连接的所有处理
- private static final CommWorker longLinkWorks = new CommWorker();
+public class SydApi4Database extends SydApiBaseFunction {
public SydApi4Database() {
super();
@@ -66,30 +62,13 @@ public class SydApi4Database extends SydApi4Function {
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
- // 并发处理
- List>> tasks = new ArrayList<>();
+ // 排队处理
+ List ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
-
- int finalI = i;
- FutureTask> task = longLinkWorks.fTask(new Callable>() {
- @Override
- public List call() throws Exception {
- return SydApi4Database.super.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
- }
- });
- tasks.add(task);
+ ret.addAll(super.SYD_SM4_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i), iFlag));
}
- try {
- List ret = new ArrayList<>();
- for (FutureTask> t : tasks) {
- ret.addAll(t.get());
- }
- return ret;
-
- } catch (Exception e) {
- throw new SydApiException("并行任务执行失败", 0xC101, e);
- }
+ return ret;
}
@Override
@@ -127,31 +106,13 @@ public class SydApi4Database extends SydApi4Function {
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
- // 并发处理
- List> tasks = new ArrayList<>();
+ // 排队处理
+ List ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
-
- int finalI = i;
- FutureTask task = longLinkWorks.fTask(new Callable() {
- @Override
- public String[] call() throws Exception {
- return SydApi4Database.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
- }
- });
- tasks.add(task);
- }
-
- try {
- List ret = new ArrayList<>();
- for (FutureTask t : tasks) {
- String[] macs = t.get();
- ret.addAll(Arrays.asList(macs));
- }
- return ret.toArray(new String[0]);
-
- } catch (Exception e) {
- throw new SydApiException("并行任务执行失败", 0xC101, e);
+ String[] macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
+ ret.addAll(Arrays.asList(macs));
}
+ return ret.toArray(new String[0]);
}
@Override
@@ -196,37 +157,20 @@ public class SydApi4Database extends SydApi4Function {
keyGroups.add(curKeyGroup);
macGroups.add(curMacGroup);
- // 并发处理
- List> tasks = new ArrayList<>();
+ // 排队处理
+ List ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
- int finalI = i;
- FutureTask task = longLinkWorks.fTask(new Callable() {
- @Override
- public boolean[] call() throws Exception {
- return SydApi4Database.super.SYD_SM4Mac_BatchData(
- toIntArray(keyGroups.get(finalI)),
- dataGroups.get(finalI),
- macGroups.get(finalI).toArray(new String[0])
- );
- }
- });
- tasks.add(task);
- }
-
- try {
- List ret = new ArrayList<>();
- for (FutureTask t : tasks) {
- boolean[] rets = t.get();
- for (boolean r : rets) {
- ret.add(r);
- }
+ boolean[] rets = super.SYD_SM4Mac_BatchData(
+ toIntArray(keyGroups.get(i)),
+ dataGroups.get(i),
+ macGroups.get(i).toArray(new String[0])
+ );
+ for (boolean r : rets) {
+ ret.add(r);
}
- return toBoolArray(ret);
-
- } catch (Exception e) {
- throw new SydApiException("并行任务执行失败", 0xC101, e);
}
+ return toBoolArray(ret);
}
}
diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Function.java b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
similarity index 99%
rename from src/main/java/com/sunyard/sge/database/SydApi4Function.java
rename to src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
index fa8e5c1..7188b04 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi4Function.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
@@ -15,7 +15,7 @@ import java.util.List;
/**
* 上海黄金交易所 - 数据库加密方案
*/
-public class SydApi4Function implements SydApi {
+public class SydApiBaseFunction implements SydApi {
private SydApi4j[] hsms = null;
private HsmLinkInfo[] linkInfos = null;
@@ -23,11 +23,11 @@ public class SydApi4Function implements SydApi {
private boolean isShortLinkMode = false;
- public SydApi4Function() {
+ public SydApiBaseFunction() {
isShortLinkMode = true;
}
- public SydApi4Function(SydApi4j[] hsms, HsmLinkInfo[] linkInfos) {
+ public SydApiBaseFunction(SydApi4j[] hsms, HsmLinkInfo[] linkInfos) {
this.hsms = hsms;
this.linkInfos = linkInfos;
}
@@ -76,7 +76,6 @@ public class SydApi4Function implements SydApi {
}
if (!connected) {
- // TODO
throw new SydApiException("连接错误", -1);
}
@@ -769,7 +768,7 @@ public class SydApi4Function implements SydApi {
@Override
- public SydSM4 initSM4(int iKeyIndex, int ende) {
+ public ISM4 initSM4(int iKeyIndex, int ende) {
return new SydSM4(this,iKeyIndex,ende);
}
diff --git a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
index 5f8aa59..78df6e4 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
@@ -3,6 +3,8 @@ package com.sunyard.sge.database;
import com.sunyard.sge.database.pool.HsmLinkInfo;
import com.sunyard.sge.database.pool.SydApiPool;
import com.sunyard.sge.log.LogFactory;
+import com.sunyard.sge.pool.CommWorker;
+import com.sunyard.sge.pool.PoolConfig;
import org.apache.logging.log4j.Logger;
import java.util.Arrays;
@@ -12,24 +14,59 @@ public class SydApiBuilder {
SydApi.SYD_SetLogConfig("./logs/", 0);
}
private SydApiPool pool;
+ private CommWorker longLinkWorks;
+
+
public SydApiBuilder(
String[] pcIpList,
int[] iPortList,
int iConnectTimeOut,
int iDealTimeOut
+ ) {
+ this( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig() );
+ }
+ public SydApiBuilder(
+ String[] pcIpList,
+ int[] iPortList,
+ int iConnectTimeOut,
+ int iDealTimeOut,
+ PoolConfig config
) {
Logger log = LogFactory.getLogger();
- log.debug("创建链接");
- log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut);
+
+ if ( log.isDebugEnabled() ) {
+ log.debug("创建链接");
+ log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut);
+ log.debug("pool config {}", config);
+ }
+
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
this.pool = new SydApiPool(linkInfo);
+ longLinkWorks = new CommWorker();
warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
}
- public SydApi build() {
+ public CommWorker getLongLinkWorks() {
+ return longLinkWorks;
+ }
+
+ /**
+ * 获取池内对象
+ * @return 池内对象
+ */
+ public SydApi get(){
return pool.get();
}
+ /**
+ * 升级
+ * 修改了原实现
+ * @return 包装对象
+ */
+ public SydApi build() {
+ return new SydApiLongLinkWrap( this );
+ }
+
private void warmUp(String[] pcIpList,
int[] iPortList,
diff --git a/src/main/java/com/sunyard/sge/database/SydApiConfig.java b/src/main/java/com/sunyard/sge/database/SydApiConfig.java
index eea5aaf..10e6cf0 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiConfig.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiConfig.java
@@ -4,6 +4,9 @@ package com.sunyard.sge.database;
* */
public class SydApiConfig {
+ // 批量数据,每组最大长度
+ public static final int BATCH_SIZE = 7680;
+
// 数据包长度
private final int MaxDataLenEachPack = 4064;
diff --git a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
index 6487186..2828712 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
@@ -1,12 +1,17 @@
package com.sunyard.sge.database;
import com.sunyard.SydApiException;
-import com.sunyard.sge.database.pool.Workers;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
+import static com.sunyard.sge.database.SydApiBaseFunction.toBoolArray;
+import static com.sunyard.sge.database.SydApiBaseFunction.toIntArray;
+import static com.sunyard.sge.database.SydApiConfig.BATCH_SIZE;
+
/**
* 长连接的真正执行过程转发到长连接线程池中执行。
*/
@@ -30,10 +35,10 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public String SYD_SM3_Hash_ShortData(byte[] pcData) {
- FutureTask task = Workers.getLongLinkWorks().fTask(new Callable() {
+ FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
@Override
public String call() throws Exception {
- return builder.build().SYD_SM3_Hash_ShortData(pcData);
+ return builder.get().SYD_SM3_Hash_ShortData(pcData);
}
});
try {
@@ -45,10 +50,10 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) {
- FutureTask> task = Workers.getLongLinkWorks().fTask(new Callable>() {
+ FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
@Override
public LongDataReturn call() throws Exception {
- return builder.build().SYD_SM3_Hash_LongData(pcData,iPkgNum, pcProcData);
+ return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData);
}
});
try {
@@ -60,12 +65,17 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) {
- return new byte[0];
- }
-
- @Override
- public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
- return null;
+ FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
+ @Override
+ public byte[] call() throws Exception {
+ return builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag);
+ }
+ });
+ try {
+ return task.get();
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
@Override
@@ -73,15 +83,6 @@ public class SydApiLongLinkWrap implements SydApi {
return new byte[0];
}
- @Override
- public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
- return new String[0];
- }
-
- @Override
- public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
- return new boolean[0];
- }
@Override
public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) {
@@ -104,17 +105,221 @@ public class SydApiLongLinkWrap implements SydApi {
}
@Override
- public SydSM4 initSM4(int iKeyIndex, int ende) {
- return null;
+ public ISM4 initSM4(int iKeyIndex, int ende) {
+ return new SydSM4(this, iKeyIndex, ende);
}
@Override
- public SydSM3 initSM3() {
- return null;
+ public ISM3 initSM3() {
+ return new SydSM3(this);
}
@Override
- public SydSM4Mac initSM4Mac(int iKeyIndex) {
- return null;
+ public ISM4Mac initSM4Mac(int iKeyIndex) {
+ return new SydSM4Mac(this, iKeyIndex);
+ }
+
+
+ @Override
+ public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) { // 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ }
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ // 并发处理
+ List>> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
+ @Override
+ public List call() throws Exception {
+ SydApi api = builder.get();
+ return api.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask> t : tasks) {
+ ret.addAll(t.get());
+ }
+ return ret;
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+ @Override
+ public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {// 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ }
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
+ @Override
+ public String[] call() throws Exception {
+ SydApi api = builder.get();
+ return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ String[] macs = t.get();
+ ret.addAll(Arrays.asList(macs));
+ }
+ return ret.toArray(new String[0]);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+ @Override
+ public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) {
+ // 将数据进行分组,防止超长。
+ List> dataGroups = new ArrayList<>();
+ List> keyGroups = new ArrayList<>();
+ List> macGroups = new ArrayList<>();
+ int totalLen = 0;
+
+ List curDataGroup = new ArrayList<>();
+ List curKeyGroup = new ArrayList<>();
+ List curMacGroup = new ArrayList<>();
+
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] data = pcData.get(i);
+ if (null == data) {
+ data = new byte[0];
+ }
+ if (
+ curDataGroup.size() > 9 // 分组小于等于 9 个
+ || (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
+ ) {
+ // 扩展包
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ curDataGroup = new ArrayList<>();
+ curKeyGroup = new ArrayList<>();
+ curMacGroup = new ArrayList<>();
+ }
+
+
+ curDataGroup.add(data);
+ curKeyGroup.add(iKeyIndex[i]);
+ curMacGroup.add(pcMac[i]);
+ totalLen = data.length;
+ }
+
+ dataGroups.add(curDataGroup);
+ keyGroups.add(curKeyGroup);
+ macGroups.add(curMacGroup);
+
+ // 并发处理
+ List> tasks = new ArrayList<>();
+ for (int i = 0; i < dataGroups.size(); i++) {
+
+ int finalI = i;
+ FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
+ @Override
+ public boolean[] call() throws Exception {
+ SydApi api = builder.get();
+ return api.SYD_SM4Mac_BatchData(
+ toIntArray(keyGroups.get(finalI)),
+ dataGroups.get(finalI),
+ macGroups.get(finalI).toArray(new String[0])
+ );
+ }
+ });
+ tasks.add(task);
+ }
+
+ try {
+ List ret = new ArrayList<>();
+ for (FutureTask t : tasks) {
+ boolean[] rets = t.get();
+ for (boolean r : rets) {
+ ret.add(r);
+ }
+ }
+ return toBoolArray(ret);
+
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
}
diff --git a/src/main/java/com/sunyard/sge/database/SydSM3.java b/src/main/java/com/sunyard/sge/database/SydSM3.java
index 9c6799f..50540aa 100644
--- a/src/main/java/com/sunyard/sge/database/SydSM3.java
+++ b/src/main/java/com/sunyard/sge/database/SydSM3.java
@@ -3,7 +3,7 @@ package com.sunyard.sge.database;
import com.sunyard.SydApiException;
-public class SydSM3 {
+public class SydSM3 implements ISM3 {
private boolean is_finished = false;
private SydApi api;
private String pcProcData;
diff --git a/src/main/java/com/sunyard/sge/database/SydSM4.java b/src/main/java/com/sunyard/sge/database/SydSM4.java
index 7c9dfa4..f667005 100644
--- a/src/main/java/com/sunyard/sge/database/SydSM4.java
+++ b/src/main/java/com/sunyard/sge/database/SydSM4.java
@@ -4,7 +4,7 @@ import com.sunyard.SydApiException;
import com.sunyard.sge.bytes.BytesQueue;
-public class SydSM4 {
+public class SydSM4 implements ISM4 {
private SydApi api;
private int iKeyIndex;
@@ -66,9 +66,6 @@ public class SydSM4 {
}
}
else {
- if (null == queue || null == pcData) {
- throw new IllegalArgumentException();
- }
queue.push(pcData);
if ((queue.getLength()) / 16 < 2) {
return new byte[0];
@@ -78,9 +75,7 @@ public class SydSM4 {
iPkgNum = 2;
return bytes2;
-
}
-
}
public byte[] finish() {
diff --git a/src/main/java/com/sunyard/sge/database/SydSM4Backup.java b/src/main/java/com/sunyard/sge/database/SydSM4Backup.java
index b78a100..e1bf98e 100644
--- a/src/main/java/com/sunyard/sge/database/SydSM4Backup.java
+++ b/src/main/java/com/sunyard/sge/database/SydSM4Backup.java
@@ -5,7 +5,7 @@ import com.sunyard.proto.Util;
import java.nio.ByteBuffer;
-public class SydSM4Backup {
+public class SydSM4Backup implements ISM4 {
private SydApi api;
private int iKeyIndex;
diff --git a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
index 6073cbe..bb07577 100644
--- a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
+++ b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
@@ -5,31 +5,19 @@ import com.sunyard.sge.bytes.BytesQueue;
import java.nio.ByteBuffer;
-public class SydSM4Mac {
- private SydApi api;
- private byte[] last_in_data;
- private int iKeyIndex;
+public class SydSM4Mac implements ISM4Mac {
+ private final SydApi api;
+ private final int iKeyIndex;
private int iPkgNum = 1;
private String pcProcData;
private boolean is_finished;
private String pcMac;
- private byte[] pcdataResult = new byte[0];
- private String pcdataStr;
- BytesQueue queue = new BytesQueue();
+ private BytesQueue queue = new BytesQueue();
public SydSM4Mac(SydApi api, int iKeyIndex) {
this.api = api;
this.iKeyIndex = iKeyIndex;
- this.pcProcData = pcProcData;
-// this.pcMac=pcMac;
- }
-
- public SydSM4Mac(SydApi api) {
- this.api = api;
- }
-
- public void setPcMac(String pcMac) {
- this.pcMac = pcMac;
+ this.pcProcData = null;
}
public void update(byte[] pcData) {
@@ -37,7 +25,7 @@ public class SydSM4Mac {
return;
}
int length = pcData.length;
- this.pcdataResult = pcData;
+ byte[] pcdataResult = pcData;
if (is_finished) {
throw new SydApiException(-1);
}
@@ -51,7 +39,7 @@ public class SydSM4Mac {
if (length % 16 != 0) {
queue.push(pcData);
byte[] pop = queue.pop(16, 0);
- pcdataResult=pop;
+ pcdataResult =pop;
}
if (null == this.pcMac || "".equals(this.pcMac)) {
LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData);
@@ -82,7 +70,7 @@ public class SydSM4Mac {
}
}
- public LongDataReturn disget() {
+ public String disget() {
if (is_finished) {
throw new SydApiException(0);
@@ -95,13 +83,8 @@ public class SydSM4Mac {
}
byte[] pop = queue.pop();
- if (null == this.pcMac || "".equals(this.pcMac)) {
- LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
- return stringStringLongDataReturn;
- } else {
- LongDataReturn stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData, pcMac);
- return stringBooleanLongDataReturn;
- }
+ LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
+ return stringStringLongDataReturn.getData();
}
diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
index 7dd57cd..cba578a 100644
--- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
+++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
@@ -3,6 +3,7 @@ package com.sunyard.sge.database.pool;
import com.sunyard.SydApiException;
import com.sunyard.sge.database.SydApi;
import com.sunyard.sge.database.SydApi4Database;
+import com.sunyard.sge.database.SydApiBaseFunction;
import com.sunyard.sge.log.LogFactory;
import com.sunyard.sge.pool.ObjectInPool;
import com.sunyard.sge.pool.ThreadBasedConnectPool;
@@ -51,7 +52,7 @@ public class SydApiPool extends ThreadBasedConnectPool {
}
- return new SydApi4Database(apis, linkInfos);
+ return new SydApiBaseFunction(apis, linkInfos);
}
// 保活接口
diff --git a/src/main/java/com/sunyard/sge/database/pool/Workers.java b/src/main/java/com/sunyard/sge/database/pool/Workers.java
deleted file mode 100644
index 2614fb5..0000000
--- a/src/main/java/com/sunyard/sge/database/pool/Workers.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.sunyard.sge.database.pool;
-
-import com.sunyard.sge.pool.CommWorker;
-
-public class Workers {
- // 长连接的所有处理
- private static final CommWorker longLinkWorks = new CommWorker();
-
- // 短链接 批量处理
- private static final CommWorker shortLinkWorks = new CommWorker();
-
- public static CommWorker getLongLinkWorks() {
- return longLinkWorks;
- }
-
- public static CommWorker getShortLinkWorks() {
- return shortLinkWorks;
- }
-}
diff --git a/src/main/java/com/sunyard/sge/pool/PoolConfig.java b/src/main/java/com/sunyard/sge/pool/PoolConfig.java
index 75f89c8..ad7089d 100644
--- a/src/main/java/com/sunyard/sge/pool/PoolConfig.java
+++ b/src/main/java/com/sunyard/sge/pool/PoolConfig.java
@@ -45,4 +45,14 @@ public class PoolConfig {
public void setMaxAliveNumber(int maxAliveNumber) {
this.maxAliveNumber = maxAliveNumber;
}
+
+ @Override
+ public String toString() {
+ return "PoolConfig{" +
+ "maxIdle=" + maxIdle +
+ ", maxUseless=" + maxUseless +
+ ", keepAliveNumber=" + keepAliveNumber +
+ ", maxAliveNumber=" + maxAliveNumber +
+ '}';
+ }
}
diff --git a/src/test/java/test/FuncTest.java b/src/test/java/test/FuncTest.java
index 7fb6915..70c84ed 100644
--- a/src/test/java/test/FuncTest.java
+++ b/src/test/java/test/FuncTest.java
@@ -28,8 +28,8 @@ public class FuncTest {
@Test
public void syd_Short_Connect_Ex(){
- String[] pcipList = {"127.0.0.1", "192.168.0.100" };
- int[] iportList ={8080,8889};
+ String[] pcipList = {"192.168.1.129", "192.168.1.129" };
+ int[] iportList ={8889,8889};
SydApi api = new SydApi4Database();
try {
api.SYD_Short_Connect_Ex(pcipList,iportList,10,10);
@@ -58,9 +58,9 @@ public class FuncTest {
@Test
public void originLong() throws Exception {
- SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.0.200"}, new int[]{8889}, 10, 15);
+ SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.1.129"}, new int[]{8889}, 10, 15);
SydApi.SYD_SetLogConfig("./logs/",3);
- Logger log = LogFactory.getLogger();
+
final SydApi api = builder.build();
for (int i = 0; i < 1000; i++) {
int tmp = i;
@@ -77,8 +77,8 @@ public class FuncTest {
public void originShort() throws Exception {
SydApi.SYD_SetLogConfig("./logs/",3);
Logger log = LogFactory.getLogger();
- String[] pcipList = {"192.168.0.100", "192.168.0.100", "192.168.0.100","192.168.0.100" };
- int[] iportList ={8080,8889,8889,8889};
+ String[] pcipList = {"192.168.1.129", "192.168.1.129" };
+ int[] iportList ={8080,8889};
for (int i = 0; i < 1000; i++) {
int tmp = i;
diff --git a/src/test/java/test/LongDataTest.java b/src/test/java/test/LongDataTest.java
index 6bc9447..326f4de 100644
--- a/src/test/java/test/LongDataTest.java
+++ b/src/test/java/test/LongDataTest.java
@@ -19,10 +19,10 @@ public class LongDataTest {
// System.setProperty("com.sunyard.sydapi4j.debug", "true");
SydApiBuilder builder = new SydApiBuilder(
- new String[]{"192.168.1.128"},
+ new String[]{"192.168.1.129"},
new int[]{8889},
10,
- 15
+ 30
);
api = builder.build();
@@ -30,7 +30,7 @@ public class LongDataTest {
@Test
public void sm3_case1() {
- SydSM3 sm3 = api.initSM3();
+ ISM3 sm3 = api.initSM3();
sm3.update(null);
String mac = sm3.digest();
Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac);
@@ -38,7 +38,7 @@ public class LongDataTest {
@Test
public void sm3_case2() {
- SydSM3 sm3 = api.initSM3();
+ ISM3 sm3 = api.initSM3();
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
String mac = sm3.digest();
Assert.assertEquals("9431C865C84B02C8A7C503F53A6D6C3C66704F8F713D124610314E31B19937F7", mac);
@@ -46,7 +46,7 @@ public class LongDataTest {
@Test
public void sm3_case3() {
- SydSM3 sm3 = api.initSM3();
+ ISM3 sm3 = api.initSM3();
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
String mac = sm3.digest();
@@ -55,7 +55,7 @@ public class LongDataTest {
@Test
public void sm3_case4() {
- SydSM3 sm3 = api.initSM3();
+ ISM3 sm3 = api.initSM3();
System.out.print("org=");
for (int i = 0; i < 100; i++) {
int lucky = new Random().nextInt(4065);
@@ -73,49 +73,44 @@ public class LongDataTest {
@Test
public void sm3_case5() {
- SydSM3 sm3 = api.initSM3();
+ ISM3 sm3 = api.initSM3();
String mac = sm3.digest();
Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac);
}
@Test
public void sm4mac_case1() {
- SydSM4Mac sydApiMac = api.initSM4Mac(1);
+ ISM4Mac sydApiMac = api.initSM4Mac(1);
sydApiMac.update(null);
- String mac = (String) sydApiMac.disget().getData();
+ String mac = sydApiMac.disget();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
}
@Test
public void sm4mac_case2() {
- SydSM4Mac sydApiMac = api.initSM4Mac(1);
- String mac = (String) sydApiMac.disget().getData();
+ ISM4Mac sydApiMac = api.initSM4Mac(1);
+ String mac = sydApiMac.disget();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
}
@Test
public void sm4mac_case3() {
- SydSM4Mac sydApiMac = api.initSM4Mac(1);
+ ISM4Mac sydApiMac = api.initSM4Mac(1);
for (int i = 0; i < 10; i++) {
// int lucky = new Random().nextInt(4065);
byte[] data = new byte[66];
-// System.out.println("len=" + lucky);
-// new Random().nextBytes( data );
-// sydApiMac.setPcMac("405C2DCF4884240B7F2E4FF56B00639A");
- sydApiMac.setPcMac("72A7EFF0004CE7D2A1B7C2260726EC38");
sydApiMac.update(data);
}
- boolean mac = (boolean) sydApiMac.disget().getData();
-// String mac1 = (String) sydApiMac.disget().getData();
+ String mac = (String) sydApiMac.disget();
System.out.println(mac);
}
@Test
public void case5() {
- SydSM4 sydApiSM4 = api.initSM4(1, 1);
+ ISM4 sydApiSM4 = api.initSM4(1, 1);
byte[] enData = sydApiSM4.finish();
System.out.println(Util.bytes2HexString(enData));
Assert.assertArrayEquals(Util.hexString2Bytes("FF49F76AD3A71651FE1A8A9F0D2A689E"), enData);
@@ -123,7 +118,7 @@ public class LongDataTest {
@Test
public void case6() {
- SydSM4 sydApiSM4 = api.initSM4(1, 1);
+ ISM4 sydApiSM4 = api.initSM4(1, 1);
for (int i = 0; i < 10; i++) {
int lucky = new Random().nextInt(4065);
@@ -144,8 +139,8 @@ public class LongDataTest {
int max = 1000;
int size = 4065;
- SydSM4 en = api.initSM4(1, 1);
- SydSM4 de = api.initSM4(1, 0);
+ ISM4 en = api.initSM4(1, 1);
+ ISM4 de = api.initSM4(1, 0);
ByteBuffer inData = ByteBuffer.allocate(max * size);
ByteBuffer enData = ByteBuffer.allocate(max * size + 16);