12 #ifndef ROOT_TMPClient
13 #define ROOT_TMPClient
25 explicit TMPClient(
unsigned nWorkers = 0);
28 TMPClient(
const TMPClient &) =
delete;
29 TMPClient &operator=(
const TMPClient &) =
delete;
31 bool Fork(TMPWorker &server);
32 unsigned Broadcast(
unsigned code,
unsigned nMessages = 0);
33 template<
class T>
unsigned Broadcast(
unsigned code,
const std::vector<T> &objs);
34 template<
class T>
unsigned Broadcast(
unsigned code, std::initializer_list<T> &objs);
35 template<
class T>
unsigned Broadcast(
unsigned code, T obj,
unsigned nMessages = 0);
36 TMonitor &GetMonitor() {
return fMon; }
37 bool GetIsParent()
const {
return fIsParent; }
39 void SetNWorkers(
unsigned n) { fNWorkers = n; }
40 unsigned GetNWorkers()
const {
return fNWorkers; }
41 void DeActivate(TSocket *s);
42 void Remove(TSocket *s);
44 void HandleMPCode(MPCodeBufPair &msg, TSocket *sender);
48 std::vector<pid_t> fWorkerPids;
73 unsigned TMPClient::Broadcast(
unsigned code,
const std::vector<T> &args)
77 std::unique_ptr<TList> lp(fMon.GetListOfActives());
79 unsigned nArgs = args.size();
83 if (MPSend((TSocket *)s, code, args[count])) {
84 fMon.DeActivate((TSocket *)s);
87 Error(
"TMPClient::Broadcast",
"[E] Could not send message to server\n");
100 unsigned TMPClient::Broadcast(
unsigned code, std::initializer_list<T> &args)
102 std::vector<T> vargs(std::move(args));
103 return Broadcast(code, vargs);
120 unsigned TMPClient::Broadcast(
unsigned code, T obj,
unsigned nMessages)
123 nMessages = fNWorkers;
128 std::unique_ptr<TList> lp(fMon.GetListOfActives());
130 if (count == nMessages)
132 if (MPSend((TSocket *)s, code, obj)) {
133 fMon.DeActivate((TSocket *)s);
136 Error(
"TMPClient::Broadcast",
"[E] Could not send message to server\n");