/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.redPandaLib.core; import java.io.IOException; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.util.Iterator; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import org.redPandaLib.Main; /** * * @author robin */ public class ConnectionHandlerConnect extends Thread { private static Selector selector; static { try { selector = Selector.open(); } catch (IOException ex) { Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex); } } @Override public void run() { while (!Main.shutdown) { final String orgName = Thread.currentThread().getName(); if (!orgName.contains(" ")) { Thread.currentThread().setName(orgName + " - ConnectionHandlerConnect"); } try { int readyChannels = selector.select(); System.out.println("rdy chans: " + readyChannels); Set<SelectionKey> selectedKeys = selector.selectedKeys(); if (readyChannels == 0 && selectedKeys.isEmpty()) { //System.out.print("."); try { sleep(100); } catch (InterruptedException ex) { Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex); } continue; } Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); keyIterator.remove(); if (!key.isValid()) { System.out.println("hmmm"); key.cancel(); //keyIterator.remove(); continue; } Peer peer = (Peer) key.attachment(); if (key.isConnectable()) { System.out.println("try to finsih connection"); boolean connected = false; System.out.println("finish con"); try { connected = peer.getSocketChannel().finishConnect(); } catch (IOException e) { } System.out.println("finished!"); if (!connected) { Log.put("connection could not be established...", 150); key.cancel(); peer.setConnected(false); peer.isConnecting = false; try { peer.getSocketChannel().close(); } catch (IOException ex) { Logger.getLogger(ConnectionHandlerConnect.class.getName()).log(Level.SEVERE, null, ex); } continue; } //System.out.println("Connection established..."); key.cancel(); peer.isConnecting = false; peer.setConnected(true); // a connection was established with a remote server. } } } catch (IOException ex) { Logger.getLogger(ConnectionHandlerConnect.class.getName()).log(Level.SEVERE, null, ex); } } } }