Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

Commit

Permalink
This is better
Browse files Browse the repository at this point in the history
  • Loading branch information
rkapsi committed Sep 30, 2011
1 parent 8495400 commit a110040
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 34 deletions.
43 changes: 43 additions & 0 deletions components/core/src/main/java/org/ardverk/dht/ArdverkModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.ardverk.dht;

import java.net.SocketAddress;
import java.util.concurrent.TimeUnit;

import javax.inject.Singleton;

import org.ardverk.dht.routing.Identity;
import org.ardverk.dht.storage.Datastore;
import org.ardverk.dht.storage.TransientDatastore;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;

public class ArdverkModule extends AbstractModule {

private final KUID contactId;

private final SocketAddress address;

public ArdverkModule(int keySize, SocketAddress address) {
this(KUID.createRandom(keySize), address);
}

public ArdverkModule(KUID contactId, SocketAddress address) {
this.contactId = contactId;
this.address = address;
}

@Override
protected void configure() {
}

@Provides @Singleton
Identity getIdentity() {
return new Identity(contactId, address);
}

@Provides @Singleton
Datastore getDatastore() {
return new TransientDatastore(30L, TimeUnit.MINUTES);
}
}
46 changes: 14 additions & 32 deletions components/core/src/main/java/org/ardverk/dht/Factory.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,13 @@

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.concurrent.TimeUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.inject.Singleton;

import org.ardverk.dht.routing.Identity;
import org.ardverk.dht.storage.Datastore;
import org.ardverk.dht.storage.TransientDatastore;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Provides;

public class Factory {

Expand All @@ -30,35 +24,23 @@ private Factory(int keySize) {
this.keySize = keySize;
}

public DHT newDHT(int port) {
return newDHT(new InetSocketAddress(port));
}

public DHT newDHT(int port, Datastore datastore) {
return newDHT(new InetSocketAddress(port), datastore);
public DHT newDHT(int port, Module... modules) {
return newDHT(new InetSocketAddress(port), modules);
}

public DHT newDHT(SocketAddress address) {
return newDHT(address, new TransientDatastore(30L, TimeUnit.MINUTES));
public DHT newDHT(String host, int port, Module... modules) {
return newDHT(InetSocketAddress.createUnresolved(host, port), modules);
}

public DHT newDHT(SocketAddress address, Datastore datastore) {
return createInjector(address, datastore).getInstance(DHT.class);
public DHT newDHT(SocketAddress address, Module... modules) {
return createInjector(address, modules).getInstance(DHT.class);
}

public Injector createInjector(final SocketAddress address, final Datastore datastore) {
Module module = new AbstractModule() {
@Override
protected void configure() {
bind(Datastore.class).toInstance(datastore);
}

@Provides @Singleton
Identity getIdentity() {
return new Identity(keySize, address);
}
};
public Injector createInjector(SocketAddress address, Module... modules) {
List<Module> m = new ArrayList<Module>();
m.add(new ArdverkModule(keySize, address));
m.addAll(Arrays.asList(modules));

return Guice.createInjector(module);
return Guice.createInjector(m);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import org.ardverk.dht.io.transport.DatagramTransport;
import org.ardverk.dht.routing.Contact;
import org.ardverk.dht.routing.DefaultRouteTable;
import org.ardverk.dht.storage.TransientDatastore;
import org.ardverk.dht.utils.XorComparator;
import org.ardverk.io.IoUtils;
import org.junit.Test;
Expand All @@ -56,7 +55,7 @@ private static List<DHT> createDHTs(int count, int port) throws IOException {
for (int i = 0; i < count; i++) {
int prt = port+i;

DHT dht = factory.newDHT(prt, new TransientDatastore(30L, TimeUnit.MINUTES));
DHT dht = factory.newDHT(prt);

dht.bind(new DatagramTransport(
new BencodeMessageCodec(), prt));
Expand Down

0 comments on commit a110040

Please sign in to comment.