using RobotLib.Communication;
using System.Collections.Generic;
using System.Diagnostics;
namespace RobotLib
{
public abstract class DevBase
{
protected NLog.Logger log { get; private set; }
///
/// Creates a base class.
///
/// communication instance
public DevBase(IPublisherSubscriber com) : this(com, new List()) { }
///
/// Creates a base class and initializes interested Topics.
///
/// connunication instance
/// topics that shall be subscribed to
public DevBase(IPublisherSubscriber com, List interestedTopics)
{
log = NLog.LogManager.GetLogger(GetType().ToString());
Com = com;
InterestedTopics = interestedTopics;
foreach (var topic in InterestedTopics)
{
this.Com.Subscribe(topic);
}
com.NewMessageArrived += Com_NewMessageArrived;
}
protected List InterestedTopics { get; }
protected IPublisherSubscriber Com { get; }
protected void Com_NewMessageArrived(object sender, SubscribedMsgArrivedEventArgs e)
{
if (InterestedTopics.Contains(e.Topic))
{
ParseMessage(e.Topic, e.Message);
}
}
protected void SendMessage(string topic, string message)
{
if (Com.IsConnected)
{
Com.Publish(topic, message);
}
else
{
log.Warn("Not connected! Could not send message: " + message);
}
}
protected virtual void ParseMessage(string fromTopic, string message) { }
public virtual void Refresh() { }
}
}