Skip to content

Commit

Permalink
Link nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
hfedcba committed Jun 5, 2017
1 parent efcc3c3 commit 63f29af
Show file tree
Hide file tree
Showing 16 changed files with 1,010 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4 -I cfg
SUBDIRS = basic-logic comment debug function gpio light mqtt passthrough timers tls-config variable
SUBDIRS = basic-logic comment debug function gpio light link mqtt passthrough timers tls-config variable
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ esac
#AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [enable debugging, default: no]), [case "${enableval}" in yes) debug=true ;; no) debug=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; esac], [debug=false])
#AM_CONDITIONAL(DEBUG, test x"$debug" = x"true")

AC_OUTPUT(Makefile basic-logic/Makefile comment/Makefile debug/Makefile function/Makefile gpio/Makefile light/Makefile mqtt/Makefile passthrough/Makefile timers/Makefile tls-config/Makefile variable/Makefile)
AC_OUTPUT(Makefile basic-logic/Makefile comment/Makefile debug/Makefile function/Makefile gpio/Makefile light/Makefile link/Makefile mqtt/Makefile passthrough/Makefile timers/Makefile tls-config/Makefile variable/Makefile)
24 changes: 24 additions & 0 deletions link/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
AUTOMAKE_OPTIONS = subdir-objects

AM_CPPFLAGS = -Wall -std=c++11 -DFORTIFY_SOURCE=2 -DGCRYPT_NO_DEPRECATED
AM_LDFLAGS = -Wl,-rpath=/lib/homegear -Wl,-rpath=/usr/lib/homegear -Wl,-rpath=/usr/local/lib/homegear
LIBS += -Wl,-Bdynamic -lhomegear-node

libdir = $(localstatedir)/lib/homegear/flows/nodes/link

lib_LTLIBRARIES = link-in.la link-out.la

link_in_la_SOURCES = link-in/Factory.cpp link-in/MyNode.cpp
link_in_la_LDFLAGS =-module -avoid-version -shared

link_out_la_SOURCES = link-out/Factory.cpp link-out/MyNode.cpp
link_out_la_LDFLAGS =-module -avoid-version -shared

link_ladir = $(libdir)
link_la_DATA = link-in/link-in.hni link-out/link-out.hni
locale_en_usdir = $(libdir)/locales/en-US
locale_en_us_DATA = link-in/locales/en-US/link-in link-out/locales/en-US/link-out

install-exec-hook:
rm -f $(DESTDIR)$(libdir)/link-in.la
rm -f $(DESTDIR)$(libdir)/link-out.la
42 changes: 42 additions & 0 deletions link/link-in/Factory.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/* Copyright 2013-2017 Sathya Laufer
*
* Homegear is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Homegear is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Homegear. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. If you
* do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source
* files in the program, then also delete it here.
*/

#include "Factory.h"
#include "MyNode.h"
#include "../config.h"

Flows::INode* MyFactory::createNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected)
{
return new MyNode::MyNode(path, nodeNamespace, type, frontendConnected);
}

Flows::NodeFactory* getFactory()
{
return (Flows::NodeFactory*) (new MyFactory);
}
44 changes: 44 additions & 0 deletions link/link-in/Factory.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/* Copyright 2013-2017 Sathya Laufer
*
* Homegear is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Homegear is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Homegear. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. If you
* do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source
* files in the program, then also delete it here.
*/

#ifndef FACTORY_H
#define FACTORY_H

#include <homegear-node/NodeFactory.h>
#include "MyNode.h"

class MyFactory : Flows::NodeFactory
{
public:
virtual Flows::INode* createNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected);
};

extern "C" Flows::NodeFactory* getFactory();

#endif
85 changes: 85 additions & 0 deletions link/link-in/MyNode.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/* Copyright 2013-2017 Sathya Laufer
*
* Homegear is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Homegear is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Homegear. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. If you
* do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source
* files in the program, then also delete it here.
*/

#include "MyNode.h"

namespace MyNode
{

MyNode::MyNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected) : Flows::INode(path, nodeNamespace, type, frontendConnected)
{
_localRpcMethods.emplace("linkInput", std::bind(&MyNode::linkInput, this, std::placeholders::_1));
}

MyNode::~MyNode()
{
}


bool MyNode::init(Flows::PNodeInfo info)
{
try
{
return true;
}
catch(const std::exception& ex)
{
Flows::Output::printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what());
}
catch(...)
{
Flows::Output::printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__);
}
return false;
}


Flows::PVariable MyNode::linkInput(Flows::PArray& parameters)
{
try
{
if(parameters->size() != 1) return Flows::Variable::createError(-1, "Method expects exactly one parameter. " + std::to_string(parameters->size()) + " given.");
if(parameters->at(0)->type != Flows::VariableType::tStruct) return Flows::Variable::createError(-1, "Parameter is not of type struct.");

output(0, parameters->at(0));

return std::make_shared<Flows::Variable>();
}
catch(const std::exception& ex)
{
Flows::Output::printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what());
}
catch(...)
{
Flows::Output::printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__);
}
return Flows::Variable::createError(-32500, "Unknown application error.");
}

}
53 changes: 53 additions & 0 deletions link/link-in/MyNode.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* Copyright 2013-2017 Sathya Laufer
*
* Homegear is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Homegear is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Homegear. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. If you
* do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source
* files in the program, then also delete it here.
*/

#ifndef MYNODE_H_
#define MYNODE_H_

#include <homegear-node/INode.h>
#include <thread>
#include <mutex>

namespace MyNode
{

class MyNode: public Flows::INode
{
public:
MyNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected);
virtual ~MyNode();

virtual bool init(Flows::PNodeInfo info);
private:
Flows::PVariable linkInput(Flows::PArray& parameters);
};

}

#endif
Loading

0 comments on commit 63f29af

Please sign in to comment.