Files
go-mc/net/conn.go
JunDao 0d436609ce init
2019-05-01 15:22:42 +08:00

58 lines
961 B
Go

package net
import (
"bufio"
"crypto/cipher"
"io"
"net"
pk "github.com/Tnze/go-mc/net/packet"
)
type Conn struct {
socket net.Conn
io.ByteReader
io.Writer
threshold int
}
func DialMC(addr string) (conn *Conn, err error) {
conn = new(Conn)
conn.socket, err = net.Dial("tcp", addr)
if err != nil {
return
}
conn.ByteReader = bufio.NewReader(conn.socket)
conn.Writer = conn.socket
return
}
func (c *Conn) ReadPacket() (pk.Packet, error) {
pk, err := pk.RecvPacket(c.ByteReader, c.threshold > 0)
return *pk, err
}
func (c *Conn) WritePacket(p pk.Packet) error {
_, err := c.Write(p.Pack(c.threshold))
return err
}
func (c *Conn) SetCipher(encoStream, decoStream cipher.Stream) {
//加密连接
c.ByteReader = bufio.NewReader(cipher.StreamReader{ //Set reciver for AES
S: decoStream,
R: c.socket,
})
c.Writer = cipher.StreamWriter{
S: encoStream,
W: c.socket,
}
}
func (c *Conn) SetThreshold(t int) {
c.threshold = t
}