public void PushPipelineData(IEndpoint endpoint, Message message)
{
Queue<IPipelineComponent> pipeline;
if (!_pipelines.TryGetValue(endpoint, out pipeline))
{
//TODO: Temporary for testing
endpoint.ProcessMessage(endpoint, message.GetBytes());
}
else
{
byte[] data = null;
foreach (IAssembler component in pipeline.OfType<IAssembler>())
{
component.AddMessage(message);
data = component.Assemble();
// Decide what to do if data is returned.
// Right now, we break out and go to encoders
if (data != null) break;
}
if (data == null) data = message.GetBytes();
foreach (IEncoder component in pipeline.OfType<IEncoder>())
{
data = component.Encode(data);
}
if (data != null)
{
endpoint.ProcessMessage(endpoint, data);
}
}
}
}