/* * ConnectionHandler.java * * Copyright (C) 2015 Pixelgaffer * * This work is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation; either version 2 of the License, or any later * version. * * This work is distributed in the hope that it will be useful, but without * any warranty; without even the implied warranty of merchantability or * fitness for a particular purpose. See version 2 and version 3 of the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.pixelgaffer.turnierserver.networking; import java.io.OutputStream; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import naga.NIOSocket; import naga.SocketObserver; /** * Ein abstrakter ConnectionHandler, der einige nützliche Funktionen * implementiert. */ public abstract class ConnectionHandler extends OutputStream implements SocketObserver { /** Gibt an, ob der Handler mit dem Socket connected ist. */ @Getter private boolean connected = false; /** Der ConnectionPool, in dem dieser Handler ist. */ @Getter(AccessLevel.PACKAGE) @Setter(AccessLevel.PACKAGE) private ConnectionPool<?> pool; /** Der zugrundeliegende Client. */ @Getter(AccessLevel.PROTECTED) private NIOSocket client; /** * Erstellt einen ConnectionHandler für das angegebene Socket. */ public ConnectionHandler (NIOSocket socket) { client = socket; client.listen(this); } @Override public void connectionOpened (NIOSocket socket) { connected = true; connected(); } /** * Wird aufgerufen, wenn die Connection zum Client aufgebaut wurde. */ protected void connected () { } @Override public final void connectionBroken (NIOSocket socket, Exception exception) { connected = false; pool.remove(this); disconnected(); } /** * Disconnected den Client und entfernt den Handler aus dem * {@link ConnectionPool} des Servers. */ public void disconnect () { connected = false; pool.remove(this); client.close(); disconnected(); } /** * Wird aufgerufen, wenn sich der Client disconnected hat oder disconnected * wurde. */ protected void disconnected () { } @Override public void packetSent (NIOSocket socket, Object tag) { } // wrap OutputStream @Override public void write (int b) { write(new byte[] { (byte)b }); } @Override public void write (byte b[]) { client.write(b); } }