using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using DotNetty.Transport.Channels;
using JT808.DotNetty.Metadata;
using JT808.Protocol;
using JT808.Protocol.Enums;
using JT808.Protocol.Extensions;
using JT808.Protocol.MessageBody;
namespace JT808.DotNetty
{
///
/// 抽象消息处理业务
/// 自定义消息处理业务
/// ConfigureServices:
/// services.Replace(new ServiceDescriptor(typeof(JT808MsgIdHandlerBase),typeof(JT808MsgIdCustomHandlerImpl),ServiceLifetime.Singleton));
///
public abstract class JT808MsgIdHandlerBase
{
protected JT808SessionManager sessionManager { get; }
///
/// 初始化消息处理业务
///
protected JT808MsgIdHandlerBase(JT808SessionManager sessionManager)
{
this.sessionManager = sessionManager;
HandlerDict = new Dictionary>
{
{JT808MsgId.终端通用应答, Msg0x0001},
{JT808MsgId.终端鉴权, Msg0x0102},
{JT808MsgId.终端心跳, Msg0x0002},
{JT808MsgId.终端注销, Msg0x0003},
{JT808MsgId.终端注册, Msg0x0100},
{JT808MsgId.位置信息汇报,Msg0x0200 },
{JT808MsgId.定位数据批量上传,Msg0x0704 },
{JT808MsgId.数据上行透传,Msg0x0900 }
};
}
public Dictionary> HandlerDict { get; }
///
/// 终端通用应答
///
///
///
///
public virtual JT808Response Msg0x0001(JT808Request request)
{
return new JT808Response(JT808MsgId.平台通用应答.Create(request.Package.Header.TerminalPhoneNo, new JT808_0x8001()
{
MsgId = request.Package.Header.MsgId,
JT808PlatformResult = JT808PlatformResult.Success,
MsgNum = request.Package.Header.MsgNum
}));
}
///
/// 终端心跳
///
///
///
///
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.Success,
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.Success,
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.Success,
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.Success,
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.Success,
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.Success,
MsgNum = request.Package.Header.MsgNum
}));
}
}
}