Browse Source

update

tags/v0
zhaohe 1 year ago
parent
commit
13b646ec3f
  1. 4
      src/main/java/a8k/appbean/AppEvent.java
  2. 4
      src/main/java/a8k/appbean/AppEventBus.java
  3. 7
      src/main/java/a8k/appbean/AppEventListener.java
  4. 4
      src/main/java/a8k/appbean/AppException.java
  5. 21
      src/main/java/a8k/appbean/appevent/A8kHardwareReport.java
  6. 6
      src/main/java/a8k/appbean/appevent/AppEvent.java
  7. 36
      src/main/java/a8k/base_hardware/A8kCanBusService.java
  8. 56
      src/main/java/a8k/service/AppEventBusService.java

4
src/main/java/a8k/appbean/AppEvent.java

@ -1,4 +0,0 @@
package a8k.appbean;
public class AppEvent {
}

4
src/main/java/a8k/appbean/AppEventBus.java

@ -1,4 +0,0 @@
package a8k.appbean;
public class AppEventBus {
}

7
src/main/java/a8k/appbean/AppEventListener.java

@ -0,0 +1,7 @@
package a8k.appbean;
import a8k.appbean.appevent.AppEvent;
public interface AppEventListener {
public void onAppEvent(AppEvent event);
}

4
src/main/java/a8k/appbean/AppException.java

@ -1,4 +0,0 @@
package a8k.appbean;
public class AppException {
}

21
src/main/java/a8k/appbean/appevent/A8kHardwareReport.java

@ -0,0 +1,21 @@
package a8k.appbean.appevent;
import a8k.a8k_can_protocol.A8kPacket;
import org.springframework.lang.NonNull;
/**
* A8k底层硬件上报事件
*/
public class A8kHardwareReport extends AppEvent{
A8kPacket reportPacket;
public A8kHardwareReport(@NonNull A8kPacket packet) {}
A8kPacket getReportPacket(){
return reportPacket;
}
public String toString(){
return String.format("|Event A8kHardwareReport :%s|", reportPacket.toString());
}
}

6
src/main/java/a8k/appbean/appevent/AppEvent.java

@ -0,0 +1,6 @@
package a8k.appbean.appevent;
public class AppEvent {
}

36
src/main/java/a8k/base_hardware/A8kCanBusService.java

@ -4,13 +4,17 @@ import a8k.a8k_can_protocol.A8kPacket;
import a8k.a8k_can_protocol.CmdId;
import a8k.a8k_can_protocol.Errorcode;
import a8k.appbean.HardwareException;
import a8k.appbean.appevent.A8kHardwareReport;
import a8k.service.AppEventBusService;
import a8k.utils.ByteArray;
import ch.qos.logback.core.model.processor.AppenderModelHandler;
import jakarta.annotation.PostConstruct;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.net.URI;
@ -45,17 +49,25 @@ public class A8kCanBusService {
* }
*
*/
@Autowired
private AppEventBusService eventBusService;
public String uri; //assign by application.yml
private WebSocketClient client;
public BlockingQueue<A8kPacket> receiptQueue;
public BlockingQueue<A8kPacket> eventQueue;
boolean isWaitingReceipt = false;
int waitingReceiptIndex = 0;
int packetIndex;
boolean debugFlag = false;
//接收回执上下文
public BlockingQueue<A8kPacket> receiptQueue = new LinkedBlockingQueue<A8kPacket>(); //
boolean isWaitingReceipt = false; //
int waitingReceiptIndex = 0;//
//发送包的packetIndex
int packetIndex = 0;//
Timer autoConnectTimer = new Timer();
//调试标志位
boolean debugFlag = false;//
//websocket自动重连时间
Timer autoConnectTimer = new Timer();//
@PostConstruct
@ -68,9 +80,6 @@ public class A8kCanBusService {
//this.uri = "ws://127.0.0.1:19005";
this.uri = "ws://192.168.8.10:19005";
}
receiptQueue = new LinkedBlockingQueue<A8kPacket>();
eventQueue = new LinkedBlockingQueue<>();
URI uri = new URI(this.uri);
client = new WebSocketClient(uri) {
@ -128,6 +137,7 @@ public class A8kCanBusService {
return;
}
//TODO
public A8kPacket sendCmdAutoResend(A8kPacket pack, int overtime) throws HardwareException {
//调用sendCmd,
@ -204,7 +214,9 @@ public class A8kCanBusService {
}
if (packet.getPacketType() == A8kPacket.PACKET_TYPE_EVENT) {
eventQueue.add(packet);
if (eventBusService != null) {
eventBusService.pushEvent(new A8kHardwareReport(packet));
}
}
}
@ -228,7 +240,7 @@ public class A8kCanBusService {
}
}
});
thread.run();
thread.start();
}
}

56
src/main/java/a8k/service/AppEventBusService.java

@ -0,0 +1,56 @@
package a8k.service;
import a8k.appbean.AppEventListener;
import a8k.appbean.appevent.AppEvent;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@Component
public class AppEventBusService {
public static final Logger logger = LoggerFactory.getLogger(AppEventBusService.class);
Thread eventProcessorThread;
BlockingQueue<AppEvent> eventQueue;
List<AppEventListener> listeners;
@PostConstruct
public void init() {
eventQueue = new LinkedBlockingQueue<AppEvent>();
eventProcessorThread = new Thread(new Runnable() {
public void run() {
eventBusSchedule();
}
});
}
public void regListener(AppEventListener listener) {
listeners.add(listener);
}
public void pushEvent(AppEvent event) {
logger.info("pushEvent: {}", event);
eventQueue.add(event);
}
private void eventBusSchedule() {
while (!Thread.currentThread().isInterrupted()) {
try {
AppEvent event = eventQueue.take();
} catch (InterruptedException ignored) {
}
}
}
private void callOnEvent(AppEvent event) {
logger.info("Processing event: {}", event);
for (AppEventListener listener : listeners) {
listener.onAppEvent(event);
}
}
}
Loading…
Cancel
Save