package org.limewire.friend.impl.feature; import org.limewire.friend.api.FileMetaData; import org.limewire.friend.api.FileOffer; import org.limewire.friend.api.FileOfferEvent; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.FeatureInitializer; import org.limewire.friend.api.feature.FeatureRegistry; import org.limewire.friend.api.feature.FeatureTransport; import org.limewire.friend.api.feature.FileOfferFeature; import org.limewire.listener.EventBroadcaster; import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton public class FileOfferFeatureTransportHandler implements FeatureTransport.Handler<FileMetaData>{ private final EventBroadcaster<FileOfferEvent> fileOfferBroadcaster; @Inject public FileOfferFeatureTransportHandler(FeatureRegistry featureRegistry, EventBroadcaster<FileOfferEvent> fileOfferBroadcaster) { this.fileOfferBroadcaster = fileOfferBroadcaster; new FileOfferInitializer().register(featureRegistry); } @Override public void featureReceived(String from, FileMetaData feature) { // TODO async? fileOfferBroadcaster.broadcast(new FileOfferEvent(new FileOffer(feature, from), FileOfferEvent.Type.OFFER)); // TODO send acceptance or rejection; // TODO only needed for user feedback } private class FileOfferInitializer implements FeatureInitializer { @Override public void register(FeatureRegistry registry) { registry.registerPublicInitializer(FileOfferFeature.ID, this); } @Override public void initializeFeature(FriendPresence friendPresence) { friendPresence.addFeature(new FileOfferFeature()); } @Override public void removeFeature(FriendPresence friendPresence) { friendPresence.removeFeature(FileOfferFeature.ID); } } }