[Java]如何制作一个WordCount-Plus的Plugin

时间:2021-07-16 21:22:32

主类

每个Plugin都有一个主类实现了com.jihuayu.wordcount.api.Plugin接口,这个主类就是插件的路口。

获取命令介绍

可以通过向方法getCommandUsage的参数info添加String的方法添加你的方法介绍。

获取命令名字

可以通过方法getCommandName的返回值来指定命令名字。

  • 若返回null则表示只进行初始化,不出现在指令区。
  • 若返回“”代表无参数时执行该代码的。

设置命令执行代码

可以通过设置doCommand方法来设置执行时的代码,其中doCommand的参数为针对该指令传入的参数。

事件

WordCount-Plus默认自带了4个事件,分别是:

ReadyEvent

准备完成时触发。

ReadEvent

每次读取完成时触发。

ReadOverEvent

全部文本读取完成时触发。

WriteEvent

每次需要输出时触发。

自定义事件

当然,你也可以自定义事件。

示例

ReadyPlug

import com.jihuayu.wordcount.api.Plugin;
import com.jihuayu.wordcount.api.event.ReadyEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import java.util.List; public class ReadyPlug implements Plugin {
public ReadyPlug(){
EventBus.getDefault().register(this);
}
@Override
public void getCommandUsage(List<String> info) {
} @Override
public String getCommandName() {
return null;
} @Override
public void doCommand(String[] args) { }
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(ReadyEvent event){
System.out.println("hello");
}
}

ReadPlug

import com.jihuayu.wordcount.api.Plugin;
import com.jihuayu.wordcount.api.event.ReadEvent;
import com.jihuayu.wordcount.api.event.ReadOverEvent;
import org.greenrobot.eventbus.EventBus; import java.io.BufferedReader;
import java.io.FileReader;
import java.util.List; public class ReadPlug implements Plugin {
@Override
public void getCommandUsage(List<String> info) {
info.add("<file>:read from file");
} @Override
public String getCommandName() {
return "r";
} @Override
public void doCommand(String[]args) {
if(args.length>0){
String str = args[0];
FileReader fr= null;
try {
fr = new FileReader(str); BufferedReader br=new BufferedReader(fr);
String line="";
while ((line=br.readLine())!=null) {
EventBus.getDefault().post(new ReadEvent(line));
}
EventBus.getDefault().post(new ReadOverEvent());
br.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}