start of proto
This commit is contained in:
commit
87977ab798
13
main.go
Normal file
13
main.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/statsharev2/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
client := proto.Init("1234567894321", 234)
|
||||||
|
raw := client.Connect()
|
||||||
|
fmt.Println(raw)
|
||||||
|
}
|
55
proto/statshare.go
Normal file
55
proto/statshare.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package proto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/binary"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Init(mpan string, clientID clientID) *Session {
|
||||||
|
n, err := strconv.ParseUint(mpan, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("error with provided mpan")
|
||||||
|
}
|
||||||
|
|
||||||
|
session := new(Session)
|
||||||
|
session.Header.Version = VERSION
|
||||||
|
session.Header.ClientID = clientID
|
||||||
|
session.Mpan = n
|
||||||
|
|
||||||
|
return session
|
||||||
|
}
|
||||||
|
|
||||||
|
/* connecting to server */
|
||||||
|
func (s *Session) Connect() []byte {
|
||||||
|
if s.State != NOT_CONNECTED {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Header.Flag = AUTH_REQUEST
|
||||||
|
s.Header.DataLen = 64
|
||||||
|
|
||||||
|
Request := Request{
|
||||||
|
Akey_0: s.Mpan,
|
||||||
|
}
|
||||||
|
|
||||||
|
buff := make([]byte, 0, 16)
|
||||||
|
buffer := bytes.NewBuffer(buff)
|
||||||
|
if err := binary.Write(buffer, binary.BigEndian, s.Header); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(buffer, binary.BigEndian, Request); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.State = SENT_AUTH
|
||||||
|
return buffer.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Session) SendData() {
|
||||||
|
if s.State != CONNECTED {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
128
proto/types.go
Normal file
128
proto/types.go
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
package proto
|
||||||
|
|
||||||
|
type (
|
||||||
|
clientID uint16
|
||||||
|
flag uint8
|
||||||
|
state uint8
|
||||||
|
version uint8
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
0 - AUTH REQUEST
|
||||||
|
1 - AUTH RESPONSE
|
||||||
|
2 - CLIENT DATA
|
||||||
|
254 - ACK
|
||||||
|
255 - NAK
|
||||||
|
*/
|
||||||
|
const (
|
||||||
|
AUTH_REQUEST flag = iota
|
||||||
|
AUTH_RESPONSE
|
||||||
|
CLIENT_DATA
|
||||||
|
ACK flag = 254
|
||||||
|
NAK flag = 255
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
NOT_CONNECTED state = iota
|
||||||
|
SENT_AUTH
|
||||||
|
AUTH_TOT
|
||||||
|
AUTHENTICATED
|
||||||
|
CONNECTED
|
||||||
|
SENT_DATA
|
||||||
|
RECEIVED_ACK
|
||||||
|
RECEIVED_NAK
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
VERSION version = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================================================
|
||||||
|
| VERSION 1 byte | FLAG 1 byte | CLIENT ID 2 byte |
|
||||||
|
===================================================
|
||||||
|
| LEN OF DATA 4 bytes |
|
||||||
|
===================================================
|
||||||
|
*/
|
||||||
|
type Header struct {
|
||||||
|
Version version
|
||||||
|
Flag flag
|
||||||
|
ClientID clientID
|
||||||
|
DataLen uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
AUTH DATA (REQUEST)
|
||||||
|
===================================================
|
||||||
|
| AUTH KEY 0 4 bytes |
|
||||||
|
===================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
type Request struct {
|
||||||
|
Akey_0 uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
AUTH DATA (RESPONSE)
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 0 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 1 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 2 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 3 4 bytes |
|
||||||
|
===================================================
|
||||||
|
*/
|
||||||
|
type Response struct {
|
||||||
|
CKey_0 uint32
|
||||||
|
Ckey_1 uint32
|
||||||
|
Ckey_2 uint32
|
||||||
|
Ckey_3 uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
CLIENT DATA
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 0 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 1 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 2 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| CLIENT KEY 3 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| NOW 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| DAY 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| EXPORT 4 bytes |
|
||||||
|
===================================================
|
||||||
|
===================================================
|
||||||
|
| GAS 4 bytes |
|
||||||
|
===================================================
|
||||||
|
*/
|
||||||
|
type Energy struct {
|
||||||
|
CKey Response
|
||||||
|
Now float32
|
||||||
|
Day float32
|
||||||
|
Export float32
|
||||||
|
Gas float32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Session struct {
|
||||||
|
CKey_p1 uint64
|
||||||
|
Ckey_p2 uint64
|
||||||
|
Header Header
|
||||||
|
Mpan uint64
|
||||||
|
State state
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user