diff --git a/engine/src/networking/com/jme3/network/base/KernelAdapter.java b/engine/src/networking/com/jme3/network/base/KernelAdapter.java index 55599ef13..148ae2d6f 100644 --- a/engine/src/networking/com/jme3/network/base/KernelAdapter.java +++ b/engine/src/networking/com/jme3/network/base/KernelAdapter.java @@ -35,6 +35,8 @@ package com.jme3.network.base; import java.io.IOException; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; import com.jme3.network.*; import com.jme3.network.kernel.Endpoint; @@ -61,6 +63,8 @@ import com.jme3.network.serializing.Serializer; */ public class KernelAdapter extends Thread { + static Logger log = Logger.getLogger(KernelAdapter.class.getName()); + private DefaultServer server; // this is unfortunate private Kernel kernel; private MessageListener messageDispatcher; @@ -89,6 +93,13 @@ public class KernelAdapter extends Thread kernel.terminate(); } + protected void reportError( Exception e ) + { + // Should really be queued up so the outer thread can + // retrieve them. For now we'll just log it. FIXME + log.log( Level.SEVERE, "Unhandled error", e ); + } + protected HostedConnection getConnection( Endpoint p ) { return server.getConnection(p); @@ -128,9 +139,13 @@ public class KernelAdapter extends Thread server.registerClient( this, p, (ClientRegistrationMessage)m ); return; } - - HostedConnection source = getConnection(p); - messageDispatcher.messageReceived( source, m ); + + try { + HostedConnection source = getConnection(p); + messageDispatcher.messageReceived( source, m ); + } catch( Exception e ) { + reportError(e); + } } protected void createAndDispatch( Envelope env ) @@ -163,10 +178,13 @@ public class KernelAdapter extends Thread protected void flushEvents() { EndpointEvent event; - while( (event = kernel.nextEvent()) != null ) - { - createAndDispatch( event ); + while( (event = kernel.nextEvent()) != null ) { + try { + createAndDispatch( event ); + } catch( Exception e ) { + reportError(e); } + } } public void run()