package com.ruoyi.dataInterchange.util.jtt809.gnsscenter;
|
|
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.ReentrantLock;
|
|
/**
|
* 下级平台配置服务
|
*
|
* @author tucke
|
*/
|
public class GnssCenterService {
|
|
private final Lock lock = new ReentrantLock();
|
private final Map<Integer, AtomicInteger> SERIAL_NUMBER_MAP = new ConcurrentHashMap<>();
|
private volatile static GnssCenterService instance;
|
|
private GnssCenterService() {
|
}
|
|
public static GnssCenterService getInstance() {
|
if (instance == null) {
|
synchronized (GnssCenterService.class) {
|
if (instance == null) {
|
instance = new GnssCenterService();
|
}
|
}
|
}
|
return instance;
|
}
|
|
public void start() throws Exception {
|
|
}
|
|
/**
|
* 获取加密的参数
|
*
|
* @param gnsscenterId 下级平台接入码
|
* @return {M1, IA1, IC1}
|
*/
|
public int[] getEncryptParam(int gnsscenterId) {
|
return new int[]{1, 2, 3};
|
}
|
|
/**
|
* 获取解密的参数
|
*
|
* @param gnsscenterId 下级平台接入码
|
* @return {M1, IA1, IC1}
|
*/
|
public int[] getDecryptParam(int gnsscenterId) {
|
return getEncryptParam(gnsscenterId);
|
}
|
|
/**
|
* 获取序列号
|
* 1 - 同一个下级平台的序列号保证连续
|
* 2 - 不同下级平台的序列号保证互不干扰
|
* 3 - 序列号达到最大值后,需要清零
|
*
|
* @param gnsscenterId 下级平台接入码
|
* @return 序列号
|
*/
|
public int serialNo(int gnsscenterId) {
|
int serialNumber;
|
lock.lock();
|
try {
|
if (!SERIAL_NUMBER_MAP.containsKey(gnsscenterId)) {
|
if (!SERIAL_NUMBER_MAP.containsKey(gnsscenterId)) {
|
SERIAL_NUMBER_MAP.put(gnsscenterId, new AtomicInteger());
|
}
|
}
|
serialNumber = SERIAL_NUMBER_MAP.get(gnsscenterId).getAndIncrement();
|
if (serialNumber == Integer.MAX_VALUE) {
|
SERIAL_NUMBER_MAP.get(gnsscenterId).set(0);
|
}
|
} finally {
|
lock.unlock();
|
}
|
return serialNumber;
|
}
|
|
public void stop() {
|
|
}
|
|
}
|