Bläddra i källkod

refactor server worker

Darien Raymond 8 år sedan
förälder
incheckning
682235cacc
1 ändrade filer med 9 tillägg och 4 borttagningar
  1. 9 4
      app/proxyman/mux/mux.go

+ 9 - 4
app/proxyman/mux/mux.go

@@ -291,20 +291,25 @@ func (w *ServerWorker) remove(id uint16) {
 	w.access.Unlock()
 }
 
-func (w *ServerWorker) handle(ctx context.Context, s *session) {
-	writer := NewResponseWriter(s.id, w.outboundRay.OutboundOutput())
+func handle(ctx context.Context, s *session, output buf.Writer) {
+	writer := NewResponseWriter(s.id, output)
 	defer writer.Close()
 
 	for {
 		select {
 		case <-ctx.Done():
+			log.Debug("Proxyman|Mux|ServerWorker: Session ", s.id, " ends by context.")
 			return
 		default:
 			data, err := s.input.Read()
 			if err != nil {
+				log.Info("Proxyman|Mux|ServerWorker: Session ", s.id, " ends: ", err)
+				return
+			}
+			if err := writer.Write(data); err != nil {
+				log.Info("Proxyman|Mux|ServerWorker: Session ", s.id, " ends: ", err)
 				return
 			}
-			writer.Write(data)
 		}
 	}
 }
@@ -349,7 +354,7 @@ func (w *ServerWorker) run(ctx context.Context) {
 			w.access.Lock()
 			w.sessions[meta.SessionID] = s
 			w.access.Unlock()
-			go w.handle(ctx, s)
+			go handle(ctx, s, w.outboundRay.OutboundOutput())
 		}
 
 		if meta.Option.Has(OptionData) {