diff --git a/src/zutil/network/nio/NioNetwork.java b/src/zutil/network/nio/NioNetwork.java index 4c32e77..db493a8 100644 --- a/src/zutil/network/nio/NioNetwork.java +++ b/src/zutil/network/nio/NioNetwork.java @@ -14,10 +14,12 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.logging.Logger; import zutil.Encrypter; import zutil.MultiPrintStream; import zutil.converters.Converter; +import zutil.log.LogUtil; import zutil.network.nio.message.type.ResponseRequestMessage; import zutil.network.nio.message.type.SystemMessage; import zutil.network.nio.response.ResponseEvent; @@ -29,14 +31,7 @@ import zutil.struct.DynamicByteArrayStream; public abstract class NioNetwork implements Runnable { - /** - * Debug level - * 0 = nothing - * 1 = connection info - * 2 = message debug - * 3 = selector debug - */ - public static final int DEBUG = 2; + private static Logger logger = LogUtil.getLogger(); public static enum NetworkType {SERVER, CLIENT}; private NetworkType type; @@ -139,7 +134,7 @@ public abstract class NioNetwork implements Runnable { * @param data The data to send */ protected void queueSend(SocketChannel socket, byte[] data){ - if(DEBUG>=3) MultiPrintStream.out.println("Sending Queue..."); + logger.finest("Sending Queue..."); // And queue the data we want written synchronized (pendingWriteData) { List queue = pendingWriteData.get(socket); @@ -157,13 +152,13 @@ public abstract class NioNetwork implements Runnable { // Indicate we want the interest ops set changed pendingChanges.add(new ChangeRequest(socket, ChangeRequest.CHANGEOPS, SelectionKey.OP_WRITE)); } - if(DEBUG>=3) MultiPrintStream.out.println("selector.wakeup();"); + logger.finest("selector.wakeup();"); // Finally, wake up our selecting thread so it can make the required changes selector.wakeup(); } public void run() { - if(DEBUG>=1)MultiPrintStream.out.println("NioNetwork Started!!!"); + logger.fine("NioNetwork Started!!!"); while (true) { try { // Process any pending changes @@ -175,11 +170,11 @@ public abstract class NioNetwork implements Runnable { case ChangeRequest.CHANGEOPS: SelectionKey key = change.socket.keyFor(selector); key.interestOps(change.ops); - if(DEBUG>=3) MultiPrintStream.out.println("change.ops "+change.ops); + logger.finest("change.ops "+change.ops); break; case ChangeRequest.REGISTER: change.socket.register(selector, change.ops); - if(DEBUG>=3) MultiPrintStream.out.println("register socket "); + logger.finest("register socket "); break; } } @@ -188,31 +183,31 @@ public abstract class NioNetwork implements Runnable { // Wait for an event one of the registered channels selector.select(); - if(DEBUG>=3) MultiPrintStream.out.println("selector is awake"); + logger.finest("selector is awake"); // Iterate over the set of keys for which events are available Iterator selectedKeys = selector.selectedKeys().iterator(); while (selectedKeys.hasNext()) { SelectionKey key = (SelectionKey) selectedKeys.next(); selectedKeys.remove(); - if(DEBUG>=3) MultiPrintStream.out.println("KeyOP: "+key.interestOps()+" isAcceptable: "+SelectionKey.OP_ACCEPT+" isConnectable: "+SelectionKey.OP_CONNECT+" isWritable: "+SelectionKey.OP_WRITE+" isReadable: "+SelectionKey.OP_READ); + logger.finest("KeyOP: "+key.interestOps()+" isAcceptable: "+SelectionKey.OP_ACCEPT+" isConnectable: "+SelectionKey.OP_CONNECT+" isWritable: "+SelectionKey.OP_WRITE+" isReadable: "+SelectionKey.OP_READ); if (key.isValid()) { // Check what event is available and deal with it if (key.isAcceptable()) { - if(DEBUG>=3) MultiPrintStream.out.println("Accepting Connection!!"); + logger.finest("Accepting Connection!!"); accept(key); } else if (key.isConnectable()) { - if(DEBUG>=3) MultiPrintStream.out.println("Finnishing Connection!!"); + logger.finest("Finnishing Connection!!"); finishConnection(key); } else if (key.isWritable()) { - if(DEBUG>=3) MultiPrintStream.out.println("Writing"); + logger.finest("Writing"); write(key); } else if (key.isReadable()) { - if(DEBUG>=3) MultiPrintStream.out.println("Reading"); + logger.finest("Reading"); read(key); } } @@ -243,7 +238,7 @@ public abstract class NioNetwork implements Runnable { InetSocketAddress remoteAdr = (InetSocketAddress) socketChannel.socket().getRemoteSocketAddress(); if(!clients.containsValue(remoteAdr)){ clients.put(remoteAdr, new ClientData(socketChannel)); - if(DEBUG>=1)MultiPrintStream.out.println("New Connection("+remoteAdr+")!!! Count: "+clients.size()); + logger.fine("New Connection("+remoteAdr+")!!! Count: "+clients.size()); } } @@ -269,8 +264,9 @@ public abstract class NioNetwork implements Runnable { clients.remove(remoteAdr); pendingReadData.remove(socketChannel); pendingWriteData.remove(socketChannel); - if(DEBUG>=1) MultiPrintStream.out.println("Connection Forced Close("+remoteAdr+")!!! Connection Count: "+clients.size()); - if(type == NetworkType.CLIENT) throw new IOException("Server Closed The Connection!!!"); + logger.fine("Connection Forced Close("+remoteAdr+")!!! Connection Count: "+clients.size()); + if(type == NetworkType.CLIENT) + throw new IOException("Server Closed The Connection!!!"); return; } @@ -282,8 +278,9 @@ public abstract class NioNetwork implements Runnable { clients.remove(remoteAdr); pendingReadData.remove(socketChannel); pendingWriteData.remove(socketChannel); - if(DEBUG>=1) MultiPrintStream.out.println("Connection Close("+remoteAdr+")!!! Connection Count: "+clients.size()); - if(type == NetworkType.CLIENT) throw new IOException("Server Closed The Connection!!!"); + logger.fine("Connection Close("+remoteAdr+")!!! Connection Count: "+clients.size()); + if(type == NetworkType.CLIENT) + throw new IOException("Server Closed The Connection!!!"); return; } @@ -334,7 +331,7 @@ public abstract class NioNetwork implements Runnable { socketChannel.write(buf); if (buf.remaining() > 0) { // ... or the socket's buffer fills up - if(DEBUG>=3) MultiPrintStream.out.println("Write Buffer Full!!"); + logger.finest("Write Buffer Full!!"); break; } queue.remove(0); @@ -344,32 +341,32 @@ public abstract class NioNetwork implements Runnable { // We wrote away all data, so we're no longer interested // in writing on this socket. Switch back to waiting for // data. - if(DEBUG>=3) MultiPrintStream.out.println("No more Data to write!!"); + logger.finest("No more Data to write!!"); key.interestOps(SelectionKey.OP_READ); } } } private void handleRecivedMessage(SocketChannel socketChannel, Object rspData){ - if(DEBUG>=2) MultiPrintStream.out.println("Handling incomming message..."); + logger.finer("Handling incomming message..."); if(rspData instanceof SystemMessage){ if(systemWorker != null){ - if(DEBUG>=3) MultiPrintStream.out.println("System Message!!!"); + logger.finest("System Message!!!"); systemWorker.processData(this, socketChannel, rspData); } else{ - if(DEBUG>=2) MultiPrintStream.out.println("Unhandled System Message!!!"); + logger.finer("Unhandled System Message!!!"); } } else{ // Hand the data off to our worker thread if(worker != null){ - if(DEBUG>=3) MultiPrintStream.out.println("Worker Message!!!"); + logger.finest("Worker Message!!!"); worker.processData(this, socketChannel, rspData); } else{ - if(DEBUG>=1) MultiPrintStream.out.println("Unhandled Worker Message!!!"); + logger.fine("Unhandled Worker Message!!!"); } } } @@ -382,7 +379,7 @@ public abstract class NioNetwork implements Runnable { SocketChannel socketChannel = SocketChannel.open(); socketChannel.socket().setReuseAddress(true); socketChannel.configureBlocking(false); - if(DEBUG>=1)MultiPrintStream.out.println("Connecting to: "+address); + logger.fine("Connecting to: "+address); // Kick off connection establishment socketChannel.connect(address); diff --git a/src/zutil/network/nio/service/chat/ChatService.java b/src/zutil/network/nio/service/chat/ChatService.java index bd15027..4e9ba79 100644 --- a/src/zutil/network/nio/service/chat/ChatService.java +++ b/src/zutil/network/nio/service/chat/ChatService.java @@ -3,14 +3,21 @@ package zutil.network.nio.service.chat; import java.nio.channels.SocketChannel; import java.util.HashMap; import java.util.LinkedList; +import java.util.logging.Logger; -import zutil.MultiPrintStream; +import zutil.log.LogUtil; import zutil.network.nio.NioNetwork; import zutil.network.nio.message.ChatMessage; import zutil.network.nio.message.Message; import zutil.network.nio.service.NetworkService; +/** + * A simple chat service with users and rooms + * + * @author Ziver + */ public class ChatService extends NetworkService{ + private static Logger logger = LogUtil.getLogger(); private HashMap> rooms; private ChatListener listener; @@ -43,7 +50,7 @@ public class ChatService extends NetworkService{ } } } - if(NioNetwork.DEBUG>=2)MultiPrintStream.out.println("New Chat Message: "+chatmessage.msg); + logger.finer("New Chat Message: "+chatmessage.msg); listener.messageAction(chatmessage.msg, chatmessage.room); } // register to a room @@ -78,7 +85,7 @@ public class ChatService extends NetworkService{ */ public void registerUser(String room, SocketChannel socket){ addRoom(room); - if(NioNetwork.DEBUG>=1)MultiPrintStream.out.println("New Chat User: "+socket); + logger.fine("New Chat User: "+socket); rooms.get(room).add(socket); } @@ -90,7 +97,7 @@ public class ChatService extends NetworkService{ */ public void unRegisterUser(String room, SocketChannel socket){ if(rooms.containsKey(room)){ - if(NioNetwork.DEBUG>=1)MultiPrintStream.out.println("Remove Chat User: "+socket); + logger.fine("Remove Chat User: "+socket); rooms.get(room).remove(socket); removeRoom(room); } @@ -103,7 +110,7 @@ public class ChatService extends NetworkService{ */ public void addRoom(String room){ if(!rooms.containsKey(room)){ - if(NioNetwork.DEBUG>=1)MultiPrintStream.out.println("New Chat Room: "+room); + logger.fine("New Chat Room: "+room); rooms.put(room, new LinkedList()); } } @@ -115,7 +122,7 @@ public class ChatService extends NetworkService{ */ public void removeRoom(String room){ if(rooms.get(room).isEmpty()){ - if(NioNetwork.DEBUG>=1)MultiPrintStream.out.println("Remove Chat Room: "+room); + logger.fine("Remove Chat Room: "+room); rooms.remove(room); } } diff --git a/src/zutil/network/nio/service/sync/SyncService.java b/src/zutil/network/nio/service/sync/SyncService.java index ad93fe0..d69fdca 100644 --- a/src/zutil/network/nio/service/sync/SyncService.java +++ b/src/zutil/network/nio/service/sync/SyncService.java @@ -2,14 +2,17 @@ package zutil.network.nio.service.sync; import java.nio.channels.SocketChannel; import java.util.HashMap; +import java.util.logging.Logger; import zutil.MultiPrintStream; +import zutil.log.LogUtil; import zutil.network.nio.NioNetwork; import zutil.network.nio.message.Message; import zutil.network.nio.message.SyncMessage; import zutil.network.nio.service.NetworkService; public class SyncService extends NetworkService{ + private static Logger logger = LogUtil.getLogger(); // list of objects to sync private HashMap sync; @@ -24,7 +27,7 @@ public class SyncService extends NetworkService{ */ public void addSyncObject(ObjectSync os){ sync.put(os.id, os); - if(NioNetwork.DEBUG>=1)MultiPrintStream.out.println("New Sync object: "+os); + logger.fine("New Sync object: "+os); } public void handleMessage(Message message, SocketChannel socket){ @@ -33,7 +36,7 @@ public class SyncService extends NetworkService{ if(syncMessage.type == SyncMessage.MessageType.SYNC){ ObjectSync obj = sync.get(syncMessage.id); if(obj != null){ - if(NioNetwork.DEBUG>=2)MultiPrintStream.out.println("Syncing Message..."); + logger.finer("Syncing Message..."); obj.syncObject(syncMessage); } } diff --git a/src/zutil/network/nio/worker/SystemWorker.java b/src/zutil/network/nio/worker/SystemWorker.java index 4bb3265..77da6f9 100644 --- a/src/zutil/network/nio/worker/SystemWorker.java +++ b/src/zutil/network/nio/worker/SystemWorker.java @@ -2,8 +2,9 @@ package zutil.network.nio.worker; import java.util.HashMap; import java.util.Map; +import java.util.logging.Logger; -import zutil.MultiPrintStream; +import zutil.log.LogUtil; import zutil.network.nio.NioNetwork; import zutil.network.nio.message.ChatMessage; import zutil.network.nio.message.Message; @@ -17,6 +18,7 @@ import zutil.network.nio.service.sync.SyncService; public class SystemWorker extends ThreadedEventWorker { + private static Logger logger = LogUtil.getLogger(); private NioNetwork nio; // Maps a SocketChannel to a RspHandler private Map rspEvents = new HashMap(); @@ -34,19 +36,19 @@ public class SystemWorker extends ThreadedEventWorker { @Override public void messageEvent(WorkerDataEvent event) { try { - if(NioNetwork.DEBUG>=2) MultiPrintStream.out.println("System Message: "+event.data.getClass().getName()); + logger.finer("System Message: "+event.data.getClass().getName()); if(event.data instanceof Message){ if(event.data instanceof EchoMessage && ((EchoMessage)event.data).echo()){ // Echos back the recived message ((EchoMessage)event.data).recived(); - if(NioNetwork.DEBUG>=3) MultiPrintStream.out.println("Echoing Message: "+event.data); + logger.finer("Echoing Message: "+event.data); nio.send(event.socket, event.data); } else if(event.data instanceof ResponseRequestMessage && rspEvents.get(((ResponseRequestMessage)event.data).getResponseId()) != null){ // Handle the response handleResponse(((ResponseRequestMessage)event.data).getResponseId(), event.data); - if(NioNetwork.DEBUG>=3) MultiPrintStream.out.println("Response Request Message: "+event.data); + logger.finer("Response Request Message: "+event.data); } else{ //Services