mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 14:22:05 +01:00
[core] Introduce ScheduledAction.Kind for blocking and non-blocking actions
This commit is contained in:
parent
4e5536e227
commit
72c5dc5886
4 changed files with 35 additions and 7 deletions
|
@ -2163,7 +2163,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
|
protected static ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
|
||||||
return SMACK_REACTOR.schedule(runnable, delay, unit);
|
return SMACK_REACTOR.schedule(runnable, delay, unit, ScheduledAction.Kind.NonBlocking);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onStreamOpen(XmlPullParser parser) {
|
protected void onStreamOpen(XmlPullParser parser) {
|
||||||
|
|
|
@ -54,6 +54,14 @@ public abstract class Manager {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static final ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
|
protected static final ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
|
||||||
return AbstractXMPPConnection.SMACK_REACTOR.schedule(runnable, delay, unit);
|
return schedule(runnable, delay, unit, ScheduledAction.Kind.NonBlocking);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static final ScheduledAction scheduleBlocking(Runnable runnable, long delay, TimeUnit unit) {
|
||||||
|
return schedule(runnable, delay, unit, ScheduledAction.Kind.Blocking);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static final ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit, ScheduledAction.Kind scheduledActionKind) {
|
||||||
|
return AbstractXMPPConnection.SMACK_REACTOR.schedule(runnable, delay, unit, scheduledActionKind);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,16 +20,25 @@ import java.util.Date;
|
||||||
import java.util.concurrent.Delayed;
|
import java.util.concurrent.Delayed;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.jivesoftware.smack.util.Async;
|
||||||
|
|
||||||
public class ScheduledAction implements Delayed {
|
public class ScheduledAction implements Delayed {
|
||||||
|
|
||||||
final Runnable action;
|
enum Kind {
|
||||||
|
NonBlocking,
|
||||||
|
Blocking,
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Runnable action;
|
||||||
final Date releaseTime;
|
final Date releaseTime;
|
||||||
final SmackReactor smackReactor;
|
final SmackReactor smackReactor;
|
||||||
|
final Kind kind;
|
||||||
|
|
||||||
ScheduledAction(Runnable action, Date releaseTime, SmackReactor smackReactor) {
|
ScheduledAction(Runnable action, Date releaseTime, SmackReactor smackReactor, Kind kind) {
|
||||||
this.action = action;
|
this.action = action;
|
||||||
this.releaseTime = releaseTime;
|
this.releaseTime = releaseTime;
|
||||||
this.smackReactor = smackReactor;
|
this.smackReactor = smackReactor;
|
||||||
|
this.kind = kind;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,4 +77,15 @@ public class ScheduledAction implements Delayed {
|
||||||
long delayInMillis = getTimeToDueMillis();
|
long delayInMillis = getTimeToDueMillis();
|
||||||
return unit.convert(delayInMillis, TimeUnit.MILLISECONDS);
|
return unit.convert(delayInMillis, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void run() {
|
||||||
|
switch (kind) {
|
||||||
|
case NonBlocking:
|
||||||
|
action.run();
|
||||||
|
break;
|
||||||
|
case Blocking:
|
||||||
|
Async.go(() -> action.run());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,10 +145,10 @@ public class SmackReactor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit) {
|
ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit, ScheduledAction.Kind scheduledActionKind) {
|
||||||
long releaseTimeEpoch = System.currentTimeMillis() + unit.toMillis(delay);
|
long releaseTimeEpoch = System.currentTimeMillis() + unit.toMillis(delay);
|
||||||
Date releaseTimeDate = new Date(releaseTimeEpoch);
|
Date releaseTimeDate = new Date(releaseTimeEpoch);
|
||||||
ScheduledAction scheduledAction = new ScheduledAction(runnable, releaseTimeDate, this);
|
ScheduledAction scheduledAction = new ScheduledAction(runnable, releaseTimeDate, this, scheduledActionKind);
|
||||||
scheduledActions.add(scheduledAction);
|
scheduledActions.add(scheduledAction);
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
return scheduledAction;
|
return scheduledAction;
|
||||||
|
@ -206,7 +206,7 @@ public class SmackReactor {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dueScheduledAction != null) {
|
if (dueScheduledAction != null) {
|
||||||
dueScheduledAction.action.run();
|
dueScheduledAction.run();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue