并行处理

This commit is contained in:
cheney
2022-09-08 20:24:14 +08:00
parent c563ef91d3
commit 9540858fa3
19 changed files with 372 additions and 200 deletions
+1 -1
View File
@@ -28,7 +28,7 @@
<dependency> <dependency>
<groupId>com.sunyard</groupId> <groupId>com.sunyard</groupId>
<artifactId>sydapi4j</artifactId> <artifactId>sydapi4j</artifactId>
<version>1.13.20220908</version> <version>1.12.20220908-1</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -0,0 +1,6 @@
package com.sunyard.sge.database;
public interface ISM3 {
public void update(byte[] pcData);
public String digest();
}
@@ -0,0 +1,6 @@
package com.sunyard.sge.database;
public interface ISM4 {
public byte[] update(byte[] pcData);
public byte[] finish();
}
@@ -0,0 +1,6 @@
package com.sunyard.sge.database;
public interface ISM4Mac {
public void update(byte[] pcData);
public String disget();
}
@@ -2,6 +2,7 @@ package com.sunyard.sge.database;
import com.sunyard.sge.log.LogFactory; import com.sunyard.sge.log.LogFactory;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import racal.sunyard.main.SydApi4j;
import java.util.List; import java.util.List;
@@ -28,7 +29,7 @@ public interface SydApi {
throw new IllegalArgumentException("地址不能为空且等级范围为0到3"); throw new IllegalArgumentException("地址不能为空且等级范围为0到3");
} }
Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel); 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);
} }
@@ -1,6 +1,5 @@
package com.sunyard.sge.database; package com.sunyard.sge.database;
import com.sunyard.SydApiException;
import com.sunyard.sge.database.pool.HsmLinkInfo; import com.sunyard.sge.database.pool.HsmLinkInfo;
import com.sunyard.sge.pool.CommWorker; import com.sunyard.sge.pool.CommWorker;
import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApi4j;
@@ -8,17 +7,14 @@ import racal.sunyard.main.SydApi4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; 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 { public class SydApi4Database extends SydApiBaseFunction {
private static final int BATCH_SIZE = 7680;
// 长连接的所有处理
private static final CommWorker longLinkWorks = new CommWorker();
public SydApi4Database() { public SydApi4Database() {
super(); super();
@@ -66,30 +62,13 @@ public class SydApi4Database extends SydApi4Function {
dataGroups.add(curDataGroup); dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup); keyGroups.add(curKeyGroup);
// 并发处理 // 排队处理
List<FutureTask<List<byte[]>>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<List<byte[]>> task = longLinkWorks.fTask(new Callable<List<byte[]>>() {
@Override
public List<byte[]> call() throws Exception {
return SydApi4Database.super.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
}
});
tasks.add(task);
}
try {
List<byte[]> ret = new ArrayList<>(); List<byte[]> ret = new ArrayList<>();
for (FutureTask<List<byte[]>> t : tasks) { for (int i = 0; i < dataGroups.size(); i++) {
ret.addAll(t.get()); ret.addAll(super.SYD_SM4_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i), iFlag));
} }
return ret;
} catch (Exception e) { return ret;
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
} }
@Override @Override
@@ -127,31 +106,13 @@ public class SydApi4Database extends SydApi4Function {
dataGroups.add(curDataGroup); dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup); keyGroups.add(curKeyGroup);
// 并发处理 // 排队处理
List<FutureTask<String[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<String[]> task = longLinkWorks.fTask(new Callable<String[]>() {
@Override
public String[] call() throws Exception {
return SydApi4Database.super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
}
});
tasks.add(task);
}
try {
List<String> ret = new ArrayList<>(); List<String> ret = new ArrayList<>();
for (FutureTask<String[]> t : tasks) { for (int i = 0; i < dataGroups.size(); i++) {
String[] macs = t.get(); String[] macs = super.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i));
ret.addAll(Arrays.asList(macs)); ret.addAll(Arrays.asList(macs));
} }
return ret.toArray(new String[0]); return ret.toArray(new String[0]);
} catch (Exception e) {
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
} }
@Override @Override
@@ -196,37 +157,20 @@ public class SydApi4Database extends SydApi4Function {
keyGroups.add(curKeyGroup); keyGroups.add(curKeyGroup);
macGroups.add(curMacGroup); macGroups.add(curMacGroup);
// 并发处理 // 排队处理
List<FutureTask<boolean[]>> tasks = new ArrayList<>(); List<Boolean> ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) { for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i; boolean[] rets = super.SYD_SM4Mac_BatchData(
FutureTask<boolean[]> task = longLinkWorks.fTask(new Callable<boolean[]>() { toIntArray(keyGroups.get(i)),
@Override dataGroups.get(i),
public boolean[] call() throws Exception { macGroups.get(i).toArray(new String[0])
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<Boolean> ret = new ArrayList<>();
for (FutureTask<boolean[]> t : tasks) {
boolean[] rets = t.get();
for (boolean r : rets) { for (boolean r : rets) {
ret.add(r); ret.add(r);
} }
} }
return toBoolArray(ret); return toBoolArray(ret);
} catch (Exception e) {
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
} }
} }
@@ -15,7 +15,7 @@ import java.util.List;
/** /**
* 上海黄金交易所 - 数据库加密方案 * 上海黄金交易所 - 数据库加密方案
*/ */
public class SydApi4Function implements SydApi { public class SydApiBaseFunction implements SydApi {
private SydApi4j[] hsms = null; private SydApi4j[] hsms = null;
private HsmLinkInfo[] linkInfos = null; private HsmLinkInfo[] linkInfos = null;
@@ -23,11 +23,11 @@ public class SydApi4Function implements SydApi {
private boolean isShortLinkMode = false; private boolean isShortLinkMode = false;
public SydApi4Function() { public SydApiBaseFunction() {
isShortLinkMode = true; isShortLinkMode = true;
} }
public SydApi4Function(SydApi4j[] hsms, HsmLinkInfo[] linkInfos) { public SydApiBaseFunction(SydApi4j[] hsms, HsmLinkInfo[] linkInfos) {
this.hsms = hsms; this.hsms = hsms;
this.linkInfos = linkInfos; this.linkInfos = linkInfos;
} }
@@ -76,7 +76,6 @@ public class SydApi4Function implements SydApi {
} }
if (!connected) { if (!connected) {
// TODO
throw new SydApiException("连接错误", -1); throw new SydApiException("连接错误", -1);
} }
@@ -769,7 +768,7 @@ public class SydApi4Function implements SydApi {
@Override @Override
public SydSM4 initSM4(int iKeyIndex, int ende) { public ISM4 initSM4(int iKeyIndex, int ende) {
return new SydSM4(this,iKeyIndex,ende); return new SydSM4(this,iKeyIndex,ende);
} }
@@ -3,6 +3,8 @@ package com.sunyard.sge.database;
import com.sunyard.sge.database.pool.HsmLinkInfo; import com.sunyard.sge.database.pool.HsmLinkInfo;
import com.sunyard.sge.database.pool.SydApiPool; import com.sunyard.sge.database.pool.SydApiPool;
import com.sunyard.sge.log.LogFactory; 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 org.apache.logging.log4j.Logger;
import java.util.Arrays; import java.util.Arrays;
@@ -12,24 +14,59 @@ public class SydApiBuilder {
SydApi.SYD_SetLogConfig("./logs/", 0); SydApi.SYD_SetLogConfig("./logs/", 0);
} }
private SydApiPool pool; private SydApiPool pool;
private CommWorker longLinkWorks;
public SydApiBuilder( public SydApiBuilder(
String[] pcIpList, String[] pcIpList,
int[] iPortList, int[] iPortList,
int iConnectTimeOut, int iConnectTimeOut,
int iDealTimeOut 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(); Logger log = LogFactory.getLogger();
if ( log.isDebugEnabled() ) {
log.debug("创建链接"); log.debug("创建链接");
log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut); 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); HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
this.pool = new SydApiPool(linkInfo); this.pool = new SydApiPool(linkInfo);
longLinkWorks = new CommWorker();
warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut ); warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
} }
public SydApi build() { public CommWorker getLongLinkWorks() {
return longLinkWorks;
}
/**
* 获取池内对象
* @return 池内对象
*/
public SydApi get(){
return pool.get(); return pool.get();
} }
/**
* 升级
* 修改了原实现
* @return 包装对象
*/
public SydApi build() {
return new SydApiLongLinkWrap( this );
}
private void warmUp(String[] pcIpList, private void warmUp(String[] pcIpList,
int[] iPortList, int[] iPortList,
@@ -4,6 +4,9 @@ package com.sunyard.sge.database;
* */ * */
public class SydApiConfig { public class SydApiConfig {
// 批量数据,每组最大长度
public static final int BATCH_SIZE = 7680;
// 数据包长度 // 数据包长度
private final int MaxDataLenEachPack = 4064; private final int MaxDataLenEachPack = 4064;
@@ -1,12 +1,17 @@
package com.sunyard.sge.database; package com.sunyard.sge.database;
import com.sunyard.SydApiException; 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.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask; 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 @Override
public String SYD_SM3_Hash_ShortData(byte[] pcData) { public String SYD_SM3_Hash_ShortData(byte[] pcData) {
FutureTask<String> task = Workers.getLongLinkWorks().fTask(new Callable<String>() { FutureTask<String> task = builder.getLongLinkWorks().fTask(new Callable<String>() {
@Override @Override
public String call() throws Exception { public String call() throws Exception {
return builder.build().SYD_SM3_Hash_ShortData(pcData); return builder.get().SYD_SM3_Hash_ShortData(pcData);
} }
}); });
try { try {
@@ -45,10 +50,10 @@ public class SydApiLongLinkWrap implements SydApi {
@Override @Override
public LongDataReturn<String, String> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<String, String> SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) {
FutureTask<LongDataReturn<String, String>> task = Workers.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, String>>() { FutureTask<LongDataReturn<String, String>> task = builder.getLongLinkWorks().fTask(new Callable<LongDataReturn<String, String>>() {
@Override @Override
public LongDataReturn<String, String> call() throws Exception { public LongDataReturn<String, String> call() throws Exception {
return builder.build().SYD_SM3_Hash_LongData(pcData,iPkgNum, pcProcData); return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData);
} }
}); });
try { try {
@@ -60,12 +65,17 @@ public class SydApiLongLinkWrap implements SydApi {
@Override @Override
public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) {
return new byte[0]; FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
}
@Override @Override
public List<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) { public byte[] call() throws Exception {
return null; return builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag);
}
});
try {
return task.get();
} catch (Exception e) {
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
} }
@Override @Override
@@ -73,15 +83,6 @@ public class SydApiLongLinkWrap implements SydApi {
return new byte[0]; return new byte[0];
} }
@Override
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
return new String[0];
}
@Override
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
return new boolean[0];
}
@Override @Override
public LongDataReturn<String, String> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { public LongDataReturn<String, String> SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) {
@@ -104,17 +105,221 @@ public class SydApiLongLinkWrap implements SydApi {
} }
@Override @Override
public SydSM4 initSM4(int iKeyIndex, int ende) { public ISM4 initSM4(int iKeyIndex, int ende) {
return null; return new SydSM4(this, iKeyIndex, ende);
} }
@Override @Override
public SydSM3 initSM3() { public ISM3 initSM3() {
return null; return new SydSM3(this);
} }
@Override @Override
public SydSM4Mac initSM4Mac(int iKeyIndex) { public ISM4Mac initSM4Mac(int iKeyIndex) {
return null; return new SydSM4Mac(this, iKeyIndex);
}
@Override
public List<byte[]> SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) {
// 将数据进行分组,防止超长。
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> 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<FutureTask<List<byte[]>>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<List<byte[]>> task = builder.getLongLinkWorks().fTask(new Callable<List<byte[]>>() {
@Override
public List<byte[]> 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<byte[]> ret = new ArrayList<>();
for (FutureTask<List<byte[]>> 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<byte[]> pcData) {
// 将数据进行分组,防止超长。
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> 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<FutureTask<String[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<String[]> task = builder.getLongLinkWorks().fTask(new Callable<String[]>() {
@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<String> ret = new ArrayList<>();
for (FutureTask<String[]> 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<byte[]> pcData, String[] pcMac) {
// 将数据进行分组,防止超长。
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
List<List<String>> macGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
List<String> 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<FutureTask<boolean[]>> tasks = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
FutureTask<boolean[]> task = builder.getLongLinkWorks().fTask(new Callable<boolean[]>() {
@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<Boolean> ret = new ArrayList<>();
for (FutureTask<boolean[]> t : tasks) {
boolean[] rets = t.get();
for (boolean r : rets) {
ret.add(r);
}
}
return toBoolArray(ret);
} catch (Exception e) {
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
} }
} }
@@ -3,7 +3,7 @@ package com.sunyard.sge.database;
import com.sunyard.SydApiException; import com.sunyard.SydApiException;
public class SydSM3 { public class SydSM3 implements ISM3 {
private boolean is_finished = false; private boolean is_finished = false;
private SydApi api; private SydApi api;
private String pcProcData; private String pcProcData;
@@ -4,7 +4,7 @@ import com.sunyard.SydApiException;
import com.sunyard.sge.bytes.BytesQueue; import com.sunyard.sge.bytes.BytesQueue;
public class SydSM4 { public class SydSM4 implements ISM4 {
private SydApi api; private SydApi api;
private int iKeyIndex; private int iKeyIndex;
@@ -66,9 +66,6 @@ public class SydSM4 {
} }
} }
else { else {
if (null == queue || null == pcData) {
throw new IllegalArgumentException();
}
queue.push(pcData); queue.push(pcData);
if ((queue.getLength()) / 16 < 2) { if ((queue.getLength()) / 16 < 2) {
return new byte[0]; return new byte[0];
@@ -78,9 +75,7 @@ public class SydSM4 {
iPkgNum = 2; iPkgNum = 2;
return bytes2; return bytes2;
} }
} }
public byte[] finish() { public byte[] finish() {
@@ -5,7 +5,7 @@ import com.sunyard.proto.Util;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public class SydSM4Backup { public class SydSM4Backup implements ISM4 {
private SydApi api; private SydApi api;
private int iKeyIndex; private int iKeyIndex;
@@ -5,31 +5,19 @@ import com.sunyard.sge.bytes.BytesQueue;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public class SydSM4Mac { public class SydSM4Mac implements ISM4Mac {
private SydApi api; private final SydApi api;
private byte[] last_in_data; private final int iKeyIndex;
private int iKeyIndex;
private int iPkgNum = 1; private int iPkgNum = 1;
private String pcProcData; private String pcProcData;
private boolean is_finished; private boolean is_finished;
private String pcMac; private String pcMac;
private byte[] pcdataResult = new byte[0]; private BytesQueue queue = new BytesQueue();
private String pcdataStr;
BytesQueue queue = new BytesQueue();
public SydSM4Mac(SydApi api, int iKeyIndex) { public SydSM4Mac(SydApi api, int iKeyIndex) {
this.api = api; this.api = api;
this.iKeyIndex = iKeyIndex; this.iKeyIndex = iKeyIndex;
this.pcProcData = pcProcData; this.pcProcData = null;
// this.pcMac=pcMac;
}
public SydSM4Mac(SydApi api) {
this.api = api;
}
public void setPcMac(String pcMac) {
this.pcMac = pcMac;
} }
public void update(byte[] pcData) { public void update(byte[] pcData) {
@@ -37,7 +25,7 @@ public class SydSM4Mac {
return; return;
} }
int length = pcData.length; int length = pcData.length;
this.pcdataResult = pcData; byte[] pcdataResult = pcData;
if (is_finished) { if (is_finished) {
throw new SydApiException(-1); throw new SydApiException(-1);
} }
@@ -82,7 +70,7 @@ public class SydSM4Mac {
} }
} }
public LongDataReturn disget() { public String disget() {
if (is_finished) { if (is_finished) {
throw new SydApiException(0); throw new SydApiException(0);
@@ -95,13 +83,8 @@ public class SydSM4Mac {
} }
byte[] pop = queue.pop(); byte[] pop = queue.pop();
if (null == this.pcMac || "".equals(this.pcMac)) {
LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData); LongDataReturn<String, String> stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
return stringStringLongDataReturn; return stringStringLongDataReturn.getData();
} else {
LongDataReturn<String, Boolean> stringBooleanLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData, pcMac);
return stringBooleanLongDataReturn;
}
} }
@@ -3,6 +3,7 @@ package com.sunyard.sge.database.pool;
import com.sunyard.SydApiException; import com.sunyard.SydApiException;
import com.sunyard.sge.database.SydApi; import com.sunyard.sge.database.SydApi;
import com.sunyard.sge.database.SydApi4Database; import com.sunyard.sge.database.SydApi4Database;
import com.sunyard.sge.database.SydApiBaseFunction;
import com.sunyard.sge.log.LogFactory; import com.sunyard.sge.log.LogFactory;
import com.sunyard.sge.pool.ObjectInPool; import com.sunyard.sge.pool.ObjectInPool;
import com.sunyard.sge.pool.ThreadBasedConnectPool; import com.sunyard.sge.pool.ThreadBasedConnectPool;
@@ -51,7 +52,7 @@ public class SydApiPool extends ThreadBasedConnectPool<SydApi> {
} }
return new SydApi4Database(apis, linkInfos); return new SydApiBaseFunction(apis, linkInfos);
} }
// 保活接口 // 保活接口
@@ -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;
}
}
@@ -45,4 +45,14 @@ public class PoolConfig {
public void setMaxAliveNumber(int maxAliveNumber) { public void setMaxAliveNumber(int maxAliveNumber) {
this.maxAliveNumber = maxAliveNumber; this.maxAliveNumber = maxAliveNumber;
} }
@Override
public String toString() {
return "PoolConfig{" +
"maxIdle=" + maxIdle +
", maxUseless=" + maxUseless +
", keepAliveNumber=" + keepAliveNumber +
", maxAliveNumber=" + maxAliveNumber +
'}';
}
} }
+6 -6
View File
@@ -28,8 +28,8 @@ public class FuncTest {
@Test @Test
public void syd_Short_Connect_Ex(){ public void syd_Short_Connect_Ex(){
String[] pcipList = {"127.0.0.1", "192.168.0.100" }; String[] pcipList = {"192.168.1.129", "192.168.1.129" };
int[] iportList ={8080,8889}; int[] iportList ={8889,8889};
SydApi api = new SydApi4Database(); SydApi api = new SydApi4Database();
try { try {
api.SYD_Short_Connect_Ex(pcipList,iportList,10,10); api.SYD_Short_Connect_Ex(pcipList,iportList,10,10);
@@ -58,9 +58,9 @@ public class FuncTest {
@Test @Test
public void originLong() throws Exception { 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); SydApi.SYD_SetLogConfig("./logs/",3);
Logger log = LogFactory.getLogger();
final SydApi api = builder.build(); final SydApi api = builder.build();
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
int tmp = i; int tmp = i;
@@ -77,8 +77,8 @@ public class FuncTest {
public void originShort() throws Exception { public void originShort() throws Exception {
SydApi.SYD_SetLogConfig("./logs/",3); SydApi.SYD_SetLogConfig("./logs/",3);
Logger log = LogFactory.getLogger(); Logger log = LogFactory.getLogger();
String[] pcipList = {"192.168.0.100", "192.168.0.100", "192.168.0.100","192.168.0.100" }; String[] pcipList = {"192.168.1.129", "192.168.1.129" };
int[] iportList ={8080,8889,8889,8889}; int[] iportList ={8080,8889};
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
int tmp = i; int tmp = i;
+17 -22
View File
@@ -19,10 +19,10 @@ public class LongDataTest {
// System.setProperty("com.sunyard.sydapi4j.debug", "true"); // System.setProperty("com.sunyard.sydapi4j.debug", "true");
SydApiBuilder builder = new SydApiBuilder( SydApiBuilder builder = new SydApiBuilder(
new String[]{"192.168.1.128"}, new String[]{"192.168.1.129"},
new int[]{8889}, new int[]{8889},
10, 10,
15 30
); );
api = builder.build(); api = builder.build();
@@ -30,7 +30,7 @@ public class LongDataTest {
@Test @Test
public void sm3_case1() { public void sm3_case1() {
SydSM3 sm3 = api.initSM3(); ISM3 sm3 = api.initSM3();
sm3.update(null); sm3.update(null);
String mac = sm3.digest(); String mac = sm3.digest();
Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac); Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac);
@@ -38,7 +38,7 @@ public class LongDataTest {
@Test @Test
public void sm3_case2() { public void sm3_case2() {
SydSM3 sm3 = api.initSM3(); ISM3 sm3 = api.initSM3();
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
String mac = sm3.digest(); String mac = sm3.digest();
Assert.assertEquals("9431C865C84B02C8A7C503F53A6D6C3C66704F8F713D124610314E31B19937F7", mac); Assert.assertEquals("9431C865C84B02C8A7C503F53A6D6C3C66704F8F713D124610314E31B19937F7", mac);
@@ -46,7 +46,7 @@ public class LongDataTest {
@Test @Test
public void sm3_case3() { public void sm3_case3() {
SydSM3 sm3 = api.initSM3(); ISM3 sm3 = api.initSM3();
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678")); sm3.update(Util.hexString2Bytes("1234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"));
String mac = sm3.digest(); String mac = sm3.digest();
@@ -55,7 +55,7 @@ public class LongDataTest {
@Test @Test
public void sm3_case4() { public void sm3_case4() {
SydSM3 sm3 = api.initSM3(); ISM3 sm3 = api.initSM3();
System.out.print("org="); System.out.print("org=");
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
int lucky = new Random().nextInt(4065); int lucky = new Random().nextInt(4065);
@@ -73,49 +73,44 @@ public class LongDataTest {
@Test @Test
public void sm3_case5() { public void sm3_case5() {
SydSM3 sm3 = api.initSM3(); ISM3 sm3 = api.initSM3();
String mac = sm3.digest(); String mac = sm3.digest();
Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac); Assert.assertEquals("1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B", mac);
} }
@Test @Test
public void sm4mac_case1() { public void sm4mac_case1() {
SydSM4Mac sydApiMac = api.initSM4Mac(1); ISM4Mac sydApiMac = api.initSM4Mac(1);
sydApiMac.update(null); sydApiMac.update(null);
String mac = (String) sydApiMac.disget().getData(); String mac = sydApiMac.disget();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
} }
@Test @Test
public void sm4mac_case2() { public void sm4mac_case2() {
SydSM4Mac sydApiMac = api.initSM4Mac(1); ISM4Mac sydApiMac = api.initSM4Mac(1);
String mac = (String) sydApiMac.disget().getData(); String mac = sydApiMac.disget();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
} }
@Test @Test
public void sm4mac_case3() { public void sm4mac_case3() {
SydSM4Mac sydApiMac = api.initSM4Mac(1); ISM4Mac sydApiMac = api.initSM4Mac(1);
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
// int lucky = new Random().nextInt(4065); // int lucky = new Random().nextInt(4065);
byte[] data = new byte[66]; byte[] data = new byte[66];
// System.out.println("len=" + lucky);
// new Random().nextBytes( data );
// sydApiMac.setPcMac("405C2DCF4884240B7F2E4FF56B00639A");
sydApiMac.setPcMac("72A7EFF0004CE7D2A1B7C2260726EC38");
sydApiMac.update(data); sydApiMac.update(data);
} }
boolean mac = (boolean) sydApiMac.disget().getData(); String mac = (String) sydApiMac.disget();
// String mac1 = (String) sydApiMac.disget().getData();
System.out.println(mac); System.out.println(mac);
} }
@Test @Test
public void case5() { public void case5() {
SydSM4 sydApiSM4 = api.initSM4(1, 1); ISM4 sydApiSM4 = api.initSM4(1, 1);
byte[] enData = sydApiSM4.finish(); byte[] enData = sydApiSM4.finish();
System.out.println(Util.bytes2HexString(enData)); System.out.println(Util.bytes2HexString(enData));
Assert.assertArrayEquals(Util.hexString2Bytes("FF49F76AD3A71651FE1A8A9F0D2A689E"), enData); Assert.assertArrayEquals(Util.hexString2Bytes("FF49F76AD3A71651FE1A8A9F0D2A689E"), enData);
@@ -123,7 +118,7 @@ public class LongDataTest {
@Test @Test
public void case6() { public void case6() {
SydSM4 sydApiSM4 = api.initSM4(1, 1); ISM4 sydApiSM4 = api.initSM4(1, 1);
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
int lucky = new Random().nextInt(4065); int lucky = new Random().nextInt(4065);
@@ -144,8 +139,8 @@ public class LongDataTest {
int max = 1000; int max = 1000;
int size = 4065; int size = 4065;
SydSM4 en = api.initSM4(1, 1); ISM4 en = api.initSM4(1, 1);
SydSM4 de = api.initSM4(1, 0); ISM4 de = api.initSM4(1, 0);
ByteBuffer inData = ByteBuffer.allocate(max * size); ByteBuffer inData = ByteBuffer.allocate(max * size);
ByteBuffer enData = ByteBuffer.allocate(max * size + 16); ByteBuffer enData = ByteBuffer.allocate(max * size + 16);