SparkMonkay
Commander
- Registriert
- Feb. 2013
- Beiträge
- 2.337
Moinsen,
in letzter Zeit beschaeftige ich mich mehr damit guten Code zu fabrizieren. Darunter verstehe ich dass der Code verstaendlich sein soll und nur das tut wofuer er geschrieben wurde.
Jetzt bin ich an einer Stelle bei mir angekommen und wuerde gerne fragen wie ich es hier gescheit anstellen koennte.
Mein Vorhaben ist folgendes:
Ich moechte einen Server schreiben der Nachrichten von User A nach B wandern laesst. Dafuer brauche ich etwas was diese User annimmt. Also ein ServerSocketChannel und ich habe das Teil einfach in eine eigene Klasse gepackt und die Acceptor genannt. Hier zu sehen.
Wie initialisiere ich das Teil jetzt sauber?
Daran haenge ich jetzt was laenger und finde so keine Loesung die mir gefaellt.
//Edit
Genrelle Frage zu dem Thema: Clean Code
Was gibt es wichtiges einzuhalten/beachten?
in letzter Zeit beschaeftige ich mich mehr damit guten Code zu fabrizieren. Darunter verstehe ich dass der Code verstaendlich sein soll und nur das tut wofuer er geschrieben wurde.
Jetzt bin ich an einer Stelle bei mir angekommen und wuerde gerne fragen wie ich es hier gescheit anstellen koennte.
Mein Vorhaben ist folgendes:
Ich moechte einen Server schreiben der Nachrichten von User A nach B wandern laesst. Dafuer brauche ich etwas was diese User annimmt. Also ein ServerSocketChannel und ich habe das Teil einfach in eine eigene Klasse gepackt und die Acceptor genannt. Hier zu sehen.
Code:
package server;
import java.io.Closeable;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketOption;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.spi.SelectorProvider;
import java.util.HashSet;
import java.util.Set;
public class ClientAcceptor extends ServerSocketChannel implements Runnable {
ServerSocketChannel serverSocketChannel;
protected HashSet<SocketChannel> socketChannels = new HashSet<>();
/**************************************************************************
* CONSTRUCTOR
**************************************************************************/
/**
* Initializes a new instance of this class.
*
* @param provider The provider that created this channel
*/
protected ClientAcceptor(SelectorProvider provider) {
super(provider);
}
/**************************************************************************
* METHODS
**************************************************************************/
public Set<SocketChannel> getAccepted() {
HashSet<SocketChannel> socketChannels = this.socketChannels;
this.socketChannels.clear();
return socketChannels;
}
//
// overriden from runnable
//
@Override
public void run() {
SocketChannel socketChannel = null;
try {
while (true) {
socketChannel = serverSocketChannel.accept();
if (socketChannel != null) socketChannels.add(socketChannel);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//
// overriden from serversocketchannel
//
@Override
public ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException {
return serverSocketChannel.bind(local, backlog);
}
@Override
public <T> ServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException {
return serverSocketChannel.setOption(name, value);
}
@Override
public <T> T getOption(SocketOption<T> name) throws IOException {
return getOption(name);
}
@Override
public Set<SocketOption<?>> supportedOptions() {
return serverSocketChannel.supportedOptions();
}
@Override
public ServerSocket socket() {
return serverSocketChannel.socket();
}
@Override
public SocketChannel accept() throws IOException {
return serverSocketChannel.accept();
}
@Override
public SocketAddress getLocalAddress() throws IOException {
return serverSocketChannel.getLocalAddress();
}
@Override
protected void implCloseSelectableChannel() throws IOException {
serverSocketChannel.close();
}
@Override
protected void implConfigureBlocking(boolean block) throws IOException {
serverSocketChannel.configureBlocking(block);
}
}
Wie initialisiere ich das Teil jetzt sauber?
Daran haenge ich jetzt was laenger und finde so keine Loesung die mir gefaellt.
//Edit
Genrelle Frage zu dem Thema: Clean Code
Was gibt es wichtiges einzuhalten/beachten?
Zuletzt bearbeitet:
(Sourcecode erweitert)