|
@@ -1,6 +1,12 @@
|
|
|
package core
|
|
|
|
|
|
-import "io"
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/binary"
|
|
|
+ "encoding/json"
|
|
|
+ "io"
|
|
|
+ "net"
|
|
|
+)
|
|
|
|
|
|
func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) {
|
|
|
buf := CopyBuff.Get()
|
|
@@ -28,3 +34,38 @@ func CopyBuffer(dst io.Writer, src io.Reader) (written int64, err error) {
|
|
|
}
|
|
|
return written, err
|
|
|
}
|
|
|
+
|
|
|
+func SendInfo(conn net.Conn, t interface{}) (int, error) {
|
|
|
+ /*
|
|
|
+ The task info is formed as follows:
|
|
|
+ +----+-----+---------+
|
|
|
+ |type| len | content |
|
|
|
+ +----+---------------+
|
|
|
+ | 4 | 4 | ... |
|
|
|
+ +----+---------------+
|
|
|
+ */
|
|
|
+ raw := bytes.NewBuffer([]byte{})
|
|
|
+ b, err := json.Marshal(t)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ lenBytes, err := GetLenBytes(b)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ binary.Write(raw, binary.LittleEndian, lenBytes)
|
|
|
+ return conn.Write(raw.Bytes())
|
|
|
+}
|
|
|
+
|
|
|
+// get the assembled amount data(len 4 and content)
|
|
|
+func GetLenBytes(buf []byte) (b []byte, err error) {
|
|
|
+ raw := bytes.NewBuffer([]byte{})
|
|
|
+ if err = binary.Write(raw, binary.LittleEndian, int32(len(buf))); err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if err = binary.Write(raw, binary.LittleEndian, buf); err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ b = raw.Bytes()
|
|
|
+ return
|
|
|
+}
|