pupy/services/proxy/message.go

61 lines
976 B
Go
Raw Normal View History

2018-01-29 15:41:53 +00:00
package main
import (
"encoding/binary"
2019-10-03 16:37:11 +00:00
"time"
2018-01-29 15:41:53 +00:00
"io"
"net"
msgpack "github.com/vmihailenco/msgpack"
)
2019-10-03 16:37:11 +00:00
func SendError(conn net.Conn, err error) error {
return SendMessage(conn, ConnectionAcceptHeader{
Error: err.Error(),
})
}
func SendKeepAlive(conn net.Conn, tick time.Time) error {
return SendMessage(conn, KeepAlive{
Tick: tick.Unix(),
Last: false,
})
}
2018-01-29 15:41:53 +00:00
func SendMessage(conn net.Conn, msg interface{}) error {
data, err := msgpack.Marshal(msg)
if err != nil {
return err
}
var datalen int32 = int32(len(data))
err = binary.Write(conn, binary.BigEndian, datalen)
if err != nil {
return err
}
_, err = conn.Write(data)
return err
}
func RecvMessage(conn net.Conn, msg interface{}) error {
2018-01-30 13:44:55 +00:00
var datalen uint32
2018-01-29 15:41:53 +00:00
err := binary.Read(conn, binary.BigEndian, &datalen)
if err != nil {
return err
}
data := make([]byte, datalen)
_, err = io.ReadFull(conn, data)
if err != nil {
return err
}
return msgpack.Unmarshal(data, msg)
}