|
@@ -1,22 +1,22 @@
|
|
package network
|
|
package network
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
"encoding/binary"
|
|
"encoding/binary"
|
|
- "io"
|
|
|
|
)
|
|
)
|
|
|
|
|
|
type DataReader struct {
|
|
type DataReader struct {
|
|
- r io.Reader
|
|
+ buffer *bytes.Buffer
|
|
}
|
|
}
|
|
|
|
|
|
-func NewDataReader(r io.Reader) *DataReader {
|
|
+func NewDataReader(data []byte) *DataReader {
|
|
- return &DataReader{r: r}
|
|
+ return &DataReader{buffer: bytes.NewBuffer(data)}
|
|
}
|
|
}
|
|
|
|
|
|
func (reader *DataReader) Byte() (byte, error) {
|
|
func (reader *DataReader) Byte() (byte, error) {
|
|
var b byte
|
|
var b byte
|
|
|
|
|
|
- err := binary.Read(reader.r, binary.BigEndian, &b)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, &b)
|
|
if err != nil {
|
|
if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
@@ -26,7 +26,7 @@ func (reader *DataReader) Byte() (byte, error) {
|
|
|
|
|
|
func (reader *DataReader) Bytes(bytesLen int) ([]byte, error) {
|
|
func (reader *DataReader) Bytes(bytesLen int) ([]byte, error) {
|
|
bs := make([]byte, bytesLen)
|
|
bs := make([]byte, bytesLen)
|
|
- err := binary.Read(reader.r, binary.BigEndian, bs)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, bs)
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
@@ -37,7 +37,7 @@ func (reader *DataReader) Bytes(bytesLen int) ([]byte, error) {
|
|
func (reader *DataReader) Uint8() (uint8, error) {
|
|
func (reader *DataReader) Uint8() (uint8, error) {
|
|
var u uint8
|
|
var u uint8
|
|
|
|
|
|
- err := binary.Read(reader.r, binary.BigEndian, &u)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, &u)
|
|
if err != nil {
|
|
if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
@@ -48,7 +48,7 @@ func (reader *DataReader) Uint8() (uint8, error) {
|
|
func (reader *DataReader) Uint16() (uint16, error) {
|
|
func (reader *DataReader) Uint16() (uint16, error) {
|
|
var u uint16
|
|
var u uint16
|
|
|
|
|
|
- err := binary.Read(reader.r, binary.BigEndian, &u)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, &u)
|
|
if err != nil {
|
|
if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
@@ -59,7 +59,7 @@ func (reader *DataReader) Uint16() (uint16, error) {
|
|
func (reader *DataReader) Uint32() (uint32, error) {
|
|
func (reader *DataReader) Uint32() (uint32, error) {
|
|
var u uint32
|
|
var u uint32
|
|
|
|
|
|
- err := binary.Read(reader.r, binary.BigEndian, &u)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, &u)
|
|
if err != nil {
|
|
if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
@@ -70,7 +70,7 @@ func (reader *DataReader) Uint32() (uint32, error) {
|
|
func (reader *DataReader) Uint64() (uint64, error) {
|
|
func (reader *DataReader) Uint64() (uint64, error) {
|
|
var u uint64
|
|
var u uint64
|
|
|
|
|
|
- err := binary.Read(reader.r, binary.BigEndian, &u)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, &u)
|
|
if err != nil {
|
|
if err != nil {
|
|
return 0, err
|
|
return 0, err
|
|
}
|
|
}
|
|
@@ -80,10 +80,32 @@ func (reader *DataReader) Uint64() (uint64, error) {
|
|
|
|
|
|
func (reader *DataReader) String(bytesLen int) (string, error) {
|
|
func (reader *DataReader) String(bytesLen int) (string, error) {
|
|
retBytes := make([]byte, bytesLen)
|
|
retBytes := make([]byte, bytesLen)
|
|
- err := binary.Read(reader.r, binary.BigEndian, retBytes)
|
|
+ err := binary.Read(reader.buffer, binary.BigEndian, retBytes)
|
|
if err != nil {
|
|
if err != nil {
|
|
return "", err
|
|
return "", err
|
|
}
|
|
}
|
|
|
|
|
|
return string(retBytes), nil
|
|
return string(retBytes), nil
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func (reader *DataReader) Len() int {
|
|
|
|
+ return reader.buffer.Len()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (reader *DataReader) Cap() int {
|
|
|
|
+ return reader.buffer.Cap()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (reader *DataReader) GetBytes() []byte {
|
|
|
|
+ return reader.buffer.Bytes()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (reader *DataReader) ToWriter() (*DataWriter, error) {
|
|
|
|
+ writer := NewDataWriter()
|
|
|
|
+ err := writer.Bytes(writer.buffer.Bytes())
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return writer, nil
|
|
|
|
+}
|