RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
LoginExecutorService.java
1package com.osroyale.net;
2
3import com.osroyale.net.codec.login.LoginDetailsPacket;
4import com.osroyale.net.session.LoginSession;
5import org.slf4j.Logger;
6import org.slf4j.LoggerFactory;
7
8import java.io.Closeable;
9import java.io.IOException;
10import java.util.concurrent.ExecutorService;
11import java.util.concurrent.Executors;
12import java.util.concurrent.TimeUnit;
13
38
39public final class LoginExecutorService implements Closeable {
40
41 private static final Logger logger = LoggerFactory.getLogger(LoginExecutorService.class);
42
43 private static final long TERMINATION_TIMEOUT = 60;
44 private static final TimeUnit TERMINATION_TIMEOUT_UNIT = TimeUnit.SECONDS;
45
46 private final ExecutorService executorService;
47
48 public LoginExecutorService(final int threads) {
49 this.executorService = Executors.newFixedThreadPool(threads);
50 }
51
52 @Override
53 public void close() throws IOException {
54 final ExecutorService executorService = this.executorService;
55 executorService.shutdown();
56 try {
57 // Wait a while for existing tasks to terminate
58 if (!executorService.awaitTermination(TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT)) {
59 executorService.shutdownNow(); // Cancel currently executing tasks
60 // Wait a while for tasks to respond to being cancelled
61 if (!executorService.awaitTermination(TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT)) {
62 logger.warn("Pool did not terminate in {} {}", TERMINATION_TIMEOUT, TERMINATION_TIMEOUT_UNIT);
63 }
64 }
65 } catch (final InterruptedException ex) {
66 // (Re-)Cancel if current thread also interrupted
67 executorService.shutdownNow();
68 // Preserve interrupt status
69 Thread.currentThread().interrupt();
70 }
71 }
72
73 public void execute(final LoginSession loginSession,
74 final LoginDetailsPacket loginDetailsPacket) {
75 executorService.execute(() -> loginSession.handleUserLoginDetails(loginDetailsPacket));
76 }
77
78}