package org.eclipse.leshan.client.demo;
import java.util.Date;
import java.util.Random;
import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
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 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(int resourceid) {
LOG.info("Read on Location Resource " + 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(resourceid);
}
}
public void moveLocation(String nextMove) {
switch (nextMove.charAt(0)) {
case 'w':
moveLatitude(1.0f);
break;
case 'a':
moveLongitude(-1.0f);
break;
case 's':
moveLatitude(-1.0f);
break;
case 'd':
moveLongitude(1.0f);
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;
}
}