diff --git a/src/main/java/io/orprotocol/Server.java b/src/main/java/io/orprotocol/Server.java index 658e523..3ac0588 100644 --- a/src/main/java/io/orprotocol/Server.java +++ b/src/main/java/io/orprotocol/Server.java @@ -155,13 +155,23 @@ public class Server extends WebSocketServer { } @Override - public void onOpen(WebSocket socket, ClientHandshake arg1) { + public void onOpen(WebSocket socket, ClientHandshake handshake) { /** * Создаем нового клиента при открытии соединения. * Передаем интервал heartbeat из настроек сервера. * Если клиент не отправляет heartbeat в указанный интервал, его можно отключить. */ Client client = new Client(socket, this.settings.heartbeatInterval, this); + String ipAddress = handshake.getFieldValue("X-Forwarded-For"); + if (ipAddress == null || ipAddress.isEmpty()) { + ipAddress = socket.getRemoteSocketAddress().getAddress().getHostAddress(); + } else { + /** + * Берем первый IP адрес из списка разделенного запятой + */ + ipAddress = ipAddress.split(",")[0].trim(); + } + client.setIpAddress(ipAddress); socket.setAttachment(client); if(this.listener == null){ return; diff --git a/src/main/java/io/orprotocol/client/Client.java b/src/main/java/io/orprotocol/client/Client.java index e42cb45..2879b38 100644 --- a/src/main/java/io/orprotocol/client/Client.java +++ b/src/main/java/io/orprotocol/client/Client.java @@ -29,6 +29,10 @@ public class Client { * Интервал отправки heartbeat пакетов в миллисекундах. */ public long heartbeatInterval = 0; + /** + * IP-адрес клиента + */ + private String ipAddress; /** * Время последнего полученного heartbeat в миллисекундах. */ @@ -71,6 +75,22 @@ public class Client { this.lastHeartbeatTime = System.currentTimeMillis(); } + /** + * Получает IP адрес клиента + * @return адрес + */ + public String getIpAddress() { + return this.ipAddress; + } + + /** + * Устанавливает IP адрес клиента + * @param ipAddress адрес + */ + public void setIpAddress(String ipAddress){ + this.ipAddress = ipAddress; + } + /** * Получает уникальный идентификатор клиента. * @return Идентификатор клиента.