Hi Stefano,
what about storing a delay and a dateOflastmessage in the session ? When
you receive a new message on the same session, you compare the current
date with the dateOflastmessage+delay, if it's >, you process the
message, otherwise, you just sleep for a portion of the delay.
Would it be ok ?
Stefano Bagnara wrote:
Hi all,
I need to use VMPipeTransport but I want the conversation to have
delays because this would be much more similar to the real case.
I'd like to introduce a given delay between messages of the same
session (without blocking other sessions).
This would also be useful in implementing Tarpit like services.
I tried adding a filter like this one:
---------------------
final class DelayFilter extends IoFilterAdapter {
private int delay;
public DelayFilter(int delay) {
super();
this.delay = delay;
}
private static class ThrottlingWriteTimerTask extends TimerTask {
protected IoSession session;
private Object message;
private NextFilter filter;
public ThrottlingWriteTimerTask(NextFilter filter, IoSession session,
Object message) {
this.session = session;
this.message = message;
this.filter = filter;
}
public void run() {
filter.filterWrite(session, new DefaultWriteRequest(message));
}
}
@Override
public void filterWrite(NextFilter arg0, IoSession arg1, WriteRequest
arg2) throws Exception {
String response = (String) arg2.getMessage();
new Timer(true).schedule(new ThrottlingWriteTimerTask(arg0,
arg1,response), delay);
}
}
------------------
The issue with this filter is that the event are rescheduled using a
Timer and this sometimes break ordering and I need to mantain strict
ordering for messages.
Do you have any suggestion?
Stefano
--
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org