mirror of
https://github.com/Vale54321/schafkopf-bot.git
synced 2025-12-19 04:59:34 +01:00
Nfc reader (#2)
* added pn532.jar * added pn532 * changed KartenLeserer * added leser to BackendServer * added welcheKarteSticht methode * added welcheKarteSticht methode * added sendKarte tofrontend when scanned * added build config * installed pn532 as local dependency * added local dependency to pom * edited KartenLeser * edited KartenLeser * edited KartenLeser * edited KartenLeser * edited pom * edited pom * edited pom * deleted unused files * added led * added led * added right dot env path * added right dot env path * added waitForScanMethod * added waitForScanMethod * added waitForScanMethod * added waitForScanMethod * added waitForScanMethod * added waitForScanMethod * removed unused print statements * removed unused imports * removed pn532 jar * removed pn532 jar
This commit is contained in:
committed by
GitHub
parent
e63f18f4b7
commit
7f2cf98607
@@ -13,6 +13,7 @@ import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerI
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlets.CrossOriginFilter;
|
||||
@@ -33,17 +34,25 @@ public class BackendServer
|
||||
private final ServerConnector connector;
|
||||
|
||||
private final Schafkopf schafkopfGame;
|
||||
private final KartenLeser nfcLeser;
|
||||
private CountDownLatch nfcLatch = new CountDownLatch(1);
|
||||
|
||||
private Boolean readingMode = false;
|
||||
private String uidString = "";
|
||||
|
||||
public BackendServer()
|
||||
{
|
||||
Dotenv dotenv = Dotenv.configure().load();
|
||||
Dotenv dotenv = Dotenv.configure().directory("./").load();
|
||||
server = new Server();
|
||||
InetSocketAddress address = new InetSocketAddress(dotenv.get("VITE_APP_WEBSOCKET_IP"), 8080);
|
||||
connector = new ServerConnector(server);
|
||||
connector.setHost(address.getHostName());
|
||||
connector.setPort(address.getPort());
|
||||
server.addConnector(connector);
|
||||
|
||||
schafkopfGame = new Schafkopf(this);
|
||||
nfcLeser = new KartenLeser(this);
|
||||
|
||||
// Setup the basic application "context" for this application at "/"
|
||||
// This is also known as the handler tree (in jetty speak)
|
||||
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
||||
@@ -133,4 +142,23 @@ public class BackendServer
|
||||
public void showFarbe() {
|
||||
schafkopfGame.showFarbe();
|
||||
}
|
||||
public void nfcGelesen(String uidString) {
|
||||
if(this.uidString.equals(uidString)){
|
||||
return;
|
||||
}
|
||||
if(!this.readingMode){
|
||||
return;
|
||||
}
|
||||
|
||||
this.uidString = uidString;
|
||||
nfcLatch.countDown();
|
||||
}
|
||||
|
||||
public String waitForCardScan() throws InterruptedException {
|
||||
this.readingMode = true;
|
||||
nfcLatch.await();
|
||||
this.readingMode = false;
|
||||
nfcLatch = new CountDownLatch(1);
|
||||
return this.uidString;
|
||||
}
|
||||
}
|
||||
72
src/main/java/org/example/KartenLeser.java
Normal file
72
src/main/java/org/example/KartenLeser.java
Normal file
@@ -0,0 +1,72 @@
|
||||
package org.example;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.pi4j.Pi4J;
|
||||
import com.pi4j.io.i2c.I2C;
|
||||
import mk.hsilomedus.pn532.*;
|
||||
import mk.hsilomedus.pn532.Pn532SamThread.Pn532SamThreadListener;
|
||||
|
||||
public final class KartenLeser {
|
||||
|
||||
private static BackendServer server;
|
||||
|
||||
public KartenLeser(BackendServer server){
|
||||
this.server = server;
|
||||
|
||||
new Thread(() -> {
|
||||
|
||||
new KartenListener().run();
|
||||
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static final void main(String[] args) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
private static class KartenListener implements Pn532SamThreadListener {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
Pn532SamThread<I2C> i2cThread = new Pn532SamThread<>(this, new Pn532I2c());
|
||||
|
||||
|
||||
public void run() {
|
||||
Pn532ContextHelper.initialize();
|
||||
i2cThread.start();
|
||||
}
|
||||
|
||||
public void close() {
|
||||
closeThread(i2cThread);
|
||||
Pn532ContextHelper.shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveMessage(String message) {
|
||||
System.out.println(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uidReceived(String displayName, byte[] uid) {
|
||||
server.nfcGelesen(Pn532SamThreadListener.getUidString(uid) );
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private void closeThread(Pn532SamThread thread) {
|
||||
if (thread != null && thread.isAlive()) {
|
||||
thread.close();
|
||||
|
||||
try {
|
||||
thread.join();
|
||||
} catch (InterruptedException e) {
|
||||
System.out.println("Error closing thread: " + e.getMessage());
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,6 +76,89 @@ public class KartenUtil {
|
||||
return cardName;
|
||||
}
|
||||
|
||||
public static String getIdOfUid(String uid){
|
||||
switch (uid){
|
||||
case "04A56BB4780000":
|
||||
return "eichel_7";
|
||||
case "04A46BB4780000":
|
||||
return "eichel_8";
|
||||
case "04A26BB4780000":
|
||||
return "eichel_9";
|
||||
case "04A16BB4780000":
|
||||
return "eichel_x";
|
||||
case "049E6BB4780000":
|
||||
return "eichel_k";
|
||||
case "04A86BB4780000":
|
||||
return "eichel_a";
|
||||
case "04A06BB4780000":
|
||||
return "eichel_u";
|
||||
case "049F6BB4780000":
|
||||
return "eichel_o";
|
||||
|
||||
case "04F26BB4780000":
|
||||
return "blatt_7";
|
||||
case "04A76BB4780000":
|
||||
return "blatt_8";
|
||||
case "049B6BB4780000":
|
||||
return "blatt_9";
|
||||
case "04996BB4780000":
|
||||
return "blatt_x";
|
||||
case "041CD2C2126F81":
|
||||
return "blatt_k";
|
||||
case "04A96BB4780000":
|
||||
return "blatt_a";
|
||||
case "049A6BB4780000":
|
||||
return "blatt_u";
|
||||
case "049D6BB4780000":
|
||||
return "blatt_o";
|
||||
|
||||
case "04936BB4780000":
|
||||
return "schell_7";
|
||||
case "04F697C2126F80":
|
||||
return "schell_8";
|
||||
case "04946BB4780000":
|
||||
return "schell_9";
|
||||
case "04956BB4780000":
|
||||
return "schell_x";
|
||||
case "04986BB4780000":
|
||||
return "schell_k";
|
||||
case "04AA6BB4780000":
|
||||
return "schell_a";
|
||||
case "04966BB4780000":
|
||||
return "schell_u";
|
||||
case "04976BB4780000":
|
||||
return "schell_o";
|
||||
|
||||
case "04F36BB4780000":
|
||||
return "herz_7";
|
||||
case "04B06BB4780000":
|
||||
return "herz_8";
|
||||
case "04AF6BB4780000":
|
||||
return "herz_9";
|
||||
case "04AE6BB4780000":
|
||||
return "herz_x";
|
||||
case "04AB6BB4780000":
|
||||
return "herz_k";
|
||||
case "049C6BB4780000":
|
||||
return "herz_a";
|
||||
case "04AD6BB4780000":
|
||||
return "herz_u";
|
||||
case "04AC6BB4780000":
|
||||
return "herz_o";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Karte getKarteById(String id){
|
||||
List<Karte> kartenList = initializeSchafKopfCardDeck();
|
||||
for (Karte karte : kartenList) {
|
||||
if (karte.getId().equalsIgnoreCase(id)) {
|
||||
return karte;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void removeCards(List<Karte> allCards, List<Karte> cardsToRemove) {
|
||||
allCards.removeAll(cardsToRemove);
|
||||
}
|
||||
|
||||
@@ -78,7 +78,6 @@ public class Schafkopf {
|
||||
String karteJson = gson.toJson(karte);
|
||||
server.sendMessageToAllFrontendEndpoints(karteJson);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void showFarbe() {
|
||||
|
||||
Reference in New Issue
Block a user