This commit is contained in:
injoyai
2024-10-16 16:14:33 +08:00
parent 68a04b7ed7
commit ad6225ac22
7 changed files with 233 additions and 35 deletions

View File

@@ -1,12 +1,31 @@
package protocol
import "errors"
import (
"errors"
bytes2 "github.com/injoyai/base/bytes"
)
var (
MConnect = connect{}
MSecurityQuote = securityQuote{}
SecurityList = securityList{}
)
type ConnectResp struct {
Info string
}
func DecodeConnect(bs []byte) (*ConnectResp, error) {
type connect struct{}
func (connect) Frame() *Frame {
return &Frame{
Control: Control,
Type: TypeConnect,
Data: []byte{0x01},
}
}
func (connect) Decode(bs []byte) (*ConnectResp, error) {
if len(bs) < 68 {
return nil, errors.New("数据长度不足")
}
@@ -14,6 +33,12 @@ func DecodeConnect(bs []byte) (*ConnectResp, error) {
return &ConnectResp{Info: string(UTF8ToGBK(bs[68:]))}, nil
}
/*
*/
type SecurityListResp struct {
Count uint16
List []*Security
@@ -27,7 +52,17 @@ type Security struct {
PreClose float64
}
func DecodeSecurityList(bs []byte) (*SecurityListResp, error) {
type securityList struct{}
func (securityList) Frame() *Frame {
return &Frame{
Control: 0x01,
Type: TypeConnect,
Data: nil,
}
}
func (securityList) Decode(bs []byte) (*SecurityListResp, error) {
if len(bs) < 2 {
return nil, errors.New("数据长度不足")
@@ -41,18 +76,75 @@ func DecodeSecurityList(bs []byte) (*SecurityListResp, error) {
}
func NewConnect() *Frame {
return &Frame{
Control: Control,
Type: Connect,
Data: []byte{0x01},
}
/*
*/
type SecurityQuotesResp []*SecurityQuote
type PriceLevel struct {
Price float64
Vol int
}
func NewSecurityQuotes(m map[Exchange]string) (*Frame, error) {
type SecurityQuote struct {
Market uint8 // 市场
Code string // 代码
Active1 uint16 // 活跃度
Price float64 // 现价
LastClose float64 // 昨收
Open float64 // 开盘
High float64 // 最高
Low float64 // 最低
ServerTime string // 时间
ReversedBytes0 int // 保留(时间 ServerTime)
ReversedBytes1 int // 保留
Vol int // 总量
CurVol int // 现量
Amount float64 // 总金额
SVol int // 内盘
BVol int // 外盘
ReversedBytes2 int // 保留
ReversedBytes3 int // 保留
BidLevels []PriceLevel
AskLevels []PriceLevel
Bid1 float64
Ask1 float64
BidVol1 int
AskVol1 int
Bid2 float64
Ask2 float64
BidVol2 int
AskVol2 int
Bid3 float64
Ask3 float64
BidVol3 int
AskVol3 int
Bid4 float64
Ask4 float64
BidVol4 int
AskVol4 int
Bid5 float64
Ask5 float64
BidVol5 int
AskVol5 int
ReversedBytes4 uint16 // 保留
ReversedBytes5 int // 保留
ReversedBytes6 int // 保留
ReversedBytes7 int // 保留
ReversedBytes8 int // 保留
Rate float64 // 涨速
Active2 uint16 // 活跃度
}
type securityQuote struct{}
func (this securityQuote) Frame(m map[Exchange]string) (*Frame, error) {
f := &Frame{
Control: Control,
Type: SecurityQuote,
Type: TypeSecurityQuote,
Data: []byte{0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
}
@@ -68,3 +160,28 @@ func NewSecurityQuotes(m map[Exchange]string) (*Frame, error) {
return f, nil
}
/*
Decode
b1cb74000c02000000003e05af00af000136020000303030303031320bb2124c56105987e6d10cf212b78fa801ae01293dc54e8bd740acb8670086ca1e0001af36ba0c4102b467b6054203a68a0184094304891992114405862685108d0100000000e8ff320b0136303030303859098005464502468defd10cc005bed2668e05be15804d8ba12cb3b13a0083c3034100badc029d014201bc990384f70443029da503b7af074403a6e501b9db044504a6e2028dd5048d050000000000005909
*/
func (this securityQuote) Decode(bs []byte) (*SecurityQuotesResp, error) {
//前2字节是什么?
bs = bs[2:]
number := Uint16(bs[:2])
bs = bs[2:]
for i := uint16(0); i < number; i++ {
sec := SecurityQuote{
Market: bs[0],
Code: string(UTF8ToGBK(bytes2.Reverse(bs[1:7]))),
Active1: Uint16(bs[7:9]),
}
_ = sec
}
return nil, nil
}