mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-09-18 01:06:40 +08:00
40 lines
852 B
Go
40 lines
852 B
Go
package tcp
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
"github.com/gogf/gf/v2/net/gtcp"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
type RouterHandler func(args ...interface{})
|
|
|
|
// Message 路由消息
|
|
type Message struct {
|
|
Router string `json:"router"`
|
|
Data interface{} `json:"data"`
|
|
}
|
|
|
|
func SendPkg(conn *gtcp.Conn, message *Message) error {
|
|
b, err := json.Marshal(message)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return conn.SendPkg(b)
|
|
}
|
|
|
|
func RecvPkg(conn *gtcp.Conn) (*Message, error) {
|
|
if data, err := conn.RecvPkg(); err != nil {
|
|
return nil, err
|
|
} else {
|
|
var msg = new(Message)
|
|
if err = gconv.Scan(data, &msg); err != nil {
|
|
return nil, gerror.Newf("invalid package structure: %s", err.Error())
|
|
}
|
|
if msg.Router == "" {
|
|
return nil, gerror.Newf("message is not routed: %+v", msg)
|
|
}
|
|
return msg, err
|
|
}
|
|
}
|