ch.qos.logback.core.net.server.ServerSocketListener Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of virtdata-lib-realer Show documentation
Show all versions of virtdata-lib-realer Show documentation
With inspiration from other libraries
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.net.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import ch.qos.logback.core.util.CloseUtil;
/**
* A {@link ServerListener} that accepts connections on a {@link ServerSocket}.
*
* @author Carl Harris
*/
public abstract class ServerSocketListener implements ServerListener {
private final ServerSocket serverSocket;
/**
* Constructs a new listener.
* @param serverSocket server socket delegate
*/
public ServerSocketListener(ServerSocket serverSocket) {
this.serverSocket = serverSocket;
}
/**
* {@inheritDoc}
*/
public T acceptClient() throws IOException {
Socket socket = serverSocket.accept();
return createClient(socketAddressToString(socket.getRemoteSocketAddress()), socket);
}
/**
* Creates the client object for a new socket connection
* @param id identifier string for the client
* @param socket client's socket connection
* @return client object
* @throws IOException
*/
protected abstract T createClient(String id, Socket socket) throws IOException;
/**
* {@inheritDoc}
*/
public void close() {
CloseUtil.closeQuietly(serverSocket);
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return socketAddressToString(serverSocket.getLocalSocketAddress());
}
/**
* Converts a socket address to a reasonable display string.
* @param address the subject socket address
* @return display string
*/
private String socketAddressToString(SocketAddress address) {
String addr = address.toString();
int i = addr.indexOf("/");
if (i >= 0) {
addr = addr.substring(i + 1);
}
return addr;
}
}