summaryrefslogtreecommitdiff
path: root/manager/bin
diff options
context:
space:
mode:
Diffstat (limited to 'manager/bin')
-rw-r--r--manager/bin/Makefile41
-rw-r--r--manager/bin/distrio_manager.cpp160
-rw-r--r--manager/bin/distrio_manager.h93
-rw-r--r--manager/bin/manager_base.h21
-rwxr-xr-xmanager/bin/run.sh22
5 files changed, 337 insertions, 0 deletions
diff --git a/manager/bin/Makefile b/manager/bin/Makefile
new file mode 100644
index 0000000..05c14d7
--- /dev/null
+++ b/manager/bin/Makefile
@@ -0,0 +1,41 @@
+CC := $(CROSS_COMPILE)gcc
+CXX := $(CROSS_COMPILE)g++
+LD := $(CROSS_COMPILE)g++
+
+DISTRIO_COMMON := ../../common
+DISTRIO_IO := ../../io
+
+LDFLAGS += -L$(DISTRIO_COMMON) -ldistrio_common -L$(DISTRIO_IO) -ldistrio_io \
+ -lACE -lTAO -lTAO_AnyTypeCode -lTAO_CosNaming -lTAO_PortableServer
+CFLAGS += -fPIC -I$(DISTRIO_COMMON) -I$(DISTRIO_IO)
+CXXFLAGS += $(CFLAGS)
+
+TAO_IDL := tao_idl
+
+DESTDIR := /usr
+
+COMPONENT = distrio_manager
+EXEC = $(COMPONENT)
+OBJ = $(COMPONENT)C.o $(COMPONENT)S.o $(COMPONENT).o
+IDL_CLEANFILES = $(COMPONENT)C.cpp $(COMPONENT)C.h $(COMPONENT)I.h \
+ $(COMPONENT)S.cpp $(COMPONENT)S.h $(COMPONENT)C.inl
+
+all: $(OBJ)
+ $(LD) $(LDFLAGS) -o $(EXEC) $(OBJ)
+
+idl:
+ $(TAO_IDL) -GI -I../../interfaces ../../interfaces/$(COMPONENT).idl
+ rm -f $(COMPONENT)I.cpp $(COMPONENT)I.h
+
+idl_clean:
+ rm -f $(IDL_CLEANFILES)
+
+clean: idl_clean
+ rm -f *.o
+ rm -f $(EXEC)
+
+install: all
+ cp -a $(EXEC) $(DESTDIR)/bin
+
+uninstall:
+ rm -f $(DESTDIR)/bin/$(EXEC)
diff --git a/manager/bin/distrio_manager.cpp b/manager/bin/distrio_manager.cpp
new file mode 100644
index 0000000..b7671fb
--- /dev/null
+++ b/manager/bin/distrio_manager.cpp
@@ -0,0 +1,160 @@
+/**
+ * distrio manager implementation
+ *
+ * - instances a manager object
+ * - registers the manager object at the NamingService
+ *
+ * @author Manuel Traut <manut@mecka.net>
+ * @licence GPLv2
+ */
+
+#include "distrio_manager.h"
+
+#include <orbsvcs/CosNamingC.h>
+
+#include <iostream>
+
+// Implementation skeleton constructor
+Distrio_Manager_i::Distrio_Manager_i (void)
+{
+}
+
+// Implementation skeleton destructor
+Distrio_Manager_i::~Distrio_Manager_i (void)
+{
+}
+
+::Distrio::Error * Distrio_Manager_i::digital (
+ ::Distrio::Digital_list_out io_list)
+{
+ io_list = &digital_list;
+}
+
+::Distrio::Error * Distrio_Manager_i::analog (
+ ::Distrio::Analog_list_out io_list)
+{
+ io_list = &analog_list;
+}
+
+::Distrio::Error * Distrio_Manager_i::device (
+ ::Distrio::Device_list_out dev_list)
+{
+ dev_list = &device_list;
+}
+
+/* TODO: think about locking!!! */
+
+::Distrio::Error * Distrio_Manager_i::register_io_digital (
+ ::Distrio::Digital_ptr & io_digi)
+{
+ io_digi->id (new_id ());
+ digital_list.length (digital_list.length () + 1);
+ digital_list [digital_list.length () - 1] = io_digi;
+}
+
+::Distrio::Error * Distrio_Manager_i::register_io_analog (
+ ::Distrio::Analog_ptr & io_ana)
+{
+ io_ana->id (new_id ());
+ analog_list.length (digital_list.length () + 1);
+ analog_list [analog_list.length () - 1] = io_ana;
+}
+
+::Distrio::Error * Distrio_Manager_i::register_io_device (
+ ::Distrio::Device_ptr & io_dev)
+{
+ io_dev->id (new_id ());
+ device_list.length (device_list.length () + 1);
+ device_list [device_list.length () - 1] = io_dev;
+}
+
+::Distrio::Error * Distrio_Manager_i::unregister_io_digital (
+ ::Distrio::Digital_ptr io_dig)
+{
+ // Add your implementation here
+}
+
+::Distrio::Error * Distrio_Manager_i::unregister_io_analog (
+ ::Distrio::Analog_ptr io_ana)
+{
+ // Add your implementation here
+}
+
+::Distrio::Error * Distrio_Manager_i::unregister_io_device (
+ ::Distrio::Device_ptr io_dev)
+{
+ // Add your implementation here
+}
+
+void Distrio_Manager_i::log_error (
+ const ::Distrio::Error & error)
+{
+ // Add your implementation here
+}
+
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ std::cout << __FILE__ << " build " << __DATE__ << " " << __TIME__ <<std::endl;
+
+ int ret = 0;
+ CORBA::ORB_var orb;
+ CORBA::Object_var distrio_manager_obj, root_poa, naming_service;
+ PortableServer::POA_var poa;
+ PortableServer::POAManager_var poa_mgr;
+ CosNaming::NamingContext_var nc;
+ CosNaming::Name name;
+
+ Distrio_Manager_i *distrio_manager;
+ PortableServer::ObjectId_var distrio_manager_oid;
+
+ distrio_manager = new Distrio_Manager_i ();
+
+ try {
+ std::cout << "initialize CORBA orb" << std::endl;
+ orb = CORBA::ORB_init (argc, argv);
+ root_poa = orb->resolve_initial_references ("RootPOA");
+ poa = PortableServer::POA::_narrow (root_poa.in ());
+ distrio_manager_oid = poa->activate_object (distrio_manager);
+ distrio_manager_obj = distrio_manager->_this ();
+
+ std::cout << "get context of NameService" << std::endl;
+ naming_service = orb->resolve_initial_references ("NameService");
+ if (CORBA::is_nil (naming_service)) {
+ std::cerr << "can't resolve NameService" << std::endl;
+ ret = -EINVAL;
+ goto out;
+ }
+ nc = CosNaming::NamingContext::_narrow (naming_service.in ());
+ if (CORBA::is_nil (nc)) {
+ std::cerr << "resolved invalid NameService object" << std::endl;
+ ret = -EINVAL;
+ goto out;
+ }
+
+ std::cout << "bind manager object at NameService" << std::endl;
+ /* TODO: find out how to build a tree @ the nameservice "distrio/manager" */
+ name.length (1);
+ name[0].id = CORBA::string_dup ("distrio_manager");
+ nc->rebind (name, distrio_manager_obj.in ());
+
+ std::cout << "activate POA Manager" << std::endl;
+ poa_mgr = poa->the_POAManager ();
+ poa_mgr->activate ();
+
+ std::cout << "distrio_manager ready" << std::endl;
+ orb->run ();
+ orb->destroy ();
+ } catch (CORBA::SystemException &e) {
+ std::cerr << "CORBA initialization failed: " << e << std::endl;
+ ret = -EINVAL;
+ goto out;
+ } catch(CORBA::Exception &e) {
+ std::cerr << "CORBA initialization failed: " << e << std::endl;
+ ret = -EINVAL;
+ goto out;
+ }
+
+out:
+ free (distrio_manager);
+ return ret;
+}
diff --git a/manager/bin/distrio_manager.h b/manager/bin/distrio_manager.h
new file mode 100644
index 0000000..a2820e6
--- /dev/null
+++ b/manager/bin/distrio_manager.h
@@ -0,0 +1,93 @@
+// -*- C++ -*-
+// $Id$
+
+/**
+ * Code generated by the The ACE ORB (TAO) IDL Compiler v2.1.2
+ * TAO and the TAO IDL Compiler have been developed by:
+ * Center for Distributed Object Computing
+ * Washington University
+ * St. Louis, MO
+ * USA
+ * http://www.cs.wustl.edu/~schmidt/doc-center.html
+ * and
+ * Distributed Object Computing Laboratory
+ * University of California at Irvine
+ * Irvine, CA
+ * USA
+ * and
+ * Institute for Software Integrated Systems
+ * Vanderbilt University
+ * Nashville, TN
+ * USA
+ * http://www.isis.vanderbilt.edu/
+ *
+ * Information about TAO is available at:
+ * http://www.cs.wustl.edu/~schmidt/TAO.html
+ **/
+
+// TAO_IDL - Generated from
+// be/be_codegen.cpp:1616
+
+#ifndef DISTRIO_MANAGERI_Z5WXNW_H_
+#define DISTRIO_MANAGERI_Z5WXNW_H_
+
+#include "distrio_managerS.h"
+#include "manager_base.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+class Distrio_Manager_i
+ : public virtual POA_Distrio::Manager, Distrio_manager_base
+{
+public:
+ // Constructor
+ Distrio_Manager_i (void);
+
+ // Destructor
+ virtual ~Distrio_Manager_i (void);
+
+ virtual
+ ::Distrio::Error * digital (
+ ::Distrio::Digital_list_out io_list);
+
+ virtual
+ ::Distrio::Error * analog (
+ ::Distrio::Analog_list_out io_list);
+
+ virtual
+ ::Distrio::Error * device (
+ ::Distrio::Device_list_out dev_list);
+
+ virtual
+ ::Distrio::Error * register_io_digital (
+ ::Distrio::Digital_ptr & io_dig);
+
+ virtual
+ ::Distrio::Error * register_io_analog (
+ ::Distrio::Analog_ptr & io_ana);
+
+ virtual
+ ::Distrio::Error * register_io_device (
+ ::Distrio::Device_ptr & io_dev);
+
+ virtual
+ ::Distrio::Error * unregister_io_digital (
+ ::Distrio::Digital_ptr io_dig);
+
+ virtual
+ ::Distrio::Error * unregister_io_analog (
+ ::Distrio::Analog_ptr io_ana);
+
+ virtual
+ ::Distrio::Error * unregister_io_device (
+ ::Distrio::Device_ptr io_dev);
+
+ virtual
+ void log_error (
+ const ::Distrio::Error & error);
+};
+
+
+#endif /* DISTRIO_MANAGERI_H_ */
diff --git a/manager/bin/manager_base.h b/manager/bin/manager_base.h
new file mode 100644
index 0000000..790609e
--- /dev/null
+++ b/manager/bin/manager_base.h
@@ -0,0 +1,21 @@
+/**
+ * used by interface implementation to store private attributes
+ *
+ * @author Manuel Traut <manut@mecka.net>
+ * @licence GPLv2
+ */
+
+#include <distrio_ioC.h>
+
+class Distrio_manager_base {
+ public:
+ Distrio_manager_base () {id = 0;}
+ ~Distrio_manager_base () {}
+ protected:
+ long id;
+ Distrio::Device_list device_list;
+ Distrio::Analog_list analog_list;
+ Distrio::Digital_list digital_list;
+ /* TODO: locking */
+ long new_id () { return id++; }
+};
diff --git a/manager/bin/run.sh b/manager/bin/run.sh
new file mode 100755
index 0000000..8162204
--- /dev/null
+++ b/manager/bin/run.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+#
+# startup script for distrio manager
+#
+# checks if a naming service is running
+# if not; a newone is started before distrio_manager
+#
+# author: Manuel Traut <manut@mecka.net>
+
+NS_PORT=12345
+
+NS=`ps aux | grep tao_cosnaming | grep $NS_PORT`
+
+if [ -z "$NS" ]; then
+ echo start naming service
+ tao_cosnaming -ORBEndPoint iiop://localhost:$NS_PORT &
+ sleep 1
+fi
+
+LD_LIBRARY_PATH=../io:../common ./distrio_manager \
+ -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService \
+ $@