ing
This commit is contained in:
		
							parent
							
								
									e12a800dd3
								
							
						
					
					
						commit
						29455b69ca
					
				@ -188,6 +188,10 @@ func (s *Server) handleConnection(servlet Servlet, servletCtx server.ServletCtx,
 | 
				
			|||||||
	defer s.connections.Delete(conn)
 | 
						defer s.connections.Delete(conn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	servlet.OnConnect(servletCtx, conn)
 | 
						servlet.OnConnect(servletCtx, conn)
 | 
				
			||||||
 | 
						conn.SetCloseHandler(func(code int, text string) error {
 | 
				
			||||||
 | 
							logging.Logger().Debugf("close")
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stopChan := make(chan struct{})
 | 
						stopChan := make(chan struct{})
 | 
				
			||||||
	servletDoneChan := make(chan struct{})
 | 
						servletDoneChan := make(chan struct{})
 | 
				
			||||||
@ -205,35 +209,27 @@ func (s *Server) handleConnection(servlet Servlet, servletCtx server.ServletCtx,
 | 
				
			|||||||
	select {
 | 
						select {
 | 
				
			||||||
	case <-readerDoneChan:
 | 
						case <-readerDoneChan:
 | 
				
			||||||
		close(stopChan)
 | 
							close(stopChan)
 | 
				
			||||||
		conn.Close()
 | 
					 | 
				
			||||||
		<-writerDoneChan
 | 
							<-writerDoneChan
 | 
				
			||||||
		<-servletDoneChan
 | 
							<-servletDoneChan
 | 
				
			||||||
		conn = nil
 | 
					 | 
				
			||||||
	case <-writerDoneChan:
 | 
						case <-writerDoneChan:
 | 
				
			||||||
		close(stopChan)
 | 
							close(stopChan)
 | 
				
			||||||
		conn.Close()
 | 
					 | 
				
			||||||
		<-readerDoneChan
 | 
							<-readerDoneChan
 | 
				
			||||||
		<-servletDoneChan
 | 
							<-servletDoneChan
 | 
				
			||||||
		conn = nil
 | 
					 | 
				
			||||||
	case <-servletDoneChan:
 | 
						case <-servletDoneChan:
 | 
				
			||||||
		close(stopChan)
 | 
							close(stopChan)
 | 
				
			||||||
		conn.Close()
 | 
					 | 
				
			||||||
		<-readerDoneChan
 | 
							<-readerDoneChan
 | 
				
			||||||
		<-writerDoneChan
 | 
							<-writerDoneChan
 | 
				
			||||||
		conn = nil
 | 
					 | 
				
			||||||
	case <-s.stopChan:
 | 
						case <-s.stopChan:
 | 
				
			||||||
		close(stopChan)
 | 
							close(stopChan)
 | 
				
			||||||
		conn.Close()
 | 
					 | 
				
			||||||
		<-readerDoneChan
 | 
							<-readerDoneChan
 | 
				
			||||||
		<-writerDoneChan
 | 
							<-writerDoneChan
 | 
				
			||||||
		<-servletDoneChan
 | 
							<-servletDoneChan
 | 
				
			||||||
		conn = nil
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func handleRead(s *Server, conn *server.Conn, doneChan chan<- struct{}, stopChan <-chan struct{}, readChan chan []byte) {
 | 
					func handleRead(s *Server, conn *server.Conn, stopChan <-chan struct{}, doneChan chan<- struct{}, readChan chan []byte) {
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
		close(doneChan)
 | 
							doneChan <- struct{}{}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if 0 < s.ServerHandler.GetMaxMessageSize() {
 | 
						if 0 < s.ServerHandler.GetMaxMessageSize() {
 | 
				
			||||||
@ -257,37 +253,31 @@ func handleRead(s *Server, conn *server.Conn, doneChan chan<- struct{}, stopChan
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		go func() {
 | 
							go func() {
 | 
				
			||||||
			_, message, err = conn.ReadMessage()
 | 
								_, message, err = conn.ReadMessage()
 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				if server.IsUnexpectedCloseError(err, server.CloseGoingAway, server.CloseAbnormalClosure) {
 | 
					 | 
				
			||||||
					logging.Logger().Debugf(s.serverMessage(fmt.Sprintf("Read error %v", err)))
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			close(readMessageChan)
 | 
								close(readMessageChan)
 | 
				
			||||||
		}()
 | 
							}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		select {
 | 
							select {
 | 
				
			||||||
		case <-s.stopChan:
 | 
							case <-stopChan:
 | 
				
			||||||
 | 
								conn.Close()
 | 
				
			||||||
			<-readMessageChan
 | 
								<-readMessageChan
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
		case <-readMessageChan:
 | 
							case <-readMessageChan:
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if nil != err {
 | 
							if nil != err {
 | 
				
			||||||
			select {
 | 
								if server.IsUnexpectedCloseError(err, server.CloseGoingAway, server.CloseAbnormalClosure) {
 | 
				
			||||||
			case <-s.stopChan:
 | 
									logging.Logger().Debugf(s.serverMessage(fmt.Sprintf("Read error %v", err)))
 | 
				
			||||||
				break
 | 
					 | 
				
			||||||
			case <-time.After(time.Second):
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			continue
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		readChan <- message
 | 
							readChan <- message
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func handleWrite(s *Server, conn *server.Conn, doneChan chan<- struct{}, stopChan <-chan struct{}, writeChan chan []byte) {
 | 
					func handleWrite(s *Server, conn *server.Conn, stopChan <-chan struct{}, doneChan chan<- struct{}, writeChan chan []byte) {
 | 
				
			||||||
	defer func() {
 | 
						defer func() {
 | 
				
			||||||
		close(doneChan)
 | 
							doneChan <- struct{}{}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ticker := time.NewTicker(s.ServerHandler.GetPingPeriod())
 | 
						ticker := time.NewTicker(s.ServerHandler.GetPingPeriod())
 | 
				
			||||||
@ -319,8 +309,8 @@ func handleWrite(s *Server, conn *server.Conn, doneChan chan<- struct{}, stopCha
 | 
				
			|||||||
			if err := conn.WriteMessage(server.PingMessage, nil); nil != err {
 | 
								if err := conn.WriteMessage(server.PingMessage, nil); nil != err {
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		case <-s.stopChan:
 | 
							case <-stopChan:
 | 
				
			||||||
			break
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user