package rescuecore2.standard.kernel.comms;
import java.util.Collection;
import rescuecore2.worldmodel.Entity;
import rescuecore2.standard.messages.AKSpeak;
/**
Interface for Channels used by the ChannelCommunicationModel.
*/
public interface Channel {
/**
Notify the channel that a timestep has elapsed.
*/
void timestep();
/**
Add a subscriber to this channel.
@param e The subscriber.
*/
void addSubscriber(Entity e);
/**
Remove a subscriber from this channel.
@param e The subscriber.
*/
void removeSubscriber(Entity e);
/**
Get all subscribers.
@return All subscribers.
*/
Collection<Entity> getSubscribers();
/**
Push a message through this channel.
@param message The message to push.
@throws InvalidMessageException If the message is invalid.
*/
void push(AKSpeak message) throws InvalidMessageException;
/**
Get the messages that should be send to an agent.
@param agent The agent to look up.
@return All messages for that agent.
*/
Collection<AKSpeak> getMessagesForAgent(Entity agent);
/**
Set the input noise object for this channel. Input noise is applied to the message once on arrival.
@param noise The input noise.
*/
void setInputNoise(Noise noise);
/**
Set the output noise object for this channel. Output noise is applied to the message once for each listener as it is sent.
@param noise The output noise.
*/
void setOutputNoise(Noise noise);
}