Please open a JIRA issue at https://issues.apache.org/jira/browse/SSHD
and specify the scenario that would require such an API. Please note
that when you call Channel#close, the return value is a CloseFuture to
which one can add listeners. Also, the ClientChannel has a waitFor
method that can be used to wait for the CHANNEL_CLOSED event.
Furthermore, you can register a ChannelListener whose #channelClosed
method will be called. Given so many ways to receive asynchronous
information about a channel being closed, why expose the internal
CloseFuture ?
------ Original Message ------
From: "Bean, Michael (Nokia - US)" <michael.b...@alcatel-lucent.com>
To: dev@mina.apache.org
Sent: 19-Feb-16 21:31:43
Subject: CloseFuture listener alternative to channel.waitFor()
I need non-blocking means to wait for client request to complete.
With sshd-core-1.1.0 and reflection I can get to gracefulFuture field
of AbstractChannel and register a listener:
...
s_closeFutureField =
AbstractChannel.class.getDeclaredField( "gracefulFuture" );
s_closeFutureField.setAccessible( true );
...
timeout = commandEndTime - System.currentTimeMillis();
DefaultCloseFuture closeFuture;
try
{
closeFuture = (DefaultCloseFuture)
s_closeFutureField.get( channel );
}
catch ( IllegalAccessException e )
{
throw new RuntimeException( e );
}
//CloseFuture closeFuture = channel.getCloseFuture();
CloseListener closeListener = new CloseListener( workItem,
sc, channel, out );
AlarmHandler alarmHandler = new AlarmHandler( closeListener
);
Alarm alarm = getContext().getAlarmFactory().getAlarm(
alarmHandler, timeout );
closeListener.setAlarm( alarm );
closeFuture.addListener( closeListener );
sc = null;
return workItem.makeSuspend( "Waiting..." );
Could getCloseFuture() method be added to AbstractChannel?
Thanks,
Mike
-- Michael Bean (Mike)
Nokia - US
AAA Product Group
3461 Robin Ln, Ste 1
Cameron Park, CA 95682
Email: michael.b...@alcatel-lucent.com
Phone: 1 530 350 6564
Fax: 1 530 676 3442