Opted to implement communication between agent and sim through a communication "node", which is responsible for sending and receiving messages and writing them to an instance of States class.
Agent is set up as a service. Service implementation is afforded by a wrapper class that is responsible for setting up the agent the ROS service. If non ROS communication is used the wrapper class will take care of that. The Agent class itself contains no ROS specific code.