代码拉取完成,页面将自动刷新
同步操作将从 coco/go808 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package protocol
import (
"bytes"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
"io/ioutil"
)
// 设置电话本
type T808_0x8401 struct {
// 设置类型
Type T808_0x8401_Type
// 联系人项
Contacts []T808_0x8401_Contact
}
// 设置类型
type T808_0x8401_Type byte
var (
// 删除所有
T808_0x8401_TypeRemoveAll T808_0x8401_Type = 0
// 更新
T808_0x8401_TypeUpdate T808_0x8401_Type = 1
// 追加
T808_0x8401_TypeAppend T808_0x8401_Type = 2
// 修改
T808_0x8401_TypeModify T808_0x8401_Type = 3
)
// 电话本联系人
type T808_0x8401_Contact struct {
// 标志
Flag T808_0x8401_ContactFlag
// 电话号码
Number string
// 联系人
Contact string
}
// 联系人标志
type T808_0x8401_ContactFlag byte
var (
// 呼入
T808_0x8401_ContactFlagIncomingCall T808_0x8401_ContactFlag = 1
// 呼出
T808_0x8401_ContactFlagOutgoingCall T808_0x8401_ContactFlag = 2
// 呼入和呼出
T808_0x8401_ContactFlagBoth T808_0x8401_ContactFlag = 3
)
func (entity *T808_0x8401) MsgID() MsgID {
return MsgT808_0x8401
}
func (entity *T808_0x8401) Encode() ([]byte, error) {
writer := NewWriter()
// 写入设置类型
writer.WriteByte(byte(entity.Type))
// 写入联系人总数
writer.WriteByte(byte(len(entity.Contacts)))
// 写入联系人列表
for _, contact := range entity.Contacts {
// 写入标志
writer.WriteByte(byte(contact.Flag))
// 写入号码长度
reader := bytes.NewReader([]byte(contact.Number))
number, err := ioutil.ReadAll(
transform.NewReader(reader, simplifiedchinese.GB18030.NewEncoder()))
if err != nil {
return nil, err
}
writer.WriteByte(byte(len(number)))
// 写入电话号码
writer.Write(number)
// 写入联系人长度
reader = bytes.NewReader([]byte(contact.Contact))
contact, err := ioutil.ReadAll(
transform.NewReader(reader, simplifiedchinese.GB18030.NewEncoder()))
if err != nil {
return nil, err
}
writer.WriteByte(byte(len(contact)))
// 写入联系人
writer.Write(contact)
}
return writer.Bytes(), nil
}
func (entity *T808_0x8401) Decode(data []byte) (int, error) {
if len(data) < 1 {
return 0, ErrInvalidBody
}
reader := NewReader(data)
// 读取设置类型
typ, err := reader.ReadByte()
if err != nil {
return 0, err
}
entity.Type = T808_0x8401_Type(typ)
// 读取联系人总数
count, err := reader.ReadByte()
if err != nil {
return 0, err
}
// 读取联系人列表
for i := 0; i < int(count); i++ {
var contact T808_0x8401_Contact
// 读取标志
flag, err := reader.ReadByte()
if err != nil {
return 0, err
}
contact.Flag = T808_0x8401_ContactFlag(flag)
// 读取号码长度
size, err := reader.ReadByte()
if err != nil {
return 0, err
}
// 读取电话号码
contact.Number, err = reader.ReadString(int(size))
if err != nil {
return 0, err
}
// 读取联系人长度
size, err = reader.ReadByte()
if err != nil {
return 0, err
}
// 读取联系人
contact.Contact, err = reader.ReadString(int(size))
if err != nil {
return 0, err
}
entity.Contacts = append(entity.Contacts, contact)
}
return len(data) - reader.Len(), nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。