package net.lvsq.jgossip.handler;

import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import net.lvsq.jgossip.core.GossipManager;
import net.lvsq.jgossip.model.Ack2Message;
import net.lvsq.jgossip.model.AckMessage;
import net.lvsq.jgossip.model.GossipDigest;
import net.lvsq.jgossip.model.GossipMember;
import net.lvsq.jgossip.model.HeartbeatState;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AckMessageHandler implements MessageHandler {
    @Override
    public void handle(String cluster, String data, String from) {
        JsonObject dj = new JsonObject(data);
        AckMessage ackMessage = dj.mapTo(AckMessage.class);

        List<GossipDigest> olders = ackMessage.getOlders();
        Map<GossipMember, HeartbeatState> newers = ackMessage.getNewers();

        //update local state
        if (newers.size() > 0) {
            GossipManager.getInstance().apply2LocalState(newers);
        }

        Map<GossipMember, HeartbeatState> deltaEndpoints = new HashMap<>();
        if (olders != null) {
            for (GossipDigest d : olders) {
                GossipMember member = GossipManager.getInstance().createByDigest(d);
                HeartbeatState hb = GossipManager.getInstance().getEndpointMembers().get(member);
                if (hb != null) {
                    deltaEndpoints.put(member, hb);
                }
            }
        }

        if (!deltaEndpoints.isEmpty()) {
            Ack2Message ack2Message = new Ack2Message(deltaEndpoints);
            Buffer ack2Buffer = GossipManager.getInstance().encodeAck2Message(ack2Message);
            if (from != null) {
                String[] host = from.split(":");
                GossipManager.getInstance().getSettings().getMsgService().sendMsg(host[0], Integer.valueOf(host[1]), ack2Buffer);
            }
        }
    }
}

@@ -1,8 +1,645 @@
+// Copyright (c) 2017 The jgossip Authors. All rights reserved.%0D%0A//%0D%0A// Licensed under the Apache License, Version 2.0 (the %22License%22);%0D%0A// you may not use this file except in compliance with the License.%0D%0A// You may obtain a copy of the License at%0D%0A//%0D%0A//     http://www.apache.org/licenses/LICENSE-2.0%0D%0A//%0D%0A// Unless required by applicable law or agreed to in writing, software%0D%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0D%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0D%0A// See the License for the specific language governing permissions and%0D%0A// limitations under the License.%0D%0A%0D%0A
 package 
@@ -1088,16 +1088,41 @@
 l.Map;%0D%0A
+/**%0D%0A * @author lvsq%0D%0A */
 %0D%0Apublic

Update AckMessageHandler.java