org.eclipse.leshan.client.demo.MyLocation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leshan-client-demo Show documentation
Show all versions of leshan-client-demo Show documentation
A demonstration client built upon the Leshan client.
package org.eclipse.leshan.client.demo;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Random;
import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
import org.eclipse.leshan.client.servers.ServerIdentity;
import org.eclipse.leshan.core.model.ObjectModel;
import org.eclipse.leshan.core.response.ReadResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyLocation extends BaseInstanceEnabler {
private static final Logger LOG = LoggerFactory.getLogger(MyLocation.class);
private static final List supportedResources = Arrays.asList(0, 1, 5);
private static final Random RANDOM = new Random();
private float latitude;
private float longitude;
private float scaleFactor;
private Date timestamp;
public MyLocation() {
this(null, null, 1.0f);
}
public MyLocation(Float latitude, Float longitude, float scaleFactor) {
if (latitude != null) {
this.latitude = latitude + 90f;
} else {
this.latitude = RANDOM.nextInt(180);
}
if (longitude != null) {
this.longitude = longitude + 180f;
} else {
this.longitude = RANDOM.nextInt(360);
}
this.scaleFactor = scaleFactor;
timestamp = new Date();
}
@Override
public ReadResponse read(ServerIdentity identity, int resourceid) {
LOG.info("Read on Location resource /{}/{}/{}", getModel().id, getId(), resourceid);
switch (resourceid) {
case 0:
return ReadResponse.success(resourceid, getLatitude());
case 1:
return ReadResponse.success(resourceid, getLongitude());
case 5:
return ReadResponse.success(resourceid, getTimestamp());
default:
return super.read(identity, resourceid);
}
}
public void moveLocation(String nextMove) {
switch (nextMove.charAt(0)) {
case 'w':
moveLatitude(1.0f);
LOG.info("Move to North {}/{}", getLatitude(), getLongitude());
break;
case 'a':
moveLongitude(-1.0f);
LOG.info("Move to East {}/{}", getLatitude(), getLongitude());
break;
case 's':
moveLatitude(-1.0f);
LOG.info("Move to South {}/{}", getLatitude(), getLongitude());
break;
case 'd':
moveLongitude(1.0f);
LOG.info("Move to West {}/{}", getLatitude(), getLongitude());
break;
}
}
private void moveLatitude(float delta) {
latitude = latitude + delta * scaleFactor;
timestamp = new Date();
fireResourcesChange(0, 5);
}
private void moveLongitude(float delta) {
longitude = longitude + delta * scaleFactor;
timestamp = new Date();
fireResourcesChange(1, 5);
}
public float getLatitude() {
return latitude - 90.0f;
}
public float getLongitude() {
return longitude - 180.f;
}
public Date getTimestamp() {
return timestamp;
}
@Override
public List getAvailableResourceIds(ObjectModel model) {
return supportedResources;
}
}