Changeset c8a9d8e


Ignore:
Timestamp:
Aug 28, 2011 5:29:14 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
0c661b3
Parents:
e768b35
Message:

cleanups and javadoc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java

    re768b35 rc8a9d8e  
    1515import java.util.HashMap;
    1616import java.util.HashSet;
     17import java.util.Iterator;
    1718import java.util.List;
    1819import java.util.Map;
     
    2829import net.i2p.util.SimpleTimer;
    2930
     31/**
     32 *  Tracks outbound messages.
     33 */
    3034public class OutboundMessageRegistry {
    3135    private final Log _log;
    3236    /** list of currently active MessageSelector instances */
    33     private final List _selectors;
     37    private final List<MessageSelector> _selectors;
    3438    /** map of active MessageSelector to either an OutNetMessage or a List of OutNetMessages causing it (for quick removal) */
    35     private final Map _selectorToMessage;
     39    private final Map<MessageSelector, Object> _selectorToMessage;
    3640    /** set of active OutNetMessage (for quick removal and selector fetching) */
    37     private final Set _activeMessages;
     41    private final Set<OutNetMessage> _activeMessages;
    3842    private final CleanupTask _cleanupTask;
    3943    private final RouterContext _context;
     
    7983     * message is removed from the registry. 
    8084     *
     85     * This is called only by InNetMessagePool.
     86     *
    8187     * @param message Payload received that may be a reply to something we sent
    82      * @return List of OutNetMessage describing messages that were waiting for
     88     * @return non-null List of OutNetMessage describing messages that were waiting for
    8389     *         the payload
    8490     */
    85     public List getOriginalMessages(I2NPMessage message) {
    86         ArrayList matchedSelectors = null;
    87         ArrayList removedSelectors = null;
     91    public List<OutNetMessage> getOriginalMessages(I2NPMessage message) {
     92        List<MessageSelector> matchedSelectors = null;
     93        List<MessageSelector> removedSelectors = null;
     94
    8895        synchronized (_selectors) {
    89             for (int i = 0; i < _selectors.size(); i++) {
    90                 MessageSelector sel = (MessageSelector)_selectors.get(i);
     96            for (Iterator<MessageSelector> iter = _selectors.iterator(); iter.hasNext(); ) {
     97                MessageSelector sel = iter.next();
    9198                if (sel == null)
    9299                    continue;
     
    98105                        if (removedSelectors == null) removedSelectors = new ArrayList(1);
    99106                        removedSelectors.add(sel);
    100                         _selectors.remove(i);
    101                         i--;
     107                        iter.remove();
    102108                    }
    103109                }
     
    105111        }
    106112
    107         List rv = null;
     113        List<OutNetMessage> rv = null;
    108114        if (matchedSelectors != null) {
    109115            rv = new ArrayList(matchedSelectors.size());
    110             for (int i = 0; i < matchedSelectors.size(); i++) {
    111                 MessageSelector sel = (MessageSelector)matchedSelectors.get(i);
     116            for (MessageSelector sel : matchedSelectors) {
    112117                boolean removed = false;
    113118                OutNetMessage msg = null;
     
    127132                            rv.add(msg);
    128133                    } else if (o instanceof List) {
    129                         msgs = (List)o;
     134                        msgs = (List<OutNetMessage>)o;
    130135                        if (msgs != null)
    131136                            rv.addAll(msgs);
     
    151156    }
    152157   
     158    /**
     159     *  Registers a new, empty OutNetMessage, with the reply and timeout jobs specified.
     160     *
     161     *  @param replySelector non-null; The same selector may be used for more than one message.
     162     *  @param onReply may be null
     163     *  @param onTimeout Also called on failed send; may be null
     164     *  @return an ONM where getMessage() is null. Use it to call unregisterPending() later if desired.
     165     */
    153166    public OutNetMessage registerPending(MessageSelector replySelector, ReplyJob onReply, Job onTimeout, int timeoutMs) {
    154167        OutNetMessage msg = new OutNetMessage(_context);
     
    162175    }
    163176   
     177    /**
     178     *  Register the message. Each message must have a non-null
     179     *  selector at msg.getReplySelector().
     180     *  The same selector may be used for more than one message.
     181     *
     182     *  @param msg msg.getMessage() and msg.getReplySelector() must be non-null
     183     */
    164184    public void registerPending(OutNetMessage msg) { registerPending(msg, false); }
    165     public void registerPending(OutNetMessage msg, boolean allowEmpty) {
     185
     186    /**
     187     *  @param allowEmpty is msg.getMessage() allowed to be null?
     188     */
     189    private void registerPending(OutNetMessage msg, boolean allowEmpty) {
    166190        if ( (!allowEmpty) && (msg.getMessage() == null) )
    167191                throw new IllegalArgumentException("OutNetMessage doesn't contain an I2NPMessage? wtf");
     
    185209                    _selectorToMessage.put(sel, multi);
    186210                } else if (oldMsg instanceof List) {
    187                     multi = (List)oldMsg;
     211                    multi = (List<OutNetMessage>)oldMsg;
    188212                    multi.add(msg);
    189213                    _selectorToMessage.put(sel, multi);
     
    198222    }
    199223   
     224    /**
     225     *  @param msg may be be null
     226     */
    200227    public void unregisterPending(OutNetMessage msg) {
    201228        if (msg == null) return;
     
    206233            if (old != null) {
    207234                if (old instanceof List) {
    208                     List l = (List)old;
     235                    List<OutNetMessage> l = (List<OutNetMessage>)old;
    209236                    l.remove(msg);
    210237                    if (!l.isEmpty()) {
     
    220247    }
    221248
     249    /** @deprecated unused */
    222250    public void renderStatusHTML(Writer out) throws IOException {}
    223251   
    224252    private class CleanupTask implements SimpleTimer.TimedEvent {
    225253        private long _nextExpire;
     254
    226255        public CleanupTask() {
    227256            _nextExpire = -1;
    228257        }
     258
    229259        public void timeReached() {
    230260            long now = _context.clock().now();
    231             List removing = new ArrayList(1);
     261            List<MessageSelector> removing = new ArrayList(1);
    232262            synchronized (_selectors) {
    233                 for (int i = 0; i < _selectors.size(); i++) {
    234                     MessageSelector sel = (MessageSelector)_selectors.get(i);
    235                     if (sel == null) continue;
     263                for (Iterator<MessageSelector> iter = _selectors.iterator(); iter.hasNext(); ) {
     264                    MessageSelector sel = iter.next();
    236265                    long expiration = sel.getExpiration();
    237266                    if (expiration <= now) {
    238267                        removing.add(sel);
    239                         _selectors.remove(i);
    240                         i--;
     268                        iter.remove();
    241269                    } else if (expiration < _nextExpire || _nextExpire < now) {
    242270                        _nextExpire = expiration;
     
    245273            }
    246274            if (!removing.isEmpty()) {
    247                 for (int i = 0; i < removing.size(); i++) {
    248                     MessageSelector sel = (MessageSelector)removing.get(i);
     275                for (MessageSelector sel : removing) {
    249276                    OutNetMessage msg = null;
    250                     List msgs = null;
     277                    List<OutNetMessage> msgs = null;
    251278                    synchronized (_selectorToMessage) {
    252279                        Object o = _selectorToMessage.remove(sel);
     
    255282                        } else if (o instanceof List) {
    256283                            //msgs = new ArrayList((List)o);
    257                             msgs = (List)o;
     284                            msgs = (List<OutNetMessage>)o;
    258285                        }
    259286                    }
     
    269296                            _activeMessages.removeAll(msgs);
    270297                        }
    271                         for (int j = 0; j < msgs.size(); j++) {
    272                             msg = (OutNetMessage)msgs.get(j);
    273                             Job fail = msg.getOnFailedReplyJob();
     298                        for (OutNetMessage m : msgs) {
     299                            Job fail = m.getOnFailedReplyJob();
    274300                            if (fail != null)
    275301                                _context.jobQueue().addJob(fail);
     
    283309            SimpleTimer.getInstance().addEvent(CleanupTask.this, _nextExpire - now);
    284310        }
     311
    285312        public void scheduleExpiration(MessageSelector sel) {
    286313            long now = _context.clock().now();
Note: See TracChangeset for help on using the changeset viewer.