croc/src/message/message.go

60 lines
1.1 KiB
Go
Raw Normal View History

2019-04-30 02:03:19 +02:00
package message
import (
"encoding/json"
"github.com/schollz/croc/v6/src/compress"
"github.com/schollz/croc/v6/src/crypt"
2019-04-30 04:19:48 +02:00
"github.com/schollz/croc/v6/src/comm"
2019-04-30 02:03:19 +02:00
)
2019-04-30 04:19:48 +02:00
// Message is the possible payload for messaging
2019-04-30 02:03:19 +02:00
type Message struct {
Type string `json:"t,omitempty"`
Message string `json:"m,omitempty"`
Bytes []byte `json:"b,omitempty"`
Num int `json:"n,omitempty"`
}
2019-04-30 04:19:48 +02:00
func (m Message) String() string {
b, _ := json.Marshal(m)
return string(b)
}
// Send will send out
func Send(c *comm.Comm, m Message) (err error) {
mSend, err := Encode(m)
if err != nil {
return
}
_, err = c.Write(mSend)
return
}
// Encode will convert to bytes
2019-04-30 02:03:19 +02:00
func Encode(m Message, e ...crypt.Encryption) (b []byte, err error) {
b, err = json.Marshal(m)
if err != nil {
return
}
b = compress.Compress(b)
if len(e) > 0 {
b, err = e[0].Encrypt(b)
}
return
}
2019-04-30 04:19:48 +02:00
// Decode will convert from bytes
2019-04-30 02:03:19 +02:00
func Decode(b []byte, e ...crypt.Encryption) (m Message, err error) {
if len(e) > 0 {
b, err = e[0].Decrypt(b)
if err != nil {
return
}
}
b = compress.Decompress(b)
err = json.Unmarshal(b, &m)
return
}