diff --git a/ethereumj-core/src/main/java/org/ethereum/core/Wallet.java b/ethereumj-core/src/main/java/org/ethereum/core/Wallet.java index cf36b311..d223b87e 100644 --- a/ethereumj-core/src/main/java/org/ethereum/core/Wallet.java +++ b/ethereumj-core/src/main/java/org/ethereum/core/Wallet.java @@ -44,7 +44,6 @@ public class Wallet { AddressState addressState = new AddressState(); String address = Hex.toHexString(addressState.getEcKey().getAddress()); rows.put(address, addressState); - for (WalletListener listener : listeners) listener.valueChanged(); } @@ -53,7 +52,6 @@ public class Wallet { AddressState addressState = new AddressState(ECKey.fromPrivate(privKey)); String address = Hex.toHexString(addressState.getEcKey().getAddress()); rows.put(address, addressState); - notifyListeners(); } diff --git a/ethereumj-core/src/main/java/org/ethereum/gui/ConnectionConsoleWindow.java b/ethereumj-core/src/main/java/org/ethereum/gui/ConnectionConsoleWindow.java index ceefa24d..82b870c3 100644 --- a/ethereumj-core/src/main/java/org/ethereum/gui/ConnectionConsoleWindow.java +++ b/ethereumj-core/src/main/java/org/ethereum/gui/ConnectionConsoleWindow.java @@ -69,15 +69,14 @@ public class ConnectionConsoleWindow extends JFrame implements PeerListener{ Thread t = new Thread() { public void run() { - new ClientPeer(thisConsole).connect("54.201.28.117", 30303); // peer discovery +// new ClientPeer(thisConsole).connect("54.201.28.117", 30303); // peer discovery // new ClientPeer(thisConsole).connect("82.217.72.169", 30303); // Nick // new ClientPeer(thisConsole).connect("54.204.10.41", 30303); -// new ClientPeer(thisConsole).connect("54.211.14.10", 30303); // new ClientPeer(thisConsole).connect("54.204.10.41", 30303); // CPP: ZeroGox Poc5 -// new ClientPeer(thisConsole).connect("54.211.14.10", 40404); // CPP: ver16 + new ClientPeer(thisConsole).connect("54.211.14.10", 40404); // RomanJ // new ClientPeer(thisConsole).connect("192.168.1.102", 30303); } diff --git a/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableModel.java b/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableModel.java index 578d027d..77c96bfb 100644 --- a/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableModel.java +++ b/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableModel.java @@ -3,14 +3,14 @@ package org.ethereum.gui; import java.net.InetAddress; import java.net.URL; import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; +import java.util.*; import javax.swing.ImageIcon; import javax.swing.table.AbstractTableModel; import org.ethereum.geodb.IpGeoDB; +import org.ethereum.manager.MainData; +import org.ethereum.net.client.PeerData; import org.ethereum.util.Utils; import com.maxmind.geoip.Location; @@ -22,12 +22,16 @@ import com.maxmind.geoip.Location; */ public class PeersTableModel extends AbstractTableModel { - private static final long serialVersionUID = -6984988938009834569L; - private List peerInfoList = new ArrayList(); + Timer updater = new Timer(); public PeersTableModel() { - generateRandomData(); + + updater.scheduleAtFixedRate(new TimerTask() { + public void run() { + updateModel(); + } + }, 0, 1000); } public String getColumnName(int column) { @@ -81,38 +85,14 @@ public class PeersTableModel extends AbstractTableModel { return 3; } - // todo: delete it when stabilized - private void generateRandomData(){ + public void updateModel(){ + synchronized (peerInfoList){ - List ips = new ArrayList(); - ips.add("206.223.168.190"); - ips.add("94.210.200.192"); - ips.add("88.69.198.198"); - ips.add("62.78.198.208"); - ips.add("71.202.162.40"); - ips.add("78.55.236.218"); - ips.add("94.197.120.80"); - ips.add("85.65.126.45"); - - ips.add("110.77.217.185"); - ips.add("64.231.9.30"); - ips.add("162.243.203.121"); - ips.add("82.217.72.169"); - - ips.add("99.231.80.166"); - ips.add("131.104.252.4"); - ips.add("54.204.10.41"); - ips.add("54.201.28.117"); - ips.add("82.240.16.5"); - ips.add("74.79.23.119"); - - for (String peer : ips){ - try { - InetAddress addr = InetAddress.getByName(peer); + peerInfoList.clear(); + for (PeerData peer : MainData.instance.getPeers()){ + InetAddress addr = peer.getInetAddress(); Location cr = IpGeoDB.getLocationForIp(addr); - peerInfoList.add(new PeerInfo(cr, addr)); - } catch (UnknownHostException e) { - e.printStackTrace(); + peerInfoList.add(new PeerInfo(cr, addr, peer.isOnline())); } } } @@ -123,12 +103,10 @@ public class PeersTableModel extends AbstractTableModel { InetAddress ip; boolean connected; - private PeerInfo(Location location, InetAddress ip) { + private PeerInfo(Location location, InetAddress ip, boolean isConnected) { this.location = location; this.ip = ip; - - Random random = new Random(); - connected = random.nextBoolean(); + this.connected = isConnected; } private InetAddress getIp() { diff --git a/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableWindow.java b/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableWindow.java index 169f08cd..74fc19ec 100644 --- a/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableWindow.java +++ b/ethereumj-core/src/main/java/org/ethereum/gui/PeersTableWindow.java @@ -1,10 +1,8 @@ package org.ethereum.gui; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Font; -import java.awt.Image; -import java.awt.Toolkit; +import java.awt.*; +import java.util.Timer; +import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JPanel; @@ -26,6 +24,8 @@ public class PeersTableWindow extends JFrame{ private JPanel topPanel; private JTable table; private JScrollPane scrollPane; + private Timer updater = new Timer(); + // Constructor of main frame public PeersTableWindow() { @@ -71,6 +71,15 @@ public class PeersTableWindow extends JFrame{ // Add the table to a scrolling pane scrollPane = new JScrollPane(table); topPanel.add(scrollPane, BorderLayout.CENTER); + + updater.scheduleAtFixedRate(new TimerTask() { + public void run() { + table.revalidate(); + table.repaint(); + System.out.println("repaint"); + } + }, 1000, 1000); + } public static void main(String args[]) { diff --git a/ethereumj-core/src/main/java/org/ethereum/gui/ToolBar.java b/ethereumj-core/src/main/java/org/ethereum/gui/ToolBar.java index 49f0b240..d96229e2 100644 --- a/ethereumj-core/src/main/java/org/ethereum/gui/ToolBar.java +++ b/ethereumj-core/src/main/java/org/ethereum/gui/ToolBar.java @@ -1,5 +1,7 @@ package org.ethereum.gui; +import org.ethereum.manager.MainData; + import javax.swing.*; import java.awt.*; @@ -193,6 +195,9 @@ public class ToolBar extends JFrame { cp.add(peersToggle); cp.add(chainToggle); cp.add(walletToggle); + + + MainData.instance.toString(); } public static void main(String args[]){ diff --git a/ethereumj-core/src/main/java/org/ethereum/manager/MainData.java b/ethereumj-core/src/main/java/org/ethereum/manager/MainData.java index 69d6bd91..98a47b3b 100644 --- a/ethereumj-core/src/main/java/org/ethereum/manager/MainData.java +++ b/ethereumj-core/src/main/java/org/ethereum/manager/MainData.java @@ -1,18 +1,25 @@ package org.ethereum.manager; +import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import com.maxmind.geoip.Location; import org.ethereum.core.Block; import org.ethereum.core.Genesis; import org.ethereum.core.Transaction; import org.ethereum.core.Wallet; +import org.ethereum.crypto.ECKey; import org.ethereum.crypto.HashUtil; +import org.ethereum.geodb.IpGeoDB; import org.ethereum.net.client.ClientPeer; import org.ethereum.net.client.PeerData; import org.ethereum.net.message.StaticMessages; +import org.ethereum.net.peerdiscovery.PeerDiscovery; +import org.ethereum.net.peerdiscovery.WorkerThread; +import org.ethereum.wallet.AddressState; import org.spongycastle.util.encoders.Hex; /** @@ -27,29 +34,29 @@ public class MainData { private Wallet wallet = new Wallet(); private ClientPeer activePeer; + PeerDiscovery peerDiscovery; + public static MainData instance = new MainData(); public MainData() { - wallet.importKey(HashUtil.sha3("cow".getBytes())); + PeerData peer = new PeerData( + new byte[]{54 , (byte)201, 28, 117}, (short) 30303, new byte[]{00}); + peers.add(peer); + + + byte[] cowAddr = HashUtil.sha3("cow".getBytes()); + ECKey key = ECKey.fromPrivate(cowAddr); + + wallet.importKey(cowAddr); + AddressState state = wallet.getAddressState(key.getAddress()); + state.addToBalance(new BigInteger("1606938044258990275541962092341162602522202993782792835301376")); wallet.importKey(HashUtil.sha3("cat".getBytes())); + + peerDiscovery = new PeerDiscovery(peers); + peerDiscovery.start(); } - public void addPeers(List newPeers){ - - for (PeerData peer : newPeers){ - if (this.peers.indexOf(peer) == -1){ - this.peers.add(peer); - } - } - -// for (PeerData peerData : this.peers){ -// Location location = IpGeoDB.getLocationForIp(peerData.getInetAddress()); -// if (location != null) -// System.out.println("Hello: " + " [" + peerData.getInetAddress().toString() -// + "] " + location.countryName); -// } - } public void addBlocks(List blocks) { @@ -113,4 +120,33 @@ public class MainData { public List getPeers() { return peers; } + + public void updatePeerIsDead(String ip, short port){ + + for (PeerData peer : peers) { + + if (peer.getInetAddress().getHostAddress().equals(ip) && (peer.getPort() == port)){ + + System.out.println("update peer is dead: " + ip + ":" + port); + peer.setOnline(false); + break; + } + } + } + + public void addPeers(List newPeers){ + + for (PeerData peer : newPeers){ + if (this.peers.indexOf(peer) == -1){ + + Location location = IpGeoDB.getLocationForIp(peer.getInetAddress()); + if (location != null){ + this.peers.add(peer); + peerDiscovery.addNewPeerData(peer); + } + } + } + + } + } diff --git a/ethereumj-core/src/main/java/org/ethereum/net/client/PeerData.java b/ethereumj-core/src/main/java/org/ethereum/net/client/PeerData.java index fc3130bd..59bc5273 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/client/PeerData.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/client/PeerData.java @@ -13,7 +13,7 @@ import java.net.UnknownHostException; public class PeerData { private byte[] ip; - private short port; + private int port; private byte[] peerId; private transient boolean isOnline = false; @@ -21,7 +21,7 @@ public class PeerData { public PeerData(byte[] ip, short port, byte[] peerId) { this.ip = ip; - this.port = port; + this.port = port & 0xFFFF; this.peerId = peerId; } @@ -40,7 +40,7 @@ public class PeerData { return ip; } - public short getPort() { + public int getPort() { return port; } diff --git a/ethereumj-core/src/main/java/org/ethereum/net/message/PeerTaster.java b/ethereumj-core/src/main/java/org/ethereum/net/message/PeerTaster.java index b15ee0d7..a6c9ebf0 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/message/PeerTaster.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/message/PeerTaster.java @@ -13,7 +13,7 @@ import io.netty.handler.timeout.ReadTimeoutHandler; import org.ethereum.gui.PeerListener; import org.ethereum.manager.MainData; import org.ethereum.net.client.EthereumFrameDecoder; -import org.ethereum.net.client.EthereumPeerTasterHandler; +import org.ethereum.net.peerdiscovery.EthereumPeerTasterHandler; import org.ethereum.net.client.PeerData; /** diff --git a/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumPeerTasterHandler.java b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/EthereumPeerTasterHandler.java similarity index 79% rename from ethereumj-core/src/main/java/org/ethereum/net/client/EthereumPeerTasterHandler.java rename to ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/EthereumPeerTasterHandler.java index 180d9558..ffea0dcd 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/client/EthereumPeerTasterHandler.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/EthereumPeerTasterHandler.java @@ -1,4 +1,4 @@ -package org.ethereum.net.client; +package org.ethereum.net.peerdiscovery; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -74,8 +74,6 @@ public class EthereumPeerTasterHandler extends ChannelInboundHandlerAdapter { sendPing(ctx); } }, 2000, 5000); - - } @Override @@ -141,8 +139,6 @@ public class EthereumPeerTasterHandler extends ChannelInboundHandlerAdapter { ctx.close().sync(); ctx.disconnect().sync(); - - } } @@ -164,16 +160,8 @@ public class EthereumPeerTasterHandler extends ChannelInboundHandlerAdapter { ctx.close().sync(); ctx.disconnect().sync(); - } - private void sendMsg(Message msg, ChannelHandlerContext ctx){ - byte[] data = msg.getPayload(); - final ByteBuf buffer = ctx.alloc().buffer(data.length + 8); - byte[] packetLen = ByteUtil.calcPacketLength(data); - - buffer.writeBytes(MAGIC_PREFIX); - buffer.writeBytes(packetLen); - ctx.writeAndFlush(buffer); + throw new Error("Peer is dead"); } private void sendPing(ChannelHandlerContext ctx){ @@ -202,30 +190,4 @@ public class EthereumPeerTasterHandler extends ChannelInboundHandlerAdapter { ctx.writeAndFlush(buffer); } - private void sendGetTransactions(ChannelHandlerContext ctx){ - ByteBuf buffer = ctx.alloc().buffer(StaticMessages.GET_TRANSACTIONS.length); - buffer.writeBytes(StaticMessages.GET_TRANSACTIONS); - ctx.writeAndFlush(buffer); - } - - private void sendGetChain(ChannelHandlerContext ctx){ - - byte[] hash = MainData.instance.getLatestBlockHash(); - GetChainMessage chainMessage = new GetChainMessage((byte)100, hash); - - ByteBuf buffer = ctx.alloc().buffer(chainMessage.getPayload().length + 8); - buffer.writeBytes(StaticMessages.MAGIC_PACKET); - buffer.writeBytes(ByteUtil.calcPacketSize(chainMessage.getPayload())); - buffer.writeBytes(chainMessage.getPayload()); - - ctx.writeAndFlush(buffer); - } - - private void sendTx(ChannelHandlerContext ctx){ - byte[] TX_MSG = - Hex.decode("2240089100000070F86E12F86B80881BC16D674EC8000094CD2A3D9F938E13CD947EC05ABC7FE734DF8DD8268609184E72A00064801BA0C52C114D4F5A3BA904A9B3036E5E118FE0DBB987FE3955DA20F2CD8F6C21AB9CA06BA4C2874299A55AD947DBC98A25EE895AABF6B625C26C435E84BFD70EDF2F69"); - ByteBuf buffer = ctx.alloc().buffer(TX_MSG.length); - buffer.writeBytes(TX_MSG); - ctx.writeAndFlush(buffer); - } } \ No newline at end of file diff --git a/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscovery.java b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscovery.java new file mode 100644 index 00000000..6b8979c2 --- /dev/null +++ b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscovery.java @@ -0,0 +1,100 @@ +package org.ethereum.net.peerdiscovery; + + +import org.ethereum.manager.MainData; +import org.ethereum.net.client.PeerData; +import samples.threadpool.MyMonitorThread; +import samples.threadpool.RejectedExecutionHandlerImpl; + +import java.util.List; +import java.util.concurrent.*; + +/** + * www.ethereumJ.com + * User: Roman Mandeleil + * Created on: 22/05/2014 09:10 + */ + +public class PeerDiscovery { + + RejectedExecutionHandlerImpl rejectionHandler; + ThreadFactory threadFactory; + ThreadPoolExecutor executorPool; + PeerDiscoveryMonitorThread monitor; + List peers; + + public PeerDiscovery(List peers) { + this.peers = peers; + } + + public void start(){ + + //RejectedExecutionHandler implementation + rejectionHandler = new RejectedExecutionHandlerImpl(); + + //Get the ThreadFactory implementation to use + threadFactory = Executors.defaultThreadFactory(); + + //creating the ThreadPoolExecutor + executorPool = new ThreadPoolExecutor(1, 5, 10, TimeUnit.SECONDS, + new ArrayBlockingQueue(2), threadFactory, rejectionHandler); + + //start the monitoring thread + monitor = new PeerDiscoveryMonitorThread(executorPool, 3); + Thread monitorThread = new Thread(monitor); + monitorThread.start(); + + for (PeerData peerData : this.peers) { + executorPool.execute(new WorkerThread(peerData, executorPool)); + } + + } + + public void addNewPeerData(PeerData peerData){ + executorPool.execute(new WorkerThread(peerData, executorPool)); + } + + public void stop(){ + executorPool.shutdown(); + monitor.shutdown(); + } + + + // todo: this main here for test erase it once upon a time + public static void main(String args[]) throws InterruptedException{ + + //RejectedExecutionHandler implementation + RejectedExecutionHandlerImpl rejectionHandler = new RejectedExecutionHandlerImpl(); + + //Get the ThreadFactory implementation to use + ThreadFactory threadFactory = Executors.defaultThreadFactory(); + + //creating the ThreadPoolExecutor + ThreadPoolExecutor executorPool = new ThreadPoolExecutor(2, 4, 10, TimeUnit.SECONDS, + new ArrayBlockingQueue(2), threadFactory, rejectionHandler); + + //start the monitoring thread + PeerDiscoveryMonitorThread monitor = new PeerDiscoveryMonitorThread(executorPool, 3); + Thread monitorThread = new Thread(monitor); + monitorThread.start(); + + //submit work to the thread pool + PeerData peer = new PeerData(new byte[]{54, (byte)211, 14, 10}, (short) 30303, new byte[]{00}); + executorPool.execute(new WorkerThread(peer, executorPool)); + + PeerData peer2 = new PeerData(new byte[]{54 , (byte)201, 28, 117}, (short) 30303, new byte[]{00}); + executorPool.execute(new WorkerThread(peer2, executorPool)); + + PeerData peer3 = new PeerData(new byte[]{54, (byte)211, 14, 10}, (short) 40404, new byte[]{00}); + executorPool.execute(new WorkerThread(peer3, executorPool)); + + Thread.sleep(30000); + //shut down the pool + executorPool.shutdown(); + //shut down the monitor thread + Thread.sleep(5000); + monitor.shutdown(); + + } +} + diff --git a/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscoveryMonitorThread.java b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscoveryMonitorThread.java new file mode 100644 index 00000000..9aa23000 --- /dev/null +++ b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerDiscoveryMonitorThread.java @@ -0,0 +1,47 @@ +package org.ethereum.net.peerdiscovery; + +import org.ethereum.manager.MainData; + +import java.util.concurrent.ThreadPoolExecutor; + +public class PeerDiscoveryMonitorThread implements Runnable +{ + private ThreadPoolExecutor executor; + + private int seconds; + + private boolean run=true; + + public PeerDiscoveryMonitorThread(ThreadPoolExecutor executor, int delay) + { + this.executor = executor; + this.seconds=delay; + } + + public void shutdown(){ + this.run=false; + } + + @Override + public void run() + { + while(run){ + System.out.println( + String.format("[monitor] [%d/%d] Active: %d, Completed: %d, Task: %d, isShutdown: %s, isTerminated: %s, peersDiscovered: %d ", + this.executor.getPoolSize(), + this.executor.getCorePoolSize(), + this.executor.getActiveCount(), + this.executor.getCompletedTaskCount(), + this.executor.getTaskCount(), + this.executor.isShutdown(), + this.executor.isTerminated(), + MainData.instance.getPeers().size())); + try { + Thread.sleep(seconds*1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + } +} \ No newline at end of file diff --git a/ethereumj-core/src/main/java/org/ethereum/net/client/PeerTaster.java b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerTaster.java similarity index 60% rename from ethereumj-core/src/main/java/org/ethereum/net/client/PeerTaster.java rename to ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerTaster.java index f0446704..a21a54f3 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/client/PeerTaster.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/PeerTaster.java @@ -1,19 +1,18 @@ -package org.ethereum.net.client; +package org.ethereum.net.peerdiscovery; import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBuf; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.timeout.ReadTimeoutHandler; -import org.ethereum.core.Transaction; import org.ethereum.gui.PeerListener; import org.ethereum.manager.MainData; -import org.ethereum.net.message.StaticMessages; -import org.ethereum.net.message.TransactionsMessage; -import org.ethereum.util.Utils; -import org.spongycastle.util.encoders.Hex; +import org.ethereum.net.client.EthereumFrameDecoder; +import org.ethereum.net.client.PeerData; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; @@ -39,6 +38,7 @@ public class PeerTaster { EventLoopGroup workerGroup = new NioEventLoopGroup(); try { + Bootstrap b = new Bootstrap(); b.group(workerGroup); b.channel(NioSocketChannel.class); @@ -83,19 +83,30 @@ public class PeerTaster { PeerTaster peerTaster = new PeerTaster(); + ArrayList peers = new ArrayList(); + peers.add(new PeerData(new byte[]{54, (byte)211, 14, 10}, (short) 30303, null)); + MainData.instance.addPeers(peers); - try {peerTaster.connect("54.211.14.10", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("82.217.72.169", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.201.28.117", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.2.10.41", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("0.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.211.14.10", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("82.217.72.169", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.201.28.117", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.2.10.41", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("0.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} - try {peerTaster.connect("54.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} + String ip = "54.211.14.10"; + short port = 30303; + try { + peerTaster.connect(ip, port);} + catch (Throwable e) { + e.printStackTrace(); + MainData.instance.updatePeerIsDead(ip, port); + } + +// try {peerTaster.connect("82.217.72.169", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.201.28.117", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.2.10.41", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("0.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.211.14.10", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("82.217.72.169", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.201.28.117", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.2.10.41", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("0.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} +// try {peerTaster.connect("54.204.10.41", 30303);} catch (Exception e) {e.printStackTrace();} System.out.println("End of the roaad"); diff --git a/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/WorkerThread.java b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/WorkerThread.java new file mode 100644 index 00000000..f3310922 --- /dev/null +++ b/ethereumj-core/src/main/java/org/ethereum/net/peerdiscovery/WorkerThread.java @@ -0,0 +1,50 @@ +package org.ethereum.net.peerdiscovery; + +import org.ethereum.manager.MainData; +import org.ethereum.net.client.PeerData; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * www.ethereumJ.com + * User: Roman Mandeleil + * Created on: 22/05/2014 09:26 + */ + +public class WorkerThread implements Runnable { + + ThreadPoolExecutor poolExecutor; + private PeerData peerData; + + public WorkerThread(PeerData peerData, ThreadPoolExecutor poolExecutor){ + this.poolExecutor = poolExecutor; + this.peerData = peerData; + } + + @Override + public void run() { + System.out.println(Thread.currentThread().getName()+" Start. Command = "+ peerData.toString()); + processCommand(); + System.out.println(Thread.currentThread().getName()+" End."); + poolExecutor.execute(this); + } + + private void processCommand() { + + try { + PeerTaster peerTaster = new PeerTaster(); + peerTaster.connect(peerData.getInetAddress().getHostName(), peerData.getPort()); + peerData.setOnline(true); + System.out.println("Peer: " + peerData.toString() + " isOnline: true"); + } + catch (Throwable e) { + System.out.println("Peer: " + peerData.toString() + " isOnline: false"); + peerData.setOnline(false); + } + } + + @Override + public String toString(){ + return " Worker for: " + this.peerData.toString(); + } +} diff --git a/ethereumj-core/src/main/resources/system.properties b/ethereumj-core/src/main/resources/system.properties index c6979724..e1e8bd4c 100644 --- a/ethereumj-core/src/main/resources/system.properties +++ b/ethereumj-core/src/main/resources/system.properties @@ -13,4 +13,17 @@ server.acceptConnections = false # and read new wire msg if the timeout # fires the system will be looking for # another peer. [seconds] -connection.timeout = 10 \ No newline at end of file +connection.timeout = 10 + + + +# specify if the mechanism +# to discover more and more +# peers and check the already +# discovered peers is on [true/false] +peer.discovery = true + +# number of workers that +# tastes the peers for being +# online [1..10] +peer.discover.workers = 5 \ No newline at end of file