using System;
using System.Collections.Generic;
using JT808.DotNetty.Core.Metadata;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.MessageBody;
namespace JT808.DotNetty.Core.Handlers
{
///
/// 基于Udp模式的抽象消息处理业务
/// 自定义消息处理业务
/// 注意:
/// 1.ConfigureServices:
/// services.Replace(new ServiceDescriptor(typeof(JT808MsgIdUdpHandlerBase),typeof(JT808MsgIdCustomUdpHandlerImpl),ServiceLifetime.Singleton));
/// 2.解析具体的消息体,具体消息调用具体的JT808Serializer.Deserialize
///
public abstract class JT808MsgIdUdpHandlerBase
{
protected JT808UdpSessionManager sessionManager { get; }
///
/// 初始化消息处理业务
///
protected JT808MsgIdUdpHandlerBase(JT808UdpSessionManager sessionManager)
{
this.sessionManager = sessionManager;
HandlerDict = new Dictionary>
{
{JT808MsgId.终端通用应答.ToUInt16Value(), Msg0x0001},
{JT808MsgId.终端鉴权.ToUInt16Value(), Msg0x0102},
{JT808MsgId.终端心跳.ToUInt16Value(), Msg0x0002},
{JT808MsgId.终端注销.ToUInt16Value(), Msg0x0003},
{JT808MsgId.终端注册.ToUInt16Value(), Msg0x0100},
{JT808MsgId.位置信息汇报.ToUInt16Value(),Msg0x0200 },
{JT808MsgId.定位数据批量上传.ToUInt16Value(),Msg0x0704 },
{JT808MsgId.数据上行透传.ToUInt16Value(),Msg0x0900 }
};
}
public Dictionary> HandlerDict { get; protected set; }
///
/// 终端通用应答
/// 平台无需回复
/// 实现自己的业务
///
///
///
public virtual JT808Response Msg0x0001(JT808Request request)
{
return null;
}
///
/// 终端心跳
///
///
///
public virtual JT808Response Msg0x0002(JT808Request request)
{
sessionManager.Heartbeat(request.Package.Header.TerminalPhoneNo);
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId = request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 终端注销
///
///
///
public virtual JT808Response Msg0x0003(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId = request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 终端注册
///
///
///
public virtual JT808Response Msg0x0100(JT808Request request)
{
return new JT808Response(JT808MsgId.终端注册应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8100()
{
Code = "J" + request.Package.Header.TerminalPhoneNo,
JT808TerminalRegisterResult = JT808TerminalRegisterResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 终端鉴权
///
///
///
public virtual JT808Response Msg0x0102(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId = request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 位置信息汇报
///
///
///
///
public virtual JT808Response Msg0x0200(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId = request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 定位数据批量上传
///
///
///
public virtual JT808Response Msg0x0704(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId =request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 数据上行透传
///
///
///
public virtual JT808Response Msg0x0900(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId =request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.成功,
MsgNum = request.Package.Header.MsgNum
}));
}
}
}