/*******************************************************************************
* Copyright (c) 2016 Sierra Wireless and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.html.
*
* Contributors:
* Sierra Wireless - initial API and implementation
*******************************************************************************/
package org.eclipse.leshan.server.cluster;
import java.util.Collection;
import org.eclipse.leshan.core.observation.Observation;
import org.eclipse.leshan.server.cluster.serialization.RegistrationSerDes;
import org.eclipse.leshan.server.cluster.serialization.RegistrationUpdateSerDes;
import org.eclipse.leshan.server.registration.Registration;
import org.eclipse.leshan.server.registration.RegistrationListener;
import org.eclipse.leshan.server.registration.RegistrationUpdate;
import com.eclipsesource.json.JsonObject;
import redis.clients.jedis.Jedis;
import redis.clients.util.Pool;
/**
* A Registration registry Listener which publish registration event on Redis channel.
*/
public class RedisRegistrationEventPublisher implements RegistrationListener {
private static String REGISTER_EVENT = "LESHAN_REG_NEW";
private static String UPDATE_EVENT = "LESHAN_REG_UP";
private static String DEREGISTER_EVENT = "LESHAN_REG_DEL";
private Pool<Jedis> pool;
public RedisRegistrationEventPublisher(Pool<Jedis> p) {
this.pool = p;
}
@Override
public void registered(Registration registration) {
String payload = RegistrationSerDes.sSerialize(registration);
try (Jedis j = pool.getResource()) {
j.publish(REGISTER_EVENT, payload);
}
}
@Override
public void updated(RegistrationUpdate update, Registration updatedRegistration,
Registration previousRegistration) {
JsonObject value = new JsonObject();
value.add("regUpdate", RegistrationUpdateSerDes.jSerialize(update));
value.add("regUpdated", RegistrationSerDes.jSerialize(updatedRegistration));
try (Jedis j = pool.getResource()) {
j.publish(UPDATE_EVENT, value.toString());
}
}
@Override
public void unregistered(Registration registration, Collection<Observation> observations, boolean expired) {
String payload = RegistrationSerDes.sSerialize(registration);
try (Jedis j = pool.getResource()) {
j.publish(DEREGISTER_EVENT, payload);
}
}
}