YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
ChatBot_nws_yarp.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023-2023 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6#include "ChatBot_nws_yarp.h"
7
9#include <yarp/os/LogStream.h>
10#include <yarp/os/Os.h>
11
12namespace {
13YARP_LOG_COMPONENT(CHATBOT_NWS_YARP, "yarp.devices.chatBot_nws_yarp")
14}
15
17{
18 closeMain();
19}
20
22{
23 return closeMain();
24}
25
27{
28 if (!parseParams(config)) { return false; }
29
30 m_inputBuffer.attach(m_inputPort);
31 if(!m_inputPort.open(m_name+"/text:i"))
32 {
33 yCError(CHATBOT_NWS_YARP) << "Could not open port" << m_name +"/text:i";
34 return false;
35 }
36 if(!m_outputPort.open(m_name + "/text:o"))
37 {
38 yCError(CHATBOT_NWS_YARP) << "Could not open port" << m_name +"/text:o";
39 return false;
40 }
41 if (!m_thriftServerPort.open(m_name +"/rpc"))
42 {
43 yCError(CHATBOT_NWS_YARP, "Failed to open rpc port");
44 return false;
45 }
46 m_thriftServerPort.setReader(*this);
47
48 yCInfo(CHATBOT_NWS_YARP, "Device waiting for attach...");
49 return true;
50}
51
52bool ChatBot_nws_yarp::attach(yarp::dev::PolyDriver* deviceToAttach)
53{
54 if (deviceToAttach->isValid())
55 {
56 deviceToAttach->view(m_iChatBot);
57 }
58
59 if (nullptr == m_iChatBot)
60 {
61 yCError(CHATBOT_NWS_YARP, "Subdevice passed to attach method is invalid");
62 return false;
63 }
64
65 yCInfo(CHATBOT_NWS_YARP, "Attach done");
66
67 m_cbkHelper = std::make_unique<ChatBotRPC_CallbackHelper>();
68 if(!m_cbkHelper->setCommunications(m_iChatBot,&m_outputPort))
69 {
70 yCError(CHATBOT_NWS_YARP) << "Error setting ChatBot_CallbackHelper object interfaces";
71 return false;
72 }
73 m_inputBuffer.useCallback(*m_cbkHelper);
74 if(!m_msgsImpl.setInterfaces(m_iChatBot))
75 {
76 yCError(CHATBOT_NWS_YARP) << "Error setting IChatBotMsgsImpl object interfaces";
77 return false;
78 }
79
80 return true;
81}
82
83bool ChatBot_nws_yarp::detach()
84{
85 m_iChatBot = nullptr;
86 return true;
87}
88
89bool ChatBot_nws_yarp::closeMain()
90{
91 //close the port connection here
92 m_inputBuffer.disableCallback();
93 m_inputPort.close();
94 m_outputPort.close();
95 m_thriftServerPort.close();
96 return true;
97}
98
100{
101 bool b = m_msgsImpl.read(connection);
102 if (b)
103 {
104 return true;
105 }
106 else
107 {
108 yCError(CHATBOT_NWS_YARP, "read() Command failed");
109 return false;
110 }
111}
bool parseParams(const yarp::os::Searchable &config) override
Parse the DeviceDriver parameters.
bool read(yarp::os::ConnectionReader &connection) override
Read this object from a network connection.
virtual ~ChatBot_nws_yarp() override
bool open(yarp::os::Searchable &config) override
Open the DeviceDriver.
bool close() override
Close the DeviceDriver.
bool setInterfaces(yarp::dev::IChatBot *iChatBot)
bool read(yarp::os::ConnectionReader &connection) override
Read this object from a network connection.
A container for a device driver.
Definition PolyDriver.h:23
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
void setReader(PortReader &reader) override
Set an external reader for port data.
void close() override
Stop port activity.
A mini-server for performing network communication in the background.
An interface for reading from a network connection.
void attach(Port &port)
Attach this buffer to a particular port.
void useCallback(TypedReaderCallback< T > &callback) override
Set an object whose onRead method will be called when data is available.
void disableCallback() override
Remove a callback set up with useCallback()
void close() override
Stop port activity.
Definition Port.cpp:363
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
Definition Port.cpp:79
A base class for nested structures that can be searched.
Definition Searchable.h:31
#define yCInfo(component,...)
#define yCError(component,...)
#define YARP_LOG_COMPONENT(name,...)