This action will force synchronization from matrixy/jtt808-simulator, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
本项目为 JT/T808部标协议 终端模拟程序,通过模拟正常车辆的行驶轨迹、停留、报警触发等,可达到部标服务器的压力测试,以及业务数据处理(区域驶入驶出、超速、超时行驶等)的要求。后续还会继续加入 JT/T 1078 实时音视频等功能特性。最终目标是让模拟器更加可控,更加逼真。
注意:本项目正处于开发中,尚有很多不完善的地方,请谨慎使用。 另外,本项目直接使用百度地图所产生的坐标做行驶轨迹的模拟,所以在平台端再显示到地图上时,需要注意坐标系问题。
注意:目前使用的是JT/T808 2013版的协议,并且是按照5秒的时间间隔发送位置消息。
创建一条行驶线路,用于车辆模拟运行时的位置上报的轨迹点模拟,模拟车辆在行驶时,将会随机化轨迹点,确保每一次行驶时的轨迹点都不一样。创建线路时,可以设置行驶的最高、最低行驶速度,以及停留点,报警事件(尚未实现)等。
通过已经创建好的线路,创建临时的行驶行程任务,目前要填写的项多达五项(车牌号、终端ID、SIM卡号、服务器IP与端口),后面会简化并提供批量创建的功能用于压力测试。
待补充
待补充
通过继承AbstractDriveTask
实现的SimpleDriveTask
,是一个简易的终端模拟控制程序,项目使用 EventLoop 思路实现多线程多任务的处理流程管理,主要分为以下两大类: 事件回调 与 定时/延时任务 。
定义于 EventEnum
类中,主要是TCP连接状态和服务器端消息,细分如下:
上面的事件分类,只实现了三个,但是已经满足了绝大部分场合的需求,其它未实现的,有没有用都还不确定 ,有可能会在后续的实现过程中删除掉。
事件可能由多种条件触发,最终统一交由 EventDispatcher 进行调度,并由 LoopRunner 进行执行。特别需要注意的是,服务器端发送过来的消息,有特别的路由机制,因为主动下发的消息指令很多,不可能一一定义,所以我定义了以下的注解,用于对事件的进一步细节,如普通事件 connected 的监听如下代码:
@Listen(when = EventEnum.connected)
public void onConnected()
{
// to do something when connected to server
}
但是像 message_received 事件,如果由开发者另行路由,就有点太臃肿了,所以我为 @Listen
注解增加了 attachment 参数,用于进一步细分,如监听 0x8801 摄像头立即拍摄命令,可按以下方式实现:
@Listen(when = EventEnum.message_received, attachment = "8801")
public void onCameraCaptureCommand(JTT808Message msg)
{
// 完成抓拍并发送到服务器端的过程
// 注意,上面的方法名称没有要求,随便命名即可,attachment的值要是消息ID。
}
因为在分派 LoopRunner 时,是按照 AbstractDriveTask 的 hashcode 进行分配线程,所以每一个 AbstractDriveTask 的方法,除了 init() 和 startup 方法外,都是在同一个线程之中(包括定时/延时任务),大可不必担心线程安全问题。
目前提供了定时/延时任务的API,定时/延时任务的执行,也是由 LoopRunner 线程运行,它与上一章节的事件执行处于同一个线程之中,不需要关心线程安全问题,方法原型定义如下:
// 延时任务
/**
* 在milliseconds毫秒后执行Exectable
* @param executable 需要执行的任务
* @param milliseconds 等待的毫秒
*/
public final void executeAfter(Executable executable, int milliseconds);
// 定时重复执行的任务
/**
* 按照interval毫秒的间隔执行Exectable
* @param executable 需要执行的任务
* @param interval 间隔时间,单位毫秒
*/
public final void executeConstantly(Executable executable, int interval);
群号:808432702,欢迎入群,与一帮子做部标协议开发的小伙伴一起交流。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。