YARP
Yet Another Robot Platform
localbroker.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6#ifndef YARP_MANAGER_LOCALBROKER
7#define YARP_MANAGER_LOCALBROKER
8
9#include <cstdio>
10#include <string>
11#include <iostream>
12
13#include <yarp/os/Time.h>
14#include <yarp/os/Port.h>
16#include <yarp/os/Network.h>
17#include <yarp/os/Property.h>
18#include <string>
20#include <yarp/os/Thread.h>
21
22#include <yarp/manager/broker.h>
23
24#if defined(_WIN32)
25 #include<Windows.h>
26#endif
27
28namespace yarp::manager {
29
33class LocalBroker: public Broker, public yarp::os::Thread {
34
35public:
36
37 typedef enum { WINDOW_HIDDEN=0, //window is hidden, catch stdout
38 WINDOW_VISIBLE=1, //window is visible
39 WINDOW_MINIMIZED=2 //window is started minimized
41
42
44 virtual ~LocalBroker();
45 bool init() override;
46 bool init(const char* szcmd, const char* szparam,
47 const char* szhost, const char* szstdio,
48 const char* szworkdir, const char* szenv) override;
49 void fini() override;
50 bool start() override;
51 bool stop() override;
52 bool kill() override;
53 bool connect(const char* from, const char* to,
54 const char* carrier, bool persist=false) override;
55 bool disconnect(const char* from, const char* to,
56 const char *carrier) override;
57 int running() override;
58 bool exists(const char* port) override;
59 const char* requestRpc(const char* szport, const char* request, double timeout) override;
60 bool connected(const char* from, const char* to,
61 const char* carrier) override;
62 const char* error() override;
63 bool initialized() override { return bInitialized;}
64 bool attachStdout() override;
65 void detachStdout() override;
66
69
70public: // for rate thread
71 void run() override;
72 bool threadInit() override;
73 void threadRelease() override;
74
75protected:
76
77private:
78 std::string strCmd;
79 std::string strParam;
80 std::string strHost;
81 std::string strStdio;
82 std::string strWorkdir;
83 std::string strTag;
84 std::string strEnv;
85 int ID;
86 std::string strError;
87 bool bOnlyConnector;
88 bool bInitialized;
89 int pipe_to_stdout[2];
90 FILE* fd_stdout;
91 WindowMode windowMode;
92
93 bool timeout(double base, double timeout);
94 int ExecuteCmd();
95 bool psCmd(int pid);
96 bool killCmd(int pid);
97 bool stopCmd(int pid);
98#if defined(_WIN32)
99 HANDLE read_from_pipe_cmd_to_stdout;
100 HANDLE write_to_pipe_cmd_to_stdout;
101 std::string lastError2String();
102#else
103 int waitPipe(int pipe_fd);
104 int waitPipeSignal(int pipe_fd);
105 void splitLine(char *pLine, char **pArgs);
106 void parseArguments(char *io_pLine, int *o_pArgc, char **o_pArgv);
107#endif
108 bool startStdout();
109 void stopStdout();
110
111 inline bool IS_PARENT_OF(int pid){ return pid>0; }
112 inline bool IS_NEW_PROCESS(int pid){ return !pid; }
113 inline bool IS_INVALID(int pid){ return pid<0; }
114};
115
116} // namespace yarp::manager
117
118
119#endif // __YARP_MANAGER_LOCALBROKER__
void * HANDLE
Class Broker.
Definition: broker.h:30
Class LocalBroker.
Definition: localbroker.h:33
const char * requestRpc(const char *szport, const char *request, double timeout) override
bool exists(const char *port) override
bool connected(const char *from, const char *to, const char *carrier) override
void run() override
Main body of the new thread.
void setWindowMode(WindowMode m)
Define if the application will be visible or not.
bool initialized() override
Definition: localbroker.h:63
bool threadInit() override
Initialization method.
bool disconnect(const char *from, const char *to, const char *carrier) override
void threadRelease() override
Release method.
bool connect(const char *from, const char *to, const char *carrier, bool persist=false) override
connection broker
void detachStdout() override
const char * error() override
bool attachStdout() override
An abstraction for a thread of execution.
Definition: Thread.h:21