litesoft
@ 947
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
// This Source Code is in the Public Domain per: http://unlicense.org package org.litesoft.GWT.eventbus.client.nonpublic; import java.util.*; import org.litesoft.GWT.eventbus.client.*; import org.litesoft.logger.*; public class StatePeerSupportingEventBusSuspended extends StatePeerSupportingEventBus { private Logger mOriginalLogger; private TrackingEBMcollector mCollector; private RemotePeerService mRemotePeerService; public StatePeerSupportingEventBusSuspended( Logger pLogger, // PeerSupportingEventBus pPeerSupportingEventBus, // RemotePeerService pRemotePeerService ) { super( PrefixingLogger.decorate( "(Collecting)", pLogger ), pPeerSupportingEventBus, new SavedEventsExpectingResponseTracker( pLogger ) ); mOriginalLogger = pLogger; mCollector = new TrackingEBMcollector( mLogger ); mRemotePeerService = pRemotePeerService; } public void disposing() { } public synchronized void dispose() { mRemotePeerService = null; if ( mCollector != null ) { mCollector.clear(); mCollector = null; // should be passed to Regular... } if ( mSavedEventsExpectingResponseTracker != null ) { mSavedEventsExpectingResponseTracker.clear(); mSavedEventsExpectingResponseTracker = null; // should be passed to Regular... } super.dispose(); } public synchronized IStatePeerSupportingEventBus suspendedToRegular( EventConstrictor pEventConstrictor, EventBus pEventBus ) { StatePeerSupportingEventBusRegular regular = // new StatePeerSupportingEventBusRegular( mOriginalLogger, mPeerSupportingEventBus, // pEventConstrictor, pEventBus, // new ProcessingManagerClientImpl(), // mRemotePeerService, // mCollector, // mSavedEventsExpectingResponseTracker ); mCollector = null; mSavedEventsExpectingResponseTracker = null; return regular; } public synchronized void publishExpectingResponse( EventPackage pPackage ) { String sourceName = pPackage.getSourceName(); if ( !mCollector.hasPendingSubscribeWith( sourceName ) ) { throw new IllegalArgumentException( "No Subscribers for '" + sourceName + "' in Event: " + pPackage ); } mSavedEventsExpectingResponseTracker.add( pPackage ); } public boolean releaseCollected() { return true; // Do nothing... } protected EventBusMessageCollector getEventBusMessageCollector() { return mCollector; } public String toString() { return super.toString() + "Suspended"; } private static class TrackingEBMcollector extends EventBusMessageCollector { private Set mPendingSubscribeWiths = new HashSet(); public TrackingEBMcollector( Logger pLogger ) { super( pLogger ); } public boolean hasPendingSubscribeWith( String pName ) { return mPendingSubscribeWiths.contains( pName ); } public void addSubscribes( EventSubscriptionStructure[] pSubscriptions ) { super.addSubscribes( pSubscriptions ); for ( int i = 0; i < pSubscriptions.length; i++ ) { EventSubscriptionStructure subscription = pSubscriptions[i]; if ( subscription != null ) { mPendingSubscribeWiths.add( subscription.getSubscribeWith() ); } } } public void addUnsubscribes( EventSubscriptionStructure[] pSubscriptions ) { super.addUnsubscribes( pSubscriptions ); for ( int i = 0; i < pSubscriptions.length; i++ ) { EventSubscriptionStructure subscription = pSubscriptions[i]; if ( subscription != null ) { mPendingSubscribeWiths.remove( subscription.getSubscribeWith() ); } } } public void clear() { super.clear(); mPendingSubscribeWiths.clear(); } } } |