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 +2 -2
- package/package.json +1 -1
- package/srpc/client-rpc.go +9 -5
- package/srpc/client.go +7 -1
- package/srpc/common-rpc.go +3 -13
- package/srpc/errors.go +2 -0
- package/srpc/server-rpc.go +1 -0
package/go.mod
CHANGED
|
@@ -17,12 +17,12 @@ require (
|
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
require (
|
|
20
|
-
github.com/libp2p/go-libp2p v0.
|
|
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.
|
|
25
|
+
nhooyr.io/websocket v1.8.17 // latest
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
require (
|
package/package.json
CHANGED
package/srpc/client-rpc.go
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
93
|
+
return NewMsgStream(ctx, clientRPC, func() {
|
|
94
|
+
clientRPC.ctxCancel()
|
|
95
|
+
_ = writer.Close()
|
|
96
|
+
}), nil
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
// _ is a type assertion
|
package/srpc/common-rpc.go
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
)
|
package/srpc/server-rpc.go
CHANGED
|
@@ -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 {
|