starpc 0.33.7 → 0.33.9

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/go.mod CHANGED
@@ -17,12 +17,12 @@ require (
17
17
  )
18
18
 
19
19
  require (
20
- github.com/libp2p/go-libp2p v0.35.4 // latest
20
+ github.com/libp2p/go-libp2p v0.36.1 // latest
21
21
  github.com/libp2p/go-yamux/v4 v4.0.2-0.20240322071716-53ef5820bd48 // master
22
22
  github.com/pkg/errors v0.9.1 // latest
23
23
  github.com/sirupsen/logrus v1.9.3 // latest
24
24
  google.golang.org/protobuf v1.34.2 // latest
25
- nhooyr.io/websocket v1.8.11 // latest
25
+ nhooyr.io/websocket v1.8.17 // latest
26
26
  )
27
27
 
28
28
  require (
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starpc",
3
- "version": "0.33.7",
3
+ "version": "0.33.9",
4
4
  "description": "Streaming protobuf RPC service protocol over any two-way channel.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -26,6 +26,10 @@ func NewClientRPC(ctx context.Context, service, method string) *ClientRPC {
26
26
  // Start sets the writer and writes the MsgSend message.
27
27
  // must only be called once!
28
28
  func (r *ClientRPC) Start(writer PacketWriter, writeFirstMsg bool, firstMsg []byte) error {
29
+ if writer == nil {
30
+ return ErrNilWriter
31
+ }
32
+
29
33
  if err := r.ctx.Err(); err != nil {
30
34
  r.ctxCancel()
31
35
  _ = writer.Close()
@@ -104,11 +108,11 @@ func (r *ClientRPC) HandleCallStart(pkt *CallStart) error {
104
108
 
105
109
  // Close releases any resources held by the ClientRPC.
106
110
  func (r *ClientRPC) Close() {
107
- if r.writer != nil {
108
- _ = r.WriteCallCancel()
109
- }
110
-
111
111
  r.bcast.HoldLock(func(broadcast func(), getWaitCh func() <-chan struct{}) {
112
- r.closeLocked(broadcast)
112
+ // call did not start yet if writer is nil.
113
+ if r.writer != nil {
114
+ _ = r.WriteCallCancel()
115
+ r.closeLocked(broadcast)
116
+ }
113
117
  })
114
118
  }
package/srpc/client.go CHANGED
@@ -51,6 +51,7 @@ func (c *client) ExecCall(ctx context.Context, service, method string, in, out M
51
51
  if err != nil {
52
52
  return err
53
53
  }
54
+
54
55
  if err := clientRPC.Start(writer, true, firstMsg); err != nil {
55
56
  return err
56
57
  }
@@ -63,6 +64,7 @@ func (c *client) ExecCall(ctx context.Context, service, method string, in, out M
63
64
  if err := out.UnmarshalVT(msg); err != nil {
64
65
  return errors.Wrap(ErrInvalidMessage, err.Error())
65
66
  }
67
+
66
68
  return nil
67
69
  }
68
70
 
@@ -83,11 +85,15 @@ func (c *client) NewStream(ctx context.Context, service, method string, firstMsg
83
85
  if err != nil {
84
86
  return nil, err
85
87
  }
88
+
86
89
  if err := clientRPC.Start(writer, firstMsg != nil, firstMsgData); err != nil {
87
90
  return nil, err
88
91
  }
89
92
 
90
- return NewMsgStream(ctx, clientRPC, clientRPC.ctxCancel), nil
93
+ return NewMsgStream(ctx, clientRPC, func() {
94
+ clientRPC.ctxCancel()
95
+ _ = writer.Close()
96
+ }), nil
91
97
  }
92
98
 
93
99
  // _ is a type assertion
@@ -116,9 +116,6 @@ func (c *commonRPC) ReadOne() ([]byte, error) {
116
116
 
117
117
  // WriteCallData writes a call data packet.
118
118
  func (c *commonRPC) WriteCallData(data []byte, complete bool, err error) error {
119
- if c.writer == nil {
120
- return ErrCompleted
121
- }
122
119
  outPkt := NewCallDataPacket(data, len(data) == 0, false, nil)
123
120
  return c.writer.WritePacket(outPkt)
124
121
  }
@@ -131,9 +128,7 @@ func (c *commonRPC) HandleStreamClose(closeErr error) {
131
128
  }
132
129
  c.dataClosed = true
133
130
  c.ctxCancel()
134
- if c.writer != nil {
135
- _ = c.writer.Close()
136
- }
131
+ _ = c.writer.Close()
137
132
  broadcast()
138
133
  })
139
134
  }
@@ -175,10 +170,7 @@ func (c *commonRPC) HandleCallData(pkt *CallData) error {
175
170
 
176
171
  // WriteCallCancel writes a call cancel packet.
177
172
  func (c *commonRPC) WriteCallCancel() error {
178
- if c.writer != nil {
179
- return c.writer.WritePacket(NewCallCancelPacket())
180
- }
181
- return nil
173
+ return c.writer.WritePacket(NewCallCancelPacket())
182
174
  }
183
175
 
184
176
  // closeLocked releases resources held by the RPC.
@@ -187,9 +179,7 @@ func (c *commonRPC) closeLocked(broadcast func()) {
187
179
  if c.remoteErr == nil {
188
180
  c.remoteErr = context.Canceled
189
181
  }
190
- if c.writer != nil {
191
- _ = c.writer.Close()
192
- }
182
+ _ = c.writer.Close()
193
183
  broadcast()
194
184
  c.ctxCancel()
195
185
  }
package/srpc/errors.go CHANGED
@@ -19,4 +19,6 @@ var (
19
19
  ErrEmptyServiceID = errors.New("service id empty")
20
20
  // ErrNoAvailableClients is returned if no clients were available.
21
21
  ErrNoAvailableClients = errors.New("no available rpc clients")
22
+ // ErrNilWriter is returned if the rpc writer is nil.
23
+ ErrNilWriter = errors.New("writer cannot be nil")
22
24
  )
@@ -88,6 +88,7 @@ func (r *ServerRPC) HandleCallStart(pkt *CallStart) error {
88
88
 
89
89
  // invokeRPC invokes the RPC after CallStart is received.
90
90
  func (r *ServerRPC) invokeRPC(serviceID, methodID string) {
91
+ // on the server side, the writer is closed by invokeRPC.
91
92
  strm := NewMsgStream(r.ctx, r, r.ctxCancel)
92
93
  ok, err := r.invoker.InvokeMethod(serviceID, methodID, strm)
93
94
  if err == nil && !ok {