126 lines
3.5 KiB
Go
126 lines
3.5 KiB
Go
package manscdp
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"git.skcks.cn/Shikong/go-gb28181/pkg/manscdp/cmdtype"
|
|
"github.com/duke-git/lancet/v2/datastructure/optional"
|
|
"strconv"
|
|
)
|
|
|
|
// CatalogReq 定义了查询目录的请求结构
|
|
type CatalogReq struct {
|
|
XMLName xml.Name `xml:"Query"`
|
|
CmdType string `xml:"CmdType"`
|
|
SN string `xml:"SN"`
|
|
DeviceID string `xml:"DeviceID"`
|
|
}
|
|
|
|
func NewCatalogReq(cmdType, sn, deviceID string) *CatalogReq {
|
|
return &CatalogReq{
|
|
XMLName: xml.Name{Local: "Query"},
|
|
CmdType: cmdtype.Catalog,
|
|
SN: sn,
|
|
DeviceID: deviceID,
|
|
}
|
|
}
|
|
|
|
// CatalogResp 定义了查询目录的响应结构
|
|
type CatalogResp struct {
|
|
XMLName xml.Name `xml:"Response"`
|
|
CmdType string `xml:"CmdType"`
|
|
SumNum string `xml:"SumNum"`
|
|
DeviceList *CateLogDeviceList `xml:"DeviceList"`
|
|
SN string `xml:"SN"`
|
|
DeviceID string `xml:"DeviceID"`
|
|
}
|
|
|
|
// NewCatalogResp 创建一个新的 CatalogResp 实例
|
|
func NewCatalogResp(sumNum int, deviceList *CateLogDeviceList, sn, deviceID string) *CatalogResp {
|
|
return &CatalogResp{
|
|
XMLName: xml.Name{Local: "Response"},
|
|
CmdType: cmdtype.Catalog,
|
|
SumNum: strconv.Itoa(sumNum),
|
|
DeviceList: deviceList,
|
|
SN: sn,
|
|
DeviceID: deviceID,
|
|
}
|
|
}
|
|
|
|
// CateLogDeviceList 定义了设备列表的结构
|
|
type CateLogDeviceList struct {
|
|
XMLName xml.Name `xml:"DeviceList"`
|
|
Num string `xml:"Num,attr"`
|
|
Item []CateLogDevice `xml:"Item"`
|
|
}
|
|
|
|
// NewCateLogDeviceList 创建一个新的 CateLogDeviceList 实例
|
|
func NewCateLogDeviceList(items []CateLogDevice) *CateLogDeviceList {
|
|
return &CateLogDeviceList{
|
|
XMLName: xml.Name{Local: "DeviceList"},
|
|
Num: strconv.Itoa(len(optional.Of(items).OrElse([]CateLogDevice{}))),
|
|
Item: items,
|
|
}
|
|
}
|
|
|
|
// CateLogDevice 定义了单个设备的详细信息结构
|
|
type CateLogDevice struct {
|
|
XMLName xml.Name `xml:"Item"`
|
|
Name string `xml:"Name"`
|
|
Manufacturer string `xml:"Manufacturer"`
|
|
Model string `xml:"Model"`
|
|
Owner string `xml:"Owner"`
|
|
Block string `xml:"Block"`
|
|
Address string `xml:"Address"`
|
|
Parental string `xml:"Parental"`
|
|
SafetyWay string `xml:"SafetyWay"`
|
|
RegisterWay string `xml:"RegisterWay"`
|
|
CertNum string `xml:"CertNum"`
|
|
Certifiable string `xml:"Certifiable"`
|
|
ErrCode string `xml:"ErrCode"`
|
|
EndTime string `xml:"EndTime"`
|
|
Secrecy string `xml:"Secrecy"`
|
|
Port string `xml:"Port"`
|
|
Password string `xml:"Password"`
|
|
Status string `xml:"Status"`
|
|
Longitude string `xml:"Longitude"`
|
|
Latitude string `xml:"Latitude"`
|
|
DeviceID string `xml:"DeviceID"`
|
|
CivilCode string `xml:"CivilCode"`
|
|
ParentID string `xml:"ParentID"`
|
|
IPAddress string `xml:"IPAddress"`
|
|
}
|
|
|
|
// NewCateLogDevice 创建一个新的 CateLogDevice 实例,并允许通过传入的函数修改初始值
|
|
func NewCateLogDevice(modifier func(*CateLogDevice)) *CateLogDevice {
|
|
device := &CateLogDevice{
|
|
XMLName: xml.Name{Local: "Item"},
|
|
Name: "",
|
|
Manufacturer: "",
|
|
Model: "",
|
|
Owner: "",
|
|
Block: "",
|
|
Address: "",
|
|
Parental: "",
|
|
SafetyWay: "",
|
|
RegisterWay: "",
|
|
CertNum: "",
|
|
Certifiable: "",
|
|
ErrCode: "",
|
|
EndTime: "",
|
|
Secrecy: "",
|
|
Port: "",
|
|
Password: "",
|
|
Status: "",
|
|
Longitude: "",
|
|
Latitude: "",
|
|
DeviceID: "",
|
|
CivilCode: "",
|
|
ParentID: "",
|
|
IPAddress: "",
|
|
}
|
|
if modifier != nil {
|
|
modifier(device)
|
|
}
|
|
return device
|
|
}
|