58 lines
2.3 KiB
Java
58 lines
2.3 KiB
Java
package org.to.telegramfinalproject.Server;
|
|
|
|
import org.to.telegramfinalproject.Database.userDatabase;
|
|
|
|
import java.io.IOException;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
|
|
public class TestServer {
|
|
private static final int SOCKET_PORT = 8000; // سرور سوکت
|
|
private static final int HTTP_PORT = 8080; // سرور آپلود
|
|
private static final String UPLOAD_BASE_DIR = "uploads"; // پوشهی ذخیره فایلها
|
|
|
|
public static void main(String[] args) {
|
|
// 1) استارت HTTP Upload در ترد جدا
|
|
Thread httpThread = new Thread(() -> {
|
|
try {
|
|
UploadHttp.start(HTTP_PORT, UPLOAD_BASE_DIR);
|
|
} catch (IOException e) {
|
|
System.err.println("Upload HTTP failed to start: " + e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}, "upload-http");
|
|
httpThread.setDaemon(true);
|
|
httpThread.start();
|
|
|
|
// 2) سرور سوکت با Thread Pool
|
|
ExecutorService pool = Executors.newCachedThreadPool();
|
|
try (ServerSocket serverSocket = new ServerSocket(SOCKET_PORT)) {
|
|
System.out.println("Socket server started on port " + SOCKET_PORT);
|
|
userDatabase.setAllUsersOffline();
|
|
|
|
// 3) Shutdown Hook برای خاموشی تمیز
|
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
System.out.println("\nShutting down...");
|
|
try { serverSocket.close(); } catch (IOException ignore) {}
|
|
pool.shutdownNow();
|
|
userDatabase.setAllUsersOffline();
|
|
System.out.println("Goodbye.");
|
|
}));
|
|
|
|
// 4) حلقه پذیرش اتصالها
|
|
while (!serverSocket.isClosed()) {
|
|
Socket clientSocket = serverSocket.accept();
|
|
clientSocket.setTcpNoDelay(true);
|
|
System.out.println("New client connected: " + clientSocket.getInetAddress());
|
|
pool.submit(new ClientHandler(clientSocket));
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
System.err.println("Socket server error: " + e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|