feat: receive match record
This commit is contained in:
@@ -6,79 +6,107 @@ import jakarta.websocket.*;
|
||||
import jakarta.websocket.server.PathParam;
|
||||
import jakarta.websocket.server.ServerEndpoint;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@ServerEndpoint("/api/ws/file/{id}")
|
||||
@ServerEndpoint("/api/ws/file/{code}")
|
||||
@ApplicationScoped
|
||||
public class FileSocket {
|
||||
Map<String, FileRecv> sessions = new ConcurrentHashMap<>();
|
||||
private static final Logger logger = Logger.getLogger(FileSocket.class);
|
||||
public static Map<String, FileRecv> sessions = new ConcurrentHashMap<>();
|
||||
|
||||
@ConfigProperty(name = "upload_dir")
|
||||
String media;
|
||||
|
||||
@OnOpen
|
||||
public void onOpen(Session session, @PathParam("id") String id) {
|
||||
public void onOpen(Session session, @PathParam("code") String code) {
|
||||
try {
|
||||
File file = File.createTempFile("safca-", ".tmp");
|
||||
FileRecv fileRecv = new FileRecv(file, new FileOutputStream(file, true), System.currentTimeMillis(),
|
||||
session);
|
||||
System.out.println("File created: " + file.getAbsolutePath());
|
||||
sessions.put(id, fileRecv);
|
||||
if (sessions.containsKey(code)) {
|
||||
FileRecv fileRecv = sessions.get(code);
|
||||
fileRecv.file = new File(media, "record/" + fileRecv.name);;
|
||||
fileRecv.fos = new FileOutputStream(fileRecv.file, false);
|
||||
logger.info("Start reception of file: " + fileRecv.file.getAbsolutePath());
|
||||
} else {
|
||||
session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "File not found"));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
StringWriter errors = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(errors));
|
||||
logger.error(errors.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@OnClose
|
||||
public void onClose(Session session, @PathParam("id") String id) {
|
||||
if (sessions.containsKey(id)) {
|
||||
FileRecv fileRecv = sessions.get(id);
|
||||
public void onClose(Session session, @PathParam("code") String code) {
|
||||
if (sessions.containsKey(code)) {
|
||||
FileRecv fileRecv = sessions.get(code);
|
||||
if (fileRecv.fos != null) {
|
||||
try {
|
||||
fileRecv.fos.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
StringWriter errors = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(errors));
|
||||
logger.error(errors.toString());
|
||||
}
|
||||
}
|
||||
logger.info("File received: " + fileRecv.file.getAbsolutePath());
|
||||
}
|
||||
sessions.remove(id);
|
||||
sessions.remove(code);
|
||||
}
|
||||
|
||||
@OnError
|
||||
public void onError(Session session, @PathParam("id") String id, Throwable throwable) {
|
||||
if (sessions.containsKey(id)) {
|
||||
FileRecv fileRecv = sessions.get(id);
|
||||
public void onError(Session session, @PathParam("code") String code, Throwable throwable) {
|
||||
if (sessions.containsKey(code)) {
|
||||
FileRecv fileRecv = sessions.get(code);
|
||||
if (fileRecv.fos != null) {
|
||||
try {
|
||||
fileRecv.fos.close();
|
||||
if (fileRecv.file.exists()) {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
fileRecv.file.delete();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
StringWriter errors = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(errors));
|
||||
logger.error(errors.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
sessions.remove(id);
|
||||
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
|
||||
public void onMessage(String message, @PathParam("id") String id) {
|
||||
if (sessions.containsKey(id)) {
|
||||
FileRecv fileRecv = sessions.get(id);
|
||||
public void onMessage(byte[] data, @PathParam("code") String code) {
|
||||
if (sessions.containsKey(code)) {
|
||||
FileRecv fileRecv = sessions.get(code);
|
||||
try {
|
||||
fileRecv.fos.write(message.getBytes());
|
||||
fileRecv.fos.write(data);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
StringWriter errors = new StringWriter();
|
||||
e.printStackTrace(new PrintWriter(errors));
|
||||
logger.error(errors.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@AllArgsConstructor
|
||||
@RegisterForReflection
|
||||
class FileRecv {
|
||||
public static class FileRecv {
|
||||
String name;
|
||||
File file;
|
||||
FileOutputStream fos;
|
||||
long time;
|
||||
Session session;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user