Source code for morse.middleware.moos.abstract_moos
import logging; logger = logging.getLogger("morse.moos")
import pymoos.MOOSCommClient
from morse.middleware import AbstractDatastream
from morse.core import blenderapi
[docs]class AbstractMOOS(AbstractDatastream):
""" Base class for all MOOS Publishers and Subscribers """
# used to generate documentation, TODO fill in subclasses
_type_name = "db entries"
_type_url = ""
_moosapp = None
[docs] def initialize(self):
""" Initialize the MOOS app"""
logger.info("MOOS datastream initialize %s"%self)
if not AbstractMOOS._moosapp:
m = pymoos.MOOSCommClient.MOOSApp()
#m.SetOnConnectCallBack( m.DoRegistrations )
#m.SetOnMailCallBack( m.MailCallback )
logger.info("%s" % m.GetLocalIPAddress())
fundamental_frequency = 10 # [Hz]
m.Run( "127.0.0.1", 9000, "MORSE_SIM", fundamental_frequency)
AbstractMOOS._moosapp = m
logger.info("MOOS datastream interface initialized")
# all instance share the same static MOOSApp
self.m = AbstractMOOS._moosapp
[docs] def finalize(self):
""" Kill the morse MOOS app."""
if AbstractMOOS._moosapp:
AbstractMOOS._moosapp.Close()
AbstractMOOS._moosapp = None
logger.info("MOOS datastream finalize %s"%self)
#
# Example (String)
#
[docs]class StringPublisher(AbstractMOOS):
""" Publish a string containing a printable representation of the
local data. """
[docs] def default(self, ci='unused'):
logger.debug("Posting message to the MOOS database.")
current_time = blenderapi.persistantstorage().current_time
#iterate through all objects of the component_instance and post the data
for variable, data in self.data.items():
name = "%s_%s" % (self.component_name, variable)
logger.debug("name: %s, type: %s, data: %s"%
(name, type(data), str(data)))
self.m.Notify(name, str(data), current_time)
[docs]class StringReader(AbstractMOOS):
""" Log messages. """
[docs] def default(self, ci='unused'):
# get latest mail from the MOOS comm client
messages = self.m.FetchRecentMail()
# log messages
for message in messages:
logger.info("message: %s" % str(message))