feat: receive match record cancel and timeout
This commit is contained in:
parent
3211c642f5
commit
4cb426a478
@ -17,7 +17,7 @@ public class RFile {
|
|||||||
case "match":
|
case "match":
|
||||||
String code = UUID.randomUUID() + "-" + UUID.randomUUID();
|
String code = UUID.randomUUID() + "-" + UUID.randomUUID();
|
||||||
|
|
||||||
FileSocket.FileRecv fileRecv = new FileSocket.FileRecv(message.data().get("name").asText(), null, null,
|
FileSocket.FileRecv fileRecv = new FileSocket.FileRecv(null, message.data().get("name").asText(), null, null,
|
||||||
System.currentTimeMillis());
|
System.currentTimeMillis());
|
||||||
FileSocket.sessions.put(code, fileRecv);
|
FileSocket.sessions.put(code, fileRecv);
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package fr.titionfire.ffsaf.ws;
|
package fr.titionfire.ffsaf.ws;
|
||||||
|
|
||||||
import io.quarkus.runtime.annotations.RegisterForReflection;
|
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||||
|
import io.quarkus.scheduler.Scheduled;
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.websocket.*;
|
import jakarta.websocket.*;
|
||||||
import jakarta.websocket.server.PathParam;
|
import jakarta.websocket.server.PathParam;
|
||||||
@ -22,12 +23,31 @@ public class FileSocket {
|
|||||||
@ConfigProperty(name = "upload_dir")
|
@ConfigProperty(name = "upload_dir")
|
||||||
String media;
|
String media;
|
||||||
|
|
||||||
|
@Scheduled(every = "10s")
|
||||||
|
void increment() {
|
||||||
|
sessions.forEach((key, value) -> {
|
||||||
|
if (System.currentTimeMillis() - value.time > 60000) {
|
||||||
|
closeAndDelete(value);
|
||||||
|
if (value.session != null && value.session.isOpen()) {
|
||||||
|
try {
|
||||||
|
value.session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "Timeout"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
StringWriter errors = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(errors));
|
||||||
|
logger.error(errors.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sessions.remove(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@OnOpen
|
@OnOpen
|
||||||
public void onOpen(Session session, @PathParam("code") String code) {
|
public void onOpen(Session session, @PathParam("code") String code) {
|
||||||
try {
|
try {
|
||||||
if (sessions.containsKey(code)) {
|
if (sessions.containsKey(code)) {
|
||||||
FileRecv fileRecv = sessions.get(code);
|
FileRecv fileRecv = sessions.get(code);
|
||||||
fileRecv.file = new File(media, "record/" + fileRecv.name);;
|
fileRecv.file = new File(media, "record/" + fileRecv.name);
|
||||||
fileRecv.fos = new FileOutputStream(fileRecv.file, false);
|
fileRecv.fos = new FileOutputStream(fileRecv.file, false);
|
||||||
logger.info("Start reception of file: " + fileRecv.file.getAbsolutePath());
|
logger.info("Start reception of file: " + fileRecv.file.getAbsolutePath());
|
||||||
} else {
|
} else {
|
||||||
@ -54,37 +74,45 @@ public class FileSocket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.info("File received: " + fileRecv.file.getAbsolutePath());
|
logger.info("File received: " + fileRecv.file.getAbsolutePath());
|
||||||
}
|
|
||||||
sessions.remove(code);
|
sessions.remove(code);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OnError
|
@OnError
|
||||||
public void onError(Session session, @PathParam("code") String code, Throwable throwable) {
|
public void onError(Session session, @PathParam("code") String code, Throwable throwable) {
|
||||||
if (sessions.containsKey(code)) {
|
if (sessions.containsKey(code)) {
|
||||||
FileRecv fileRecv = sessions.get(code);
|
closeAndDelete(sessions.get(code));
|
||||||
|
sessions.remove(code);
|
||||||
|
}
|
||||||
|
logger.error("Error on file reception: " + throwable.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@OnMessage
|
||||||
|
public void onMessage(String message, @PathParam("code") String code) {
|
||||||
|
if (message.equals("cancel")) {
|
||||||
|
if (sessions.containsKey(code)) {
|
||||||
|
closeAndDelete(sessions.get(code));
|
||||||
|
sessions.remove(code);
|
||||||
|
}
|
||||||
|
logger.error("Error file " + code + " are cancel by the client");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeAndDelete(FileRecv fileRecv) {
|
||||||
if (fileRecv.fos != null) {
|
if (fileRecv.fos != null) {
|
||||||
try {
|
try {
|
||||||
fileRecv.fos.close();
|
fileRecv.fos.close();
|
||||||
if (fileRecv.file.exists()) {
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
fileRecv.file.delete();
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
StringWriter errors = new StringWriter();
|
StringWriter errors = new StringWriter();
|
||||||
e.printStackTrace(new PrintWriter(errors));
|
e.printStackTrace(new PrintWriter(errors));
|
||||||
logger.error(errors.toString());
|
logger.error(errors.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (fileRecv.file.exists()) {
|
||||||
|
//noinspection ResultOfMethodCallIgnored
|
||||||
|
fileRecv.file.delete();
|
||||||
}
|
}
|
||||||
sessions.remove(code);
|
|
||||||
logger.error("Error on file reception: " + throwable.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@OnMessage
|
|
||||||
public void onMessage(String message, @PathParam("code") String code) {
|
|
||||||
System.out.println("Received: " + message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnMessage
|
@OnMessage
|
||||||
@ -104,6 +132,7 @@ public class FileSocket {
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@RegisterForReflection
|
@RegisterForReflection
|
||||||
public static class FileRecv {
|
public static class FileRecv {
|
||||||
|
Session session;
|
||||||
String name;
|
String name;
|
||||||
File file;
|
File file;
|
||||||
FileOutputStream fos;
|
FileOutputStream fos;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user