func()

in websocketserver/websocketserver.go [68:118]


func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	u, err := url.Parse(r.Header.Get("Origin"))
	if err != nil || !s.isValidOrigin(u.Host) {
		message := u.Host
		if err != nil {
			message = err.Error()
		}

		logrus.Error("invalid origin: ", message)
		http.Error(w, "invalid origin", http.StatusBadRequest)
		return
	}

	if s.conn != nil {
		http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests)
		return
	}

	conn, err := handleConnection(w, r)
	if err != nil {
		http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
		return
	}

	s.setupConnection(conn)
	s.startPolling()
	defer s.Close()

	for {
		if s.conn == nil {
			break
		}

		msg, err := s.readMessage()
		if err != nil {
			break
		}

		rsp, err := s.processMessage(msg)
		if err != nil {
			break
		}

		if rsp != nil {
			if err := s.WriteMessage(*rsp); err != nil {
				logrus.Error("error writing message: ", err)
				break
			}
		}
	}
}