starpc 0.8.4 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/srpc/client-rpc.go +19 -0
- package/srpc/client.go +2 -8
- package/srpc/packet-rw.go +9 -1
- package/srpc/server-rpc.go +0 -10
package/package.json
CHANGED
package/srpc/client-rpc.go
CHANGED
|
@@ -2,6 +2,7 @@ package srpc
|
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
|
+
"io"
|
|
5
6
|
|
|
6
7
|
"github.com/pkg/errors"
|
|
7
8
|
)
|
|
@@ -86,6 +87,24 @@ func (r *ClientRPC) ReadAll() ([][]byte, error) {
|
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
// ReadOne reads a single message and returns.
|
|
91
|
+
//
|
|
92
|
+
// returns io.EOF if the stream ended.
|
|
93
|
+
func (r *ClientRPC) ReadOne() ([]byte, error) {
|
|
94
|
+
select {
|
|
95
|
+
case <-r.ctx.Done():
|
|
96
|
+
return nil, context.Canceled
|
|
97
|
+
case data, ok := <-r.dataCh:
|
|
98
|
+
if !ok {
|
|
99
|
+
if err := r.serverErr; err != nil {
|
|
100
|
+
return nil, err
|
|
101
|
+
}
|
|
102
|
+
return nil, io.EOF
|
|
103
|
+
}
|
|
104
|
+
return data, nil
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
89
108
|
// Context is canceled when the ClientRPC is no longer valid.
|
|
90
109
|
func (r *ClientRPC) Context() context.Context {
|
|
91
110
|
return r.ctx
|
package/srpc/client.go
CHANGED
|
@@ -2,7 +2,6 @@ package srpc
|
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
|
-
"io"
|
|
6
5
|
|
|
7
6
|
"github.com/pkg/errors"
|
|
8
7
|
)
|
|
@@ -55,17 +54,12 @@ func (c *client) Invoke(rctx context.Context, service, method string, in, out Me
|
|
|
55
54
|
if err := clientRPC.Start(writer, true, firstMsg); err != nil {
|
|
56
55
|
return err
|
|
57
56
|
}
|
|
58
|
-
|
|
57
|
+
msg, err := clientRPC.ReadOne()
|
|
59
58
|
if err != nil {
|
|
60
59
|
// this includes any server returned error.
|
|
61
60
|
return err
|
|
62
61
|
}
|
|
63
|
-
if
|
|
64
|
-
// no reply? return eof.
|
|
65
|
-
return io.EOF
|
|
66
|
-
}
|
|
67
|
-
// parse first message to out
|
|
68
|
-
if err := out.UnmarshalVT(msgs[0]); err != nil {
|
|
62
|
+
if err := out.UnmarshalVT(msg); err != nil {
|
|
69
63
|
return errors.Wrap(ErrInvalidMessage, err.Error())
|
|
70
64
|
}
|
|
71
65
|
// done
|
package/srpc/packet-rw.go
CHANGED
|
@@ -35,7 +35,15 @@ func (r *PacketReaderWriter) WritePacket(p *Packet) error {
|
|
|
35
35
|
if err != nil {
|
|
36
36
|
return err
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
var n int
|
|
39
|
+
written := 0
|
|
40
|
+
for written < len(data) {
|
|
41
|
+
n, err = r.rw.Write(data)
|
|
42
|
+
if err != nil {
|
|
43
|
+
return err
|
|
44
|
+
}
|
|
45
|
+
written += n
|
|
46
|
+
}
|
|
39
47
|
return err
|
|
40
48
|
}
|
|
41
49
|
|
package/srpc/server-rpc.go
CHANGED
|
@@ -3,8 +3,6 @@ package srpc
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
5
|
"io"
|
|
6
|
-
"runtime"
|
|
7
|
-
"time"
|
|
8
6
|
|
|
9
7
|
"github.com/pkg/errors"
|
|
10
8
|
)
|
|
@@ -173,14 +171,6 @@ func (r *ServerRPC) invokeRPC() {
|
|
|
173
171
|
}
|
|
174
172
|
outPkt := NewCallDataPacket(nil, false, true, err)
|
|
175
173
|
_ = r.writer.WritePacket(outPkt)
|
|
176
|
-
|
|
177
|
-
// HACK: some multiplexers will drop the last packet if Close is called too
|
|
178
|
-
// soon after Write. Add a brief delay to ensure the packet is written.
|
|
179
|
-
//
|
|
180
|
-
// See: https://github.com/lucas-clemente/quic-go/issues/3472
|
|
181
|
-
runtime.Gosched()
|
|
182
|
-
time.Sleep(time.Millisecond)
|
|
183
|
-
|
|
184
174
|
_ = r.writer.Close()
|
|
185
175
|
r.ctxCancel()
|
|
186
176
|
}
|