diff options
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/isode/stroke/muc/MUCImpl.java | 8 | ||||
-rw-r--r-- | src/com/isode/stroke/network/JavaTimer.java | 47 |
2 files changed, 31 insertions, 24 deletions
diff --git a/src/com/isode/stroke/muc/MUCImpl.java b/src/com/isode/stroke/muc/MUCImpl.java index 26be309..2a45926 100644 --- a/src/com/isode/stroke/muc/MUCImpl.java +++ b/src/com/isode/stroke/muc/MUCImpl.java @@ -106,7 +106,9 @@ public class MUCImpl extends MUC { /** * Change the affiliation of the given Jabber ID. * It must be called with the real JID, not the room JID. - * @param jid real jabber ID, not null + * @param jid real jabber ID, not null. NOTE: This method does not + strip any resource from the JID, as expected by XEP-0045. Callers + wanting to be strictly XEP-0045 conformant should pass in a bare JID * @param affiliation new affiliation, not null */ @Override @@ -114,7 +116,9 @@ public class MUCImpl extends MUC { final MUCAdminPayload mucPayload = new MUCAdminPayload(); MUCItem item = new MUCItem(); item.affiliation = affiliation; - item.realJID = jid.toBare(); + // According to XEP-0045 the JID should be bare, but this isn't being done here because + // to provide support for applications where we do want to set affilations on a per resource basis + item.realJID = jid; mucPayload.addItem(item); GenericRequest<MUCAdminPayload> request = new GenericRequest<MUCAdminPayload>( IQ.Type.Set, getJID(), mucPayload, iqRouter_); diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java index ac9e219..2baae3d 100644 --- a/src/com/isode/stroke/network/JavaTimer.java +++ b/src/com/isode/stroke/network/JavaTimer.java @@ -4,21 +4,20 @@ * See Documentation/Licenses/GPLv3.txt for more information. */ /* - * Copyright (c) 2010, Isode Limited, London, England. + * Copyright (c) 2010-2018, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.network; -import java.util.Date; - import com.isode.stroke.eventloop.Event; import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.eventloop.EventOwner; class JavaTimer extends Timer { - private class TimerRunnable implements Runnable { + private class TimerRunnable implements Runnable,EventOwner { - boolean running_ = true; + private boolean running_ = true; private final EventLoop eventLoop_; private final long milliseconds_; @@ -28,25 +27,27 @@ class JavaTimer extends Timer { } public void run() { - long endTime = new Date().getTime() + milliseconds_; - while (shouldEmit() && new Date().getTime() < endTime) { + long endTime = System.currentTimeMillis() + milliseconds_; + while (shouldEmit() && System.currentTimeMillis() < endTime) { try { - long timeToWait = endTime - new Date().getTime(); + long timeToWait = endTime - System.currentTimeMillis(); if (timeToWait > 0) { - Thread.sleep(milliseconds_); + Thread.sleep(timeToWait); } } catch (InterruptedException ex) { // Needs to be caught, but won't break out of the loop // unless end time reached or stop() has been called. } - } - if (shouldEmit()) { - eventLoop_.postEvent(new Event.Callback() { - public void run() { - onTick.emit(); - } - }); - } + } + synchronized(this) { + if (shouldEmit()) { + eventLoop_.postEvent(new Event.Callback() { + public void run() { + onTick.emit(); + } + },this); + } + } } @@ -56,6 +57,7 @@ class JavaTimer extends Timer { public synchronized void stop() { running_ = false; + timer_.eventLoop_.removeEventsFromOwner(this); } } @@ -85,14 +87,15 @@ class JavaTimer extends Timer { @Override public void stop() { timer_.stop(); - //FIXME: This needs to clear any remaining events out of the EventLoop queue. } - + @Override public String toString() { - return "JavaTimer for " + timer_.milliseconds_ + - " milliseconds " + - (timer_.running_ ? "running" : "not running"); + synchronized (timer_) { + return "JavaTimer for " + timer_.milliseconds_ + + " milliseconds " + + (timer_.running_ ? "running" : "not running"); + } } private final TimerRunnable timer_; } |