package cgl.iotcloud.core.master;
import cgl.iotcloud.core.api.thrift.*;
import cgl.iotcloud.core.master.events.MSensorSiteEvent;
import cgl.iotcloud.core.master.events.MSiteEvent;
import cgl.iotcloud.core.master.thrift.TMasterService;
import cgl.iotcloud.core.sensorsite.SensorState;
import com.google.common.eventbus.EventBus;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MasterServiceHandler implements TMasterService.Iface {
private static Logger LOG = LoggerFactory.getLogger(MasterServiceHandler.class);
private EventBus siteEventBus;
public MasterServiceHandler(EventBus siteEventBus) {
this.siteEventBus = siteEventBus;
}
@Override
public TResponse registerSite(TSite request) throws TException {
// notify the monitor about the new site
MSiteEvent siteEvent = new MSiteEvent(request.getSiteId(), SiteState.ADDED, request);
siteEventBus.post(siteEvent);
TResponse registerSiteResponse = new TResponse();
registerSiteResponse.setState(TResponseState.SUCCESS);
return registerSiteResponse;
}
@Override
public TResponse unRegisterSite(TSite site) throws TException {
String id = site.getSiteId();
// notify the monitor about the new site
MSiteEvent siteEvent = new MSiteEvent(id, SiteState.REMOVED);
siteEventBus.post(siteEvent);
TResponse registerSiteResponse = new TResponse();
registerSiteResponse.setState(TResponseState.SUCCESS);
return registerSiteResponse;
}
@Override
public TResponse registerSensor(String siteId, TSensor sensor) throws TException {
String id = sensor.getName();
LOG.info("Request received for registering a sensor from site {} with sensor id {}", siteId, id);
MSensorSiteEvent updateEvent = new MSensorSiteEvent(id, SensorState.DEPLOY, siteId);
updateEvent.setSensor(sensor);
siteEventBus.post(updateEvent);
return new TResponse(TResponseState.SUCCESS, "successfully added");
}
@Override
public TResponse unRegisterSensor(String siteId, String id) throws TException {
LOG.info("Request received for un-registering a sensor from site {} with sensor id {}", siteId, id);
MSensorSiteEvent updateEvent = new MSensorSiteEvent(id, SensorState.UN_DEPLOY, siteId);
siteEventBus.post(updateEvent);
return new TResponse(TResponseState.SUCCESS, "successfully un deployed");
}
@Override
public TResponse updateSensor(String siteId, TSensor sensor) throws TException {
String id = sensor.getName();
LOG.info("Request received for updating a sensor from site {} with sensor id {}", siteId, id);
MSensorSiteEvent updateEvent;
if (sensor.getState() == TSensorState.DEPLOY) {
updateEvent = new MSensorSiteEvent(id, SensorState.DEPLOY, siteId);
} else if (sensor.getState() == TSensorState.ACTIVE) {
updateEvent = new MSensorSiteEvent(id, SensorState.ACTIVATE, siteId);
} else if (sensor.getState() == TSensorState.DE_ACTIVATE) {
updateEvent = new MSensorSiteEvent(id, SensorState.DEACTIVATE, siteId);
} else if (sensor.getState() == TSensorState.UN_DEPLOY) {
updateEvent = new MSensorSiteEvent(id, SensorState.UN_DEPLOY, siteId);
} else {
updateEvent = new MSensorSiteEvent(id, SensorState.UPDATE, siteId);
}
updateEvent.setSensor(sensor);
siteEventBus.post(updateEvent);
return new TResponse(TResponseState.SUCCESS, "successfully un deployed");
}
}