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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starpc",
3
- "version": "0.8.4",
3
+ "version": "0.8.5",
4
4
  "description": "Streaming protobuf RPC service protocol over any two-way channel.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -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
- msgs, err := clientRPC.ReadAll()
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 len(msgs) == 0 {
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
- _, err = r.rw.Write(data)
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
 
@@ -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
  }