StreamInsight 浅入浅出(三)—— 适配器
2010-09-27 00:00:00 来源:WEB开发网查看原图(大图)
基类的命名规范遵循模式[类型化][点 | 间隔 | 边缘][输入 | 输出],非类型化适配器不具有类型化的前缀。那么如果想生成某一类的适配器,则只要继承相对应的基类即可。这里面有一点问题的是,由于一个系统可能往往同时需要间隔、点和边缘三种事件模型的适配器,那么在创建相应适配器的时候,由于只能各自继承各自相应的基类,大量相同的代码只能重复的写在不同的适配器里,管理和维护起来比较麻烦。
适配器工厂
适配器工厂作为适配器到服务器运行时之间的网关,提供了资源共享、适配器生成、提供配置信息和 CTI 事件生成等一系列工程。可以认为它是枢纽,配置各个适配器,并指挥各个事件通过相应的适配器,同时还利用对 CTI 事件的控制,影响所有事件流。
适配器工厂同样可以按照输入、输出或者类型化、非类型化分类,相应的,有四个接口:
查看原图(大图)
一个典型的适配器工厂的实现代码是:
public sealed class TextFileReaderFactory : IInputAdapterFactory<TextFileReaderConfig>,IDeclareAdvanceTimeProperties<TextFileReaderConfig>
{
public InputAdapterBase Create(TextFileReaderConfig configInfo, EventShape eventShape, CepEventType cepEventType)
{
InputAdapterBase adapter = default(InputAdapterBase);
if (eventShape == EventShape.Point)
{
adapter = new TextFilePointInput(configInfo, cepEventType);
}
else if (eventShape == EventShape.Interval)
{
adapter = new TextFileIntervalInput(configInfo, cepEventType);
}
else if (eventShape == EventShape.Edge)
{
adapter = new TextFileEdgeInput(configInfo, cepEventType);
}
else
{
throw new ArgumentException(
string.Format(
CultureInfo.InvariantCulture,
"TextFileReaderFactory cannot instantiate adapter with event shape {0}",
eventShape.ToString()));
}
return adapter;
}
public void Dispose()
{
}
public AdapterAdvanceTimeSettings DeclareAdvanceTimeProperties(TextFileReaderConfig configInfo, EventShape eventShape, CepEventType cepEventType)
{
var atgs = new AdvanceTimeGenerationSettings(configInfo.CtiFrequency, TimeSpan.FromTicks(-1), true);
return new AdapterAdvanceTimeSettings(atgs, AdvanceTimePolicy.Adjust);
}
}
Tags:StreamInsight 适配器
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接