@@ -44,15 +44,14 @@ func (s *Server) Dispatch(ctx context.Context, dest net.Destination) (*vio.Link,
44
44
uplinkReader , uplinkWriter := pipe .New (opts ... )
45
45
downlinkReader , downlinkWriter := pipe .New (opts ... )
46
46
47
- worker := & ServerWorker {
48
- dispatcher : s .dispatcher ,
49
- link : & vio.Link {
50
- Reader : uplinkReader ,
51
- Writer : downlinkWriter ,
52
- },
53
- sessionManager : NewSessionManager (),
47
+ _ , err := NewServerWorker (ctx , s .dispatcher , & vio.Link {
48
+ Reader : uplinkReader ,
49
+ Writer : downlinkWriter ,
50
+ })
51
+ if err != nil {
52
+ return nil , err
54
53
}
55
- go worker . run ( ctx )
54
+
56
55
return & vio.Link {Reader : downlinkReader , Writer : uplinkWriter }, nil
57
56
}
58
57
@@ -72,6 +71,16 @@ type ServerWorker struct {
72
71
sessionManager * SessionManager
73
72
}
74
73
74
+ func NewServerWorker (ctx context.Context , d routing.Dispatcher , link * vio.Link ) (* ServerWorker , error ) {
75
+ worker := & ServerWorker {
76
+ dispatcher : d ,
77
+ link : link ,
78
+ sessionManager : NewSessionManager (),
79
+ }
80
+ go worker .run (ctx )
81
+ return worker , nil
82
+ }
83
+
75
84
func handle (ctx context.Context , s * Session , output buf.Writer ) {
76
85
writer := NewResponseWriter (s .ID , output , s .transferType )
77
86
if err := buf .Copy (s .input , writer ); err != nil {
@@ -142,7 +151,7 @@ func (w *ServerWorker) handleStatusKeep(meta *FrameMetadata, reader *buf.Buffere
142
151
143
152
s , found := w .sessionManager .Get (meta .SessionID )
144
153
if ! found {
145
- buf .Copy (NewStreamReader (reader ), buf .Discard )
154
+ return buf .Copy (NewStreamReader (reader ), buf .Discard )
146
155
}
147
156
148
157
rr := s .NewReader (reader )
0 commit comments