func DirectInvokeHandler()

in lambda/rapidcore/standalone/directInvokeHandler.go [15:49]


func DirectInvokeHandler(w http.ResponseWriter, r *http.Request, s InteropServer) {
	tok := s.CurrentToken()
	if tok == nil {
		log.Errorf("Attempt to call directInvoke without Reserve")
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	invoke, err := directinvoke.ReceiveDirectInvoke(w, r, *tok)
	if err != nil {
		log.Errorf("direct invoke error: %s", err)
		return
	}

	if err := s.AwaitInitialized(); err != nil {
		w.WriteHeader(DoneFailedHTTPCode)
		if state, err := s.InternalState(); err == nil {
			w.Write(state.AsJSON())
		}
		return
	}

	if err := s.FastInvoke(w, invoke, true); err != nil {
		switch err {
		case rapidcore.ErrNotReserved:
		case rapidcore.ErrAlreadyReplied:
		case rapidcore.ErrAlreadyInvocating:
			log.Errorf("Failed to set reply stream: %s", err)
			w.WriteHeader(http.StatusBadRequest)
			return
		case rapidcore.ErrInvokeReservationDone:
			w.WriteHeader(http.StatusBadGateway)
		}
	}
}