You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@gossip.apache.org by "Edward Capriolo (JIRA)" <ji...@apache.org> on 2017/02/13 20:58:41 UTC

[jira] [Assigned] (GOSSIP-56) GossipCore should allow registration of handlers

     [ https://issues.apache.org/jira/browse/GOSSIP-56?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Edward Capriolo reassigned GOSSIP-56:
-------------------------------------

    Assignee: Maxim

> GossipCore should allow registration of handlers
> ------------------------------------------------
>
>                 Key: GOSSIP-56
>                 URL: https://issues.apache.org/jira/browse/GOSSIP-56
>             Project: Gossip
>          Issue Type: New Feature
>            Reporter: Edward Capriolo
>            Assignee: Maxim
>
> Currently GossipCore is a case statement. It would be better if we registered handlers. This would allows users to extend the protocol.
> # We need a hashmap of Class -> Handler
> # When GossipCore.receive(Base message) gets a message it gets the class of the message and looks it up in the hashmap
> # Builder class allows users to specify other handlers
> # Common handlers are enabled by default
> Something like this:
> {noformat}
>   if (base instanceof ShutdownMessage){
>       ShutdownMessage s = (ShutdownMessage) base;
>       GossipDataMessage m = new GossipDataMessage();
>       m.setKey(ShutdownMessage.PER_NODE_KEY);
>       m.setNodeId(s.getNodeId());
>       m.setPayload(base);
>       m.setTimestamp(System.currentTimeMillis());
>       m.setExpireAt(System.currentTimeMillis() + 30L * 1000L);
>       addPerNodeData(m);
>     }
>     if (base instanceof GossipDataMessage) {
>       UdpGossipDataMessage message = (UdpGossipDataMessage) base;
>       addPerNodeData(message);
>     }
> {noformat}
> Replace with:
> {noformat}
> Map<Class,Handler> handlers...
> {
>   handlers.put(ShutdownMessage.class, new ShutdownHandler(GossipCore);
> }
> Handler h = handlers.get(base.class)
> h.invoke(base)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)