Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何对同一个指令,同一个协议版本,用多个@Jt808RequestHandlerMapping注解的方法处理 #83

Open
Prune-ww opened this issue Jun 11, 2024 · 4 comments

Comments

@Prune-ww
Copy link

比如0x0200指令,针对苏标和粤标采用不同的方法去处理,可以做到解析2013苏标、2019苏标、2013粤标和2019粤标

@Prune-ww
Copy link
Author

@Jt808RequestHandlerMapping(msgType = 0x0200, versions = AUTO_DETECTION, desc = "位置信息上报(苏标)")
public BuiltinMsg8001 t0200SU(Jt808RequestEntity req) {

}

@Jt808RequestHandlerMapping(msgType = 0x0200, versions = AUTO_DETECTION, desc = "位置信息上报(粤标)")
public BuiltinMsg8001 t0200YUE(Jt808RequestEntity req) {

}

@hylexus
Copy link
Owner

hylexus commented Jun 12, 2024

这个应该做不到。
无论是苏标还是粤标,请求头中的信息都是一样的,无法通过请求头区分出到底是苏标还是粤标。

据我所知,好像只能在解析消息体之后,通过消息附加项判断。比如苏标消息附加项中可能会出现(也可能不出现) 附加项 ID0x640x650x66 、... 的扩展附加项。

可以参考示例项目中的写法: LocationMsgService.java#L57

@Prune-ww
Copy link
Author

或许可以用自定义的生命周期监听器来实现?
@OverRide
public boolean beforeDispatch(Jt808Request request) {
return Jt808RequestLifecycleListener.super.beforeDispatch(request);
}
例如根据消息头中的消息ID和终端手机号来判断接下来分发到哪个被@Jt808RequestHandlerMapping注解的方法处理。我对消息分发器不是很了解,请教一下作者这么做是否可以?

@hylexus
Copy link
Owner

hylexus commented Jun 13, 2024

目前 @Jt808RequestHandlerMapping 就是通过消息头中的 消息ID 来分发的。

但是,仅仅通过消息头的 消息ID 和手机号是没法区分到底是苏标还是其他扩展的。比如对于你提到的 0x0200 位置上报消息来说,消息头中的 消息ID 都是 0x0200 (不论是苏标还是其他扩展)。一般而言,手机号并不能用来判断是苏标还是其他扩展。

如果你想干预消息处理器的分发逻辑 或 你想自定义消息处理器(比如实现自己的消息处理器注解) 的话,可以参考下面几个组件:

  • Jt808DispatcherHandler
  • Jt808HandlerMapping
  • Jt808HandlerAdapter
  • Jt808HandlerResultHandler
    这几个组件都是从 spring 中借鉴(抄袭😂)过来的,扩展思路和 spring 一致。

前提是: 在仅仅知道 消息ID 和 手机号 的情况下 ,怎么知道到底是哪种扩展?我认为这是不太可行的。如果你的业务场景中能通过手机号判断出到底是苏标还是其他扩展的话,可以参考一下 Jt808DispatcherHandler 的消息处理逻辑,然后自定义消息处理器隐射逻辑。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants