File indexing completed on 2023-03-17 11:26:56
0001 #ifndef __XRDADAPTOR_HOSTHANDLER_H_
0002 #define __XRDADAPTOR_HOSTHANDLER_H_
0003
0004 #include "XrdCl/XrdClXRootDResponses.hh"
0005 #include "FWCore/Utilities/interface/get_underlying_safe.h"
0006
0007
0008
0009
0010
0011
0012
0013 class SyncHostResponseHandler : public XrdCl::ResponseHandler {
0014 public:
0015 SyncHostResponseHandler() : sem(0) {}
0016
0017 ~SyncHostResponseHandler() override = default;
0018
0019 void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response) override {
0020
0021 pStatus_ = std::unique_ptr<XrdCl::XRootDStatus>(status);
0022 pResponse_ = std::unique_ptr<XrdCl::AnyObject>(response);
0023 sem.Post();
0024 }
0025
0026 void HandleResponseWithHosts(XrdCl::XRootDStatus *status,
0027 XrdCl::AnyObject *response,
0028 XrdCl::HostList *hostList) override {
0029
0030 pStatus_ = std::unique_ptr<XrdCl::XRootDStatus>(status);
0031 pResponse_ = std::unique_ptr<XrdCl::AnyObject>(response);
0032 pHostList_ = std::unique_ptr<XrdCl::HostList>(hostList);
0033 sem.Post();
0034 }
0035
0036 std::unique_ptr<XrdCl::XRootDStatus> GetStatus() { return std::move(get_underlying_safe(pStatus_)); }
0037
0038 std::unique_ptr<XrdCl::AnyObject> GetResponse() { return std::move(get_underlying_safe(pResponse_)); }
0039
0040 std::unique_ptr<XrdCl::HostList> GetHosts() { return std::move(get_underlying_safe(pHostList_)); }
0041
0042 void WaitForResponse() { sem.Wait(); }
0043
0044 private:
0045 edm::propagate_const<std::unique_ptr<XrdCl::XRootDStatus>> pStatus_;
0046 edm::propagate_const<std::unique_ptr<XrdCl::AnyObject>> pResponse_;
0047 edm::propagate_const<std::unique_ptr<XrdCl::HostList>> pHostList_;
0048 XrdSysSemaphore sem;
0049 };
0050
0051 #endif