@@ -5,10 +5,12 @@ import (
55 "net"
66 "encoding/binary"
77 "fmt"
8+ "os"
9+ "io"
810)
911
1012type Transceiver interface {
11- Transceive (request []bytes.Buffer ) ([]byte , error )
13+ Transceive (request []bytes.Buffer ) ([]io. Reader , error )
1214 RemoteName () string
1315 SetRemoteName (string )
1416}
@@ -33,7 +35,7 @@ func (t NettyTransceiver) SetRemoteName(name string) {
3335 t .remoteName = name
3436}
3537
36- func (t NettyTransceiver ) Transceive (requests []bytes.Buffer ) ([]byte , error ){
38+ func (t NettyTransceiver ) Transceive (requests []bytes.Buffer ) ([]io. Reader , error ){
3739 nettyFrame := new (bytes.Buffer )
3840 t .Pack (nettyFrame , requests )
3941
@@ -42,11 +44,14 @@ func (t NettyTransceiver) Transceive(requests []bytes.Buffer) ([]byte, error){
4244 if err != nil {
4345 return nil , fmt .Errorf ("Fail to write on socket %v" , err )
4446 }
45- //sfmt.Fprintf(os.Stdout, "BufferSize %v", nettyFrame)
47+
4648 // Read Response
4749 bodyBytes := make ([]byte , 1024 )
48- t .sock .Read (bodyBytes )
49- return bodyBytes , nil
50+ _ , err = t .sock .Read (bodyBytes )
51+ if err != nil {
52+ return nil , fmt .Errorf ("Fail to read on socket %v" , err )
53+ }
54+ return t .Unpack (bodyBytes )
5055}
5156
5257func (t * NettyTransceiver ) Pack (frame * bytes.Buffer , requests []bytes.Buffer ) {
@@ -67,4 +72,26 @@ func (t *NettyTransceiver) Pack(frame *bytes.Buffer, requests []bytes.Buffer) {
6772 frame .Write (requestSize )
6873 frame .Write (request .Bytes ())
6974 }
75+ }
76+
77+ func (t * NettyTransceiver ) Unpack (frame []byte ) ([]io.Reader , error ) {
78+
79+ nettyNumberFame := binary .BigEndian .Uint32 (frame [4 :8 ])
80+ result := make ([]io.Reader , nettyNumberFame )
81+ startFrame := uint32 (8 )
82+ i := uint32 (0 )
83+ for i < nettyNumberFame {
84+
85+
86+ messageSize := uint32 (binary .BigEndian .Uint32 (frame [startFrame :startFrame + 4 ]))
87+ fmt .Fprintf (os .Stdout , "\n nettyNumberFrame %v %v " , startFrame , frame [startFrame :startFrame + 4 ])
88+ message := frame [startFrame + 4 :startFrame + 4 + messageSize ]
89+ fmt .Fprintf (os .Stdout , "\n message: %v" , message )
90+ startFrame = startFrame + 4 + messageSize
91+ br := bytes .NewReader (message )
92+ result [i ] = br
93+ i ++
94+ }
95+
96+ return result , nil
7097}
0 commit comments