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);