Skip to content

Commit

Permalink
add hub event, add serialization factory
Browse files Browse the repository at this point in the history
  • Loading branch information
creepid committed Mar 29, 2018
1 parent 6235bf1 commit 8f6343b
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.core.HazelcastInstance;
import net.easysmarthouse.distribution.shared.serialization.SerializationFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
Expand All @@ -18,6 +19,14 @@ public ClientConfig clientConfig() {
ClientConfig clientConfig = new ClientConfig();
//unlimited connections (try to reconnect)
clientConfig.getNetworkConfig().setConnectionAttemptLimit(0);

//Client serialization factory
clientConfig.getSerializationConfig()
.addPortableFactory(
SerializationFactory.SERIALIZATION_FACTORY_ID,
new SerializationFactory()
);

return clientConfig;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public void addEvents(Collection<SensorEvent> events) {
eventsMap.putAll(eventsLocalMap);
}

public Double getAverageSensorValue(Long deviceId, Date start, Date end) {
public Double getAverageSensorValue(Long deviceId , Date start, Date end) {
SensorValueSupplier supplier = new SensorValueSupplier(deviceId, start, end);
Aggregation<Long, Double, Double> aggregation = Aggregations.doubleAvg();
return eventsMap.aggregate(supplier, aggregation);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
package net.easysmarthouse.distribution.shared;

import com.hazelcast.nio.serialization.PortableReader;
import com.hazelcast.nio.serialization.PortableWriter;
import com.hazelcast.nio.serialization.VersionedPortable;
import net.easysmarthouse.distribution.shared.serialization.SerializationFactory;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import javax.persistence.Transient;
import java.io.IOException;
import java.util.Objects;

@Entity
@Table
public class Device implements Serializable {
public class Device implements VersionedPortable {

public static final int CLASS_ID = 1;
public static final int VERSION_ID = 1;

private static final long serialVersionUID = 4680916086924146017L;
public static final String ID_FIELD = "id";
public static final String LABEL_FIELD = "label";
public static final String ADDRESS_FIELD = "address";
public static final String DEVICE_TYPE_FIELD = "deviceType";
public static final String DESCRIPTION_FIELD = "description";
public static final String ENABLE_FIELD = "enable";
public static final String STATE_FIELD = "state";

private Long id;
private String label;
Expand All @@ -35,6 +48,64 @@ public Device(Long id, String label, String address, DeviceType deviceType, Stri
this.description = description;
}

@Transient
@Override
public int getFactoryId() {
return SerializationFactory.SERIALIZATION_FACTORY_ID;
}

@Transient
@Override
public int getClassId() {
return CLASS_ID;
}

@Transient
@Override
public int getClassVersion() {
return VERSION_ID;
}

@Override
public void writePortable(PortableWriter writer) throws IOException {
writer.writeLong(ID_FIELD, id);
writer.writeUTF(LABEL_FIELD, label);
writer.writeUTF(ADDRESS_FIELD, address);
writer.writeUTF(DEVICE_TYPE_FIELD, deviceType.name());
if (description != null) {
writer.writeUTF(DESCRIPTION_FIELD, description);
}
writer.writeBoolean(ENABLE_FIELD, enable);
if (state != null) {
writer.writeUTF(STATE_FIELD, state);
}
}

@Override
public void readPortable(PortableReader reader) throws IOException {
if (reader.hasField(ID_FIELD)) {
id = reader.readLong(ID_FIELD);
}
if (reader.hasField(LABEL_FIELD)) {
label = reader.readUTF(LABEL_FIELD);
}
if (reader.hasField(ADDRESS_FIELD)) {
address = reader.readUTF(ADDRESS_FIELD);
}
if (reader.hasField(DEVICE_TYPE_FIELD)) {
deviceType = DeviceType.valueOf(reader.readUTF(DEVICE_TYPE_FIELD));
}
if (reader.hasField(DESCRIPTION_FIELD)) {
description = reader.readUTF(DESCRIPTION_FIELD);
}
if (reader.hasField(ENABLE_FIELD)) {
enable = reader.readBoolean(ENABLE_FIELD);
}
if (reader.hasField(STATE_FIELD)) {
state = reader.readUTF(STATE_FIELD);
}
}

@Id
public Long getId() {
return id;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.easysmarthouse.distribution.shared.serialization;

import com.hazelcast.nio.serialization.Portable;
import com.hazelcast.nio.serialization.PortableFactory;
import net.easysmarthouse.distribution.shared.Device;

public class SerializationFactory implements PortableFactory {

public static final int SERIALIZATION_FACTORY_ID = 1;

@Override
public Portable create(int classId) {
switch (classId) {
case Device.CLASS_ID:
return new Device();
default:
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.hazelcast.config.*;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import net.easysmarthouse.distribution.shared.serialization.SerializationFactory;
import net.easysmarthouse.distribution.storage.node.listener.HubListener;
import net.easysmarthouse.distribution.storage.node.store.DeviceCommandQueueStore;
import net.easysmarthouse.distribution.storage.node.store.DeviceMapStore;
Expand All @@ -29,6 +30,13 @@ public Config config(DeviceMapStore deviceMapStore, DeviceCommandQueueStore devi
HubEventQueueStore hubEventQueueStore, HubListener hubListener) throws Exception {
Config config = new Config();

//Serialization factory
config.getSerializationConfig()
.addPortableFactory(
SerializationFactory.SERIALIZATION_FACTORY_ID,
new SerializationFactory()
);

//Hub listener
ListenerConfig listenerConfig = new ListenerConfig();
listenerConfig.setImplementation(hubListener);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
import org.springframework.stereotype.Repository;

@Repository
public interface HubEventDao extends CrudRepository<HubEvent, Long> {
public interface HubEventDao extends CrudRepository<HubEvent, Long> {
}

0 comments on commit 8f6343b

Please sign in to comment.