/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package network.thunder.core.communication.nio; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import network.thunder.core.communication.nio.handler.ChannelInit; import network.thunder.core.communication.objects.messages.interfaces.factories.ContextFactory; import network.thunder.core.mesh.NodeClient; /** */ public final class P2PClient { ContextFactory contextFactory; public P2PClient (ContextFactory contextFactory) { this.contextFactory = contextFactory; } //We will add a new handler for the different layers //Furthermore, we will add a new handler for the different message types, //as it will greatly improve readability and maintainability of the code. public void connectTo (NodeClient node) { new Thread(new Runnable() { @Override public void run () { while (!node.isConnected) { //TODO Refactor try { connect(node); } catch (Exception e) { //Not able to connect? try { Thread.sleep(60 * 1000); } catch (InterruptedException e1) { e1.printStackTrace(); } e.printStackTrace(); } } } }).start(); } public void connectBlocking (NodeClient node) { connect(node); } private void connect (NodeClient node) { try { System.out.println("Connect to " + node.host + ":" + node.port + " - " + node.intent); EventLoopGroup group = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class).handler(new ChannelInit(contextFactory, node)); // Start the connection attempt. Channel ch = b.connect(node.host, node.port).sync().channel(); node.isConnected = ch.isOpen(); ch.closeFuture().sync(); System.out.println("Connection to " + node.host + " closed.."); } catch (Exception e) { throw new RuntimeException(e); } } }