Skip to content

a small framework to dispatch messages to multi-level message handlers and thus avoid long swtich-cases

Notifications You must be signed in to change notification settings

Mozi-Song/MessageDispatcherFramework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MessageDispatcherFramework

A small framework to dispatch messages to multi-level message handlers and thus avoid long swtich-cases

Code & Design credit: Dailey Dai

Before this framework:

switch(messageID){
  case 0x01: doSomething();  break;
  case 0x02: doAnotherThing(); break;
  case 0x03: 
    byte subID = getSubID();
    switch(subID)
    case 0x01: process1In3(); break;
    case 0x02: process2In3(); break;
    ...
    break;
  ...
}

Using this framework:

  private HandlerDispatcher<String> handlerDispatcher;
  
  void init(){
        handlerDispatcher = new HandlerDispatcherImpl<>();
        handlerDispatcher.load(this); 
  }
  
  public void onReceivedMessage(String data) {
      handlerDispatcher.getHandler(data.charAt(0)+"").process(data); 
  }

  final Supplier<HandlerDispatcher<String>> supplier = () -> handlerDispatcher;

  @Mapped("1")
  final CustomizedHandler A = (data) -> { log("A"); };
  
  @Mapped("2") 
  final ParentHandler<String> B = ParentHandler.build(supplier, (data) -> (data.charAt(1)+""));
  
  @Parent("B")
  @Mapped("1") 
  final ParentHandler<String> B1 = ParentHandler.build(supplier, (data) -> (data.charAt(2)+""));
  
  @Parent("A")
  @Mapped("1") 
  final CustomizedHandler A1 = (data) -> { log("A1"); };
  
  @Parent("B1")
  @Mapped("1") 
  final CustomizedHandler B11 = (data) -> { log("B11"); };

A more detailed documentation see here (Chinese).

About

a small framework to dispatch messages to multi-level message handlers and thus avoid long swtich-cases

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages