OpenTCS打造移动机器人交通管制系统(八)

       上一篇文章记录了下如何在OpenTCS框架下拓展数据库(点此查看上一篇),本篇来继续深入的探讨下如何拓展Kernel。OpenTCS框架主要的作用是提供一个交通管制的框架,但是通常来说,一个完整的调度系统(这里指的是广义的调度系统),是不仅仅只有交通管制的,通常还会有业务层、逻辑层等相关模块一起和OpenTCS构成一个实际可用的系统。一般来说实际项目的架构至少应该是下面的样子:

 

那么很显然,要想系统更紧凑,OpenTCS-Kernel需要拓展,其实OpenTCS在设计之初就预留了拓展的接口(为OpenTCS的设计者点个赞)。这个接口的定义如下:

//以下代码片段摘取来自OpenTCS.
public interface KernelExtension
    extends Lifecycle {
  
  /**
   * Returns a name/brief human-readable description for this extension.
   *
   * @return The name/brief description.
   * @deprecated Unused. Will be removed.
   */
  @Deprecated
  @ScheduledApiChange(when = "5.0", details = "Will be removed.")
  default String getName() {
    return getClass().getName();
  };
}

很显然,这个接口又是拓展的Lifecycle接口,Liftcycle接口定义的接口如下:

//以下代码片段摘取来自OpenTCS.
public interface Lifecycle {

  /**
   * (Re-)Initializes this component before it is being used.
   */
  void initialize();
  
  /**
   * Checks whether this component is initialized.
   *
   * @return <code>true</code> if, and only if, this component is initialized.
   */
  boolean isInitialized();

  /**
   * Terminates the instance and frees resources.
   */
  void terminate();
}

因此,我们要使用拓展接口,那就应该提供一个实现体,实现KernelExtention接口,如下:

//以下代码来自白色冰激凌的博客https://blog.csdn.net/xlh145
public class UserKernelExtension implements KernelExtension {
  private volatile boolean enabled;
  @Override
  public boolean isInitialized() {
    return enabled;
  }

  @Override
  public void initialize() {
    if (enabled) {
      return;
    }
	//TODO 此处做你想做的任何事情,OpenTCS会自动加载你的代码
  }

  @Override
  public void terminate() {
    if (!enabled) {
      return;
    }
    enabled = false;
	//TODO 此处应该做善后工作	
  }
}

实际上,OpenTCS的TCP接口,HTTP接口全部是基于本文所述的拓展接口实现的,搞清楚了这些,实现自己的拓展也就清楚明了了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章