new thunder provider
old one is spotty
This commit is contained in:
parent
fc467c9b94
commit
dcda0b841a
10 changed files with 131 additions and 91 deletions
21
release.properties
Normal file
21
release.properties
Normal file
|
@ -0,0 +1,21 @@
|
|||
#release configuration
|
||||
#Sun Jun 02 17:52:56 CEST 2024
|
||||
completedPhase=check-poms
|
||||
exec.pomFileName=pom.xml
|
||||
exec.snapshotReleasePluginAllowed=false
|
||||
pinExternals=false
|
||||
preparationGoals=clean verify
|
||||
project.scm.eu.m724\:wtapi.developerConnection=scm\:git\:git@git.724.rocks\:Minecon724/wtapi.git
|
||||
project.scm.eu.m724\:wtapi.tag=HEAD
|
||||
projectVersionPolicyConfig=<projectVersionPolicyConfig>${projectVersionPolicyConfig}</projectVersionPolicyConfig>\n
|
||||
projectVersionPolicyId=default
|
||||
pushChanges=true
|
||||
releaseStrategyId=default
|
||||
remoteTagging=true
|
||||
scm.branchCommitComment=@{prefix} prepare branch @{releaseLabel}
|
||||
scm.commentPrefix=[maven-release-plugin]
|
||||
scm.developmentCommitComment=@{prefix} prepare for next development iteration
|
||||
scm.releaseCommitComment=@{prefix} prepare release @{releaseLabel}
|
||||
scm.rollbackCommitComment=@{prefix} rollback the release of @{releaseLabel}
|
||||
scm.tagNameFormat=@{project.artifactId}-@{project.version}
|
||||
scm.url=scm\:git\:git@git.724.rocks\:Minecon724/wtapi.git
|
|
@ -1,6 +1,5 @@
|
|||
package eu.m724.wtapi.thunder;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
package eu.m724.wtapi.thunder.impl.lightningmaps;
|
||||
package eu.m724.wtapi.thunder.impl.blitzortung;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.DelayQueue;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
import eu.m724.wtapi.object.Weather;
|
||||
import eu.m724.wtapi.provider.exception.ProviderException;
|
||||
import eu.m724.wtapi.thunder.ThunderProvider;
|
||||
|
||||
public class LightningMapsProvider extends ThunderProvider {
|
||||
LMWebsocketClient websocketClient = new LMWebsocketClient(this);
|
||||
public class BlitzortungProvider extends ThunderProvider {
|
||||
BlitzortungWebsocketClient websocketClient = new BlitzortungWebsocketClient(this);
|
||||
ArrayList<Consumer<Coordinates>> strikeHandlers = new ArrayList<>();
|
||||
CopyOnWriteArrayList<TimedStrike> strikes = new CopyOnWriteArrayList<>(); // TODO optimize?
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
package eu.m724.wtapi.thunder.impl.blitzortung;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
import org.java_websocket.handshake.ServerHandshake;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
|
||||
class BlitzortungWebsocketClient extends WebSocketClient {
|
||||
BlitzortungProvider lightningMapsProvider;
|
||||
|
||||
private static URI[] uris = new URI[] {
|
||||
URI.create("wss://ws1.blitzortung.org/"),
|
||||
URI.create("wss://ws7.blitzortung.org/"),
|
||||
URI.create("wss://ws8.blitzortung.org/")
|
||||
};
|
||||
private int currentUri = 0;
|
||||
|
||||
public BlitzortungWebsocketClient(BlitzortungProvider lightningMapsProvider) {
|
||||
super(uris[0]);
|
||||
this.lightningMapsProvider = lightningMapsProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(ServerHandshake handshakedata) {
|
||||
this.send("{\"a\":111}");
|
||||
}
|
||||
|
||||
public static String decode(String b) { // lzw
|
||||
Map<Integer, String> e = new HashMap<>();
|
||||
char[] d = b.toCharArray();
|
||||
String c = String.valueOf(d[0]), f = c;
|
||||
List<String> g = new ArrayList<>();
|
||||
g.add(c);
|
||||
int h = 256, o = h;
|
||||
|
||||
for (int i = 1; i < d.length; i++) {
|
||||
int a = d[i];
|
||||
String aStr = (h > a) ? String.valueOf(d[i]) : e.getOrDefault(a, f + c);
|
||||
g.add(aStr);
|
||||
c = String.valueOf(aStr.charAt(0));
|
||||
e.put(o++, f + c);
|
||||
f = aStr;
|
||||
}
|
||||
|
||||
return String.join("", g);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(String message) {
|
||||
try {
|
||||
JsonObject json =
|
||||
JsonParser.parseString(decode(message))
|
||||
.getAsJsonObject();
|
||||
|
||||
long time = json.getAsJsonPrimitive("time").getAsLong() / 1000000;
|
||||
double lat = json.getAsJsonPrimitive("lat").getAsDouble();
|
||||
double lon = json.getAsJsonPrimitive("lon").getAsDouble();
|
||||
|
||||
Coordinates coordinates = new Coordinates(lat, lon);
|
||||
lightningMapsProvider.submitStrike(coordinates, time);
|
||||
} catch (JsonSyntaxException e) {
|
||||
// ignore invalid json
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(int code, String reason, boolean remote) {
|
||||
System.out.printf("%s Closed: %d %s\n", this.uri, code, reason);
|
||||
this.uri = uris[++currentUri % uris.length];
|
||||
lightningMapsProvider.reconnect();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Exception ex) {
|
||||
this.uri = uris[++currentUri % uris.length];
|
||||
lightningMapsProvider.reconnect();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,16 @@
|
|||
package eu.m724.wtapi.thunder.impl.lightningmaps;
|
||||
package eu.m724.wtapi.thunder.impl.blitzortung;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
|
||||
public class TimedStrike {
|
||||
/**
|
||||
* unix millis
|
||||
*/
|
||||
public long timestamp;
|
||||
|
||||
/**
|
||||
* coordinates of strike
|
||||
*/
|
||||
public Coordinates coordinates;
|
||||
|
||||
public TimedStrike(long timestamp, Coordinates coordinates) {
|
|
@ -1,71 +0,0 @@
|
|||
package eu.m724.wtapi.thunder.impl.lightningmaps;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
import org.java_websocket.handshake.ServerHandshake;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
|
||||
class LMWebsocketClient extends WebSocketClient {
|
||||
LightningMapsProvider lightningMapsProvider;
|
||||
|
||||
private static URI[] uris = new URI[] {
|
||||
URI.create("wss://live.lightningmaps.org/"),
|
||||
URI.create("wss://live2.lightningmaps.org/")
|
||||
};
|
||||
private int currentUri = 0;
|
||||
|
||||
public LMWebsocketClient(LightningMapsProvider lightningMapsProvider) {
|
||||
super(uris[0]);
|
||||
this.lightningMapsProvider = lightningMapsProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(ServerHandshake handshakedata) {
|
||||
this.send("{\"v\":24,\"i\":{},\"s\":false,\"x\":0,\"w\":4,\"tx\":0,\"tw\":3,\"a\":4,\"z\":2,\"b\":true,\"h\":\"#m=oss;t=3;s=0;o=0;b=;ts=0;z=2;y=45.4601;x=17.5814;d=2;dl=2;dc=0;\",\"l\":5,\"t\":5,\"from_lightningmaps_org\":true,\"p\":[87,309,-72.5,-273.9],\"r\":\"re\"}");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(String message) {
|
||||
try {
|
||||
JsonObject json =
|
||||
JsonParser.parseString(message)
|
||||
.getAsJsonObject();
|
||||
|
||||
if (!json.has("strokes")) return;
|
||||
|
||||
json.getAsJsonArray("strokes").forEach(ele -> {
|
||||
long time = ele.getAsJsonObject().getAsJsonPrimitive("time").getAsLong();
|
||||
double lat = ele.getAsJsonObject().getAsJsonPrimitive("lat").getAsDouble();
|
||||
double lon = ele.getAsJsonObject().getAsJsonPrimitive("lon").getAsDouble();
|
||||
|
||||
Coordinates coordinates = new Coordinates(lat, lon);
|
||||
lightningMapsProvider.submitStrike(coordinates, time);
|
||||
});
|
||||
} catch (JsonSyntaxException e) {
|
||||
// ignore invalid json
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(int code, String reason, boolean remote) {
|
||||
System.out.printf("%s Closed: %d %s\n", this.uri, code, reason);
|
||||
this.uri = uris[++currentUri % 2];
|
||||
lightningMapsProvider.reconnect();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Exception ex) {
|
||||
this.uri = uris[++currentUri % 2];
|
||||
lightningMapsProvider.reconnect();
|
||||
}
|
||||
|
||||
}
|
|
@ -2,8 +2,6 @@ package eu.m724.wtapi.object;
|
|||
|
||||
import org.junit.Test;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
|
||||
public class CoordinateTest {
|
||||
@Test
|
||||
public void testCoordinates() {
|
||||
|
|
|
@ -5,18 +5,19 @@ import java.util.ArrayList;
|
|||
import org.junit.Test;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
import eu.m724.wtapi.thunder.ThunderProvider;
|
||||
import eu.m724.wtapi.thunder.impl.lightningmaps.LightningMapsProvider;
|
||||
import eu.m724.wtapi.thunder.impl.blitzortung.BlitzortungProvider;
|
||||
|
||||
public class LightningMapsTest {
|
||||
public class BlitzortungTest {
|
||||
@Test
|
||||
public void lightningMapsTest() throws InterruptedException {
|
||||
ArrayList<Coordinates> coordinatesList = new ArrayList<>();
|
||||
|
||||
ThunderProvider provider = new LightningMapsProvider();
|
||||
ThunderProvider provider = new BlitzortungProvider();
|
||||
|
||||
provider.registerStrikeHandler(coordinates ->
|
||||
coordinatesList.add(coordinates));
|
||||
provider.registerStrikeHandler(coordinates -> {
|
||||
coordinatesList.add(coordinates);
|
||||
System.out.printf("%f %f\n", coordinates.latitude, coordinates.longitude);
|
||||
});
|
||||
|
||||
provider.init();
|
||||
|
|
@ -6,8 +6,7 @@ import java.util.function.Consumer;
|
|||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
import eu.m724.wtapi.provider.exception.ProviderException;
|
||||
import eu.m724.wtapi.thunder.ThunderProvider;
|
||||
import eu.m724.wtapi.thunder.impl.lightningmaps.TimedStrike;
|
||||
import eu.m724.wtapi.thunder.impl.blitzortung.TimedStrike;
|
||||
|
||||
public class MockThunderProvider extends ThunderProvider {
|
||||
ArrayList<Consumer<Coordinates>> strikeHandlers = new ArrayList<>();
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.ArrayList;
|
|||
import org.junit.Test;
|
||||
|
||||
import eu.m724.wtapi.object.Coordinates;
|
||||
import eu.m724.wtapi.thunder.ThunderProvider;
|
||||
|
||||
public class ThunderProviderTest {
|
||||
@Test
|
||||
|
|
Loading…
Reference in a new issue