private void handleInvocation( RemoteMethodEntry entry, Object[] arguments ) throws Exception
	{
	    RemoteMethod remoteMethod = entry.remoteMethod;
        Match readMatch = remoteMethod.readMatch();
        int readStates = remoteMethod.readStates();

        if (readMatch.isMatch( readStates, getStates() ) || 
           !protocol.notifyReadBlock(this, readMatch, readStates, getStates()))
        {
            if (entry.listener instanceof HasClient)
            {
                ((HasClient)entry.listener).setCurrentClient( this );
            }
            
            entry.method.invoke( entry.listener, arguments );
        }
	}