Example usage for io.netty.channel Channel isOpen

List of usage examples for io.netty.channel Channel isOpen

Introduction

In this page you can find the example usage for io.netty.channel Channel isOpen.

Prototype

boolean isOpen();

Source Link

Document

Returns true if the Channel is open and may get active later

Usage

From source file:dorkbox.network.connection.registration.remote.RegistrationRemoteHandler.java

License:Apache License

@Override
public void exceptionCaught(ChannelHandlerContext context, Throwable cause) throws Exception {
    Channel channel = context.channel();

    this.logger.error("Unexpected exception while trying to send/receive data on remote network channel.  ({})"
            + System.getProperty("line.separator"), channel.remoteAddress(), cause);

    if (channel.isOpen()) {
        channel.close();// w  ww  . j  ava  2 s.  c o m
    }
}

From source file:dorkbox.network.connection.Shutdownable.java

License:Apache License

void shutdownAllChannels() {
    synchronized (shutdownChannelList) {
        // now we stop all of our channels. For the server, this will close the server manager for UDP sessions
        for (ChannelFuture f : shutdownChannelList) {
            Channel channel = f.channel();
            if (channel.isOpen()) {
                // from the git example on how to shutdown a channel
                channel.close().syncUninterruptibly();
                Thread.yield();//from  www  .j a  v  a 2 s.  c  o m
            }
        }

        // we have to clear the shutdown list. (
        shutdownChannelList.clear();
    }
}

From source file:gash.impl.raft.manager.HeartbeatData.java

License:Apache License

/**
 * verify the connection is good and if not determine if it should be
 * disabled.//from   w  w  w  . j  a  va2s. c  o m
 * 
 * @return
 */
public boolean isGood() {
    if (status == BeatStatus.Active || status == BeatStatus.Weak) {
        Channel ch = ServerOpUtil.GetConnectionChannel(nodeId);
        boolean rtn = ch.isOpen() && ch.isWritable();
        if (!rtn) {
            // TODO how to use the weakThreshold and status

            lastFailed = System.currentTimeMillis();
            failures++;
            if (failures >= failureThreshold)
                status = BeatStatus.Failed;
            else if (failures >= weakTheshold)
                status = BeatStatus.Weak;
        } else {
            failures = 0;
            lastFailed = 0;
        }

        return rtn;
    } else
        return false;
}

From source file:gash.router.server.queue.CommandInboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.getChannel();
    if (conn == null || !conn.isOpen()) {
        logger.error("connection missing, no inboundWork communication");
        return;/*from  www.j  a  v  a 2s  .c  om*/
    }

    while (true) {
        if (!forever && sq.inboundWork.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.inboundWork.take();

            // process request and enqueue response
            if (msg instanceof Pipe.CommandRequest) {

                //PrintUtil.printCommand((Pipe.CommandRequest) msg);
                boolean msgDropFlag;

                Pipe.CommandRequest req = ((Pipe.CommandRequest) msg);
                Pipe.Payload payload = req.getPayload();
                if (payload.hasPing()) {
                    logger.info("ping from " + req.getHeader().getNodeId());
                    if (req.getHeader().getDestination() == sq.getRoutingConf().getNodeId()) {
                        //handle message by self
                        logger.info("Message for me: " + payload.getMessage() + " from "
                                + req.getHeader().getSourceHost());
                    } else { //message doesn't belong to current node. Forward on other edges
                        msgDropFlag = true;
                        PrintUtil.printCommand((Pipe.CommandRequest) msg);
                        if (MessageServer.getEmon() != null) {// forward if Comm-worker port is active
                            for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) {
                                if (ei.isActive() && ei.getChannel() != null) {// check if channel of outboundWork edge is active
                                    Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder();

                                    Common.Header.Builder hb = Common.Header.newBuilder();
                                    hb.setNodeId(sq.getRoutingConf().getNodeId());
                                    hb.setTime(req.getHeader().getTime());
                                    hb.setDestination(req.getHeader().getDestination());
                                    hb.setSourceHost(sq.getRoutingConf().getNodeId() + "_"
                                            + req.getHeader().getSourceHost());
                                    hb.setDestinationHost(req.getHeader().getDestinationHost());
                                    hb.setMaxHops(5);

                                    wb.setHeader(hb);
                                    wb.setSecret(1234567809);
                                    wb.setPayload(Work.Payload.newBuilder().setPing(true));

                                    Work.WorkRequest work = wb.build();

                                    PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue();
                                    edgeQueue.enqueueResponse(work, ei.getChannel());
                                    msgDropFlag = false;
                                    logger.info("Workmessage queued");
                                }
                            }
                            if (msgDropFlag)
                                logger.info("Message dropped <node,ping,destination>: <"
                                        + req.getHeader().getNodeId() + "," + payload.getPing() + ","
                                        + req.getHeader().getDestination() + ">");
                        } else {// drop the message or queue it for limited time to send to connected node
                                //todo
                            logger.info("No outbound edges to forward. To be handled");
                        }

                    }
                } else if (payload.hasMessage()) {
                    logger.info(payload.getMessage());
                } else {
                    //todo
                }

            }
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected processing failure", e);
            break;
        }
    }

    if (!forever) {
        logger.debug("connection queue closing");
    }
}

From source file:gash.router.server.queue.CommandOutboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.channel;
    if (conn == null || !conn.isOpen()) {
        PerChannelCommandQueue.logger.error("connection missing, no outboundWork communication");
        return;//from  www  . j a va2s .co  m
    }

    while (true) {
        if (!forever && sq.outboundWork.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.outboundWork.take();
            if (conn.isWritable()) {
                boolean rtn = false;
                if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) {

                    ChannelFuture cf = sq.channel.writeAndFlush(msg);

                    logger.info("Server--sending -- command -- response");
                    // blocks on write - use listener to be async
                    cf.awaitUninterruptibly();
                    logger.debug("Written to channel");
                    rtn = cf.isSuccess();
                    if (!rtn) {
                        System.out.println("Sending failed " + rtn + "{Reason:" + cf.cause() + "}");
                        sq.outboundWork.putFirst(msg);
                    } else
                        logger.info("Message Sent");
                }

            } else
                sq.outboundWork.putFirst(msg);
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected communcation failure", e);
            break;
        }
    }

    if (!forever) {
        logger.debug("connection queue closing");
    }
}

From source file:gash.router.server.queue.GlobalCommandInboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.getChannel();
    if (conn == null || !conn.isOpen()) {
        logger.error("connection missing, no inboundWork communication");
        return;//  ww w. j a v  a  2  s.co m
    }

    while (true) {
        if (!forever && sq.inboundWork.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.inboundWork.take();
            boolean msgDropFlag;

            // process request and enqueue response
            if (msg instanceof Global.GlobalCommandMessage) {

                //PrintUtil.printCommand((Pipe.CommandRequest) msg);
                Global.GlobalCommandMessage req = ((Global.GlobalCommandMessage) msg);

                if (req.hasPing()) {
                    /*logger.info("ping from " + req.getHeader().getNodeId());
                    if (req.getHeader().getDestination() == sq.getRoutingConf().getNodeId()) {
                       //handle message by self
                       logger.info("Message for me: " + req.getMessage() + " from " + req.getHeader().getSourceHost());
                    } else { //message doesn't belong to current node. Forward on other edges
                       msgDropFlag = true;
                       PrintUtil.printGlobalCommand((Global.GlobalCommandMessage) msg);
                       if (MessageServer.getEmon() != null) {// forward if Comm-worker port is active
                          for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) {
                             if (ei.isActive() && ei.getChannel() != null) {// check if channel of outboundWork edge is active
                      Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder();
                            
                      Common.Header.Builder hb = Common.Header.newBuilder();
                      hb.setNodeId(sq.getRoutingConf().getNodeId());
                      hb.setTime(req.getHeader().getTime());
                      hb.setDestination(req.getHeader().getDestination());
                      hb.setSourceHost(sq.getRoutingConf().getNodeId() + "_" + req.getHeader().getSourceHost());
                      hb.setDestinationHost(req.getHeader().getDestinationHost());
                      hb.setMaxHops(5);
                            
                      wb.setHeader(hb);
                      wb.setSecret(1234567809);
                      wb.setPayload(Work.Payload.newBuilder().setPing(true));
                            
                      Work.WorkRequest work = wb.build();
                            
                      PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue();
                      edgeQueue.enqueueResponse(work, ei.getChannel());
                      msgDropFlag = false;
                      logger.info("Workmessage queued");
                             }
                          }
                          if (msgDropFlag)
                             logger.info("Message dropped <node,ping,destination>: <" + req.getHeader().getNodeId() + "," + req.getPing() + "," + req.getHeader().getDestination() + ">");
                       } else {// drop the message or queue it for limited time to send to connected node
                          //todo
                          logger.info("No outbound edges to forward. To be handled");
                       }
                            
                    }*/
                    new Ping(sq).handle(req);
                } else if (req.hasQuery()) {
                    new Query(sq).handle(req);
                } else {
                    logger.error("Unexpected message type. Yet to handle.");
                }

            }
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected processing failure", e);
            break;
        }
    }

    if (!forever) {
        logger.info("Command incoming connection queue closing");
    }
}

From source file:gash.router.server.queue.GlobalCommandOutboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.channel;
    if (conn == null || !conn.isOpen()) {
        PerChannelGlobalCommandQueue.logger.error("connection missing, no outboundWork communication");
        return;/*from  ww  w  .  j  ava  2 s .  c  o m*/
    }

    while (true) {
        if (!forever && sq.outboundWork.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.outboundWork.take();
            if (conn.isWritable()) {
                boolean rtn = false;
                if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) {

                    ChannelFuture cf = sq.channel.writeAndFlush(msg);

                    logger.info("Server--sending -- command -- response");
                    // blocks on write - use listener to be async
                    cf.awaitUninterruptibly();
                    logger.debug("Written to channel");
                    rtn = cf.isSuccess();
                    if (!rtn) {
                        System.out.println("Sending failed " + rtn + "{Reason:" + cf.cause() + "}");
                        sq.outboundWork.putFirst(msg);
                    } else
                        logger.info("Message Sent");
                }

            } else
                sq.outboundWork.putFirst(msg);
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected communcation failure", e);
            break;
        }
    }

    if (!forever) {
        logger.info("connection queue closing");
    }
}

From source file:gash.router.server.queue.WorkInboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.getChannel();
    if (conn == null || !conn.isOpen()) {
        logger.error("connection missing, no inboundWork communication");
        return;/*from ww w .j av  a 2  s  .co  m*/
    }

    while (true) {
        if (!forever && sq.inbound.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.inbound.take();

            // process request and enqueue response

            if (msg instanceof Work.WorkRequest) {
                Work.WorkRequest req = ((Work.WorkRequest) msg);
                Work.Payload payload = req.getPayload();
                boolean msgDropFlag;

                //PrintUtil.printWork(req);
                if (payload.hasBeat()) {
                    //Work.Heartbeat hb = payload.getBeat();
                    logger.info("heartbeat from " + req.getHeader().getNodeId());
                    EdgeMonitor emon = MessageServer.getEmon();
                    EdgeInfo ei = new EdgeInfo(req.getHeader().getNodeId(), "", req.getHeader().getSource());
                    ei.setChannel(sq.getChannel());
                    emon.addToInbound(ei);
                    RaftManager.getInstance().assessCurrentState();
                } else if (payload.hasPing()) {
                    /*logger.info("ping from <node,host> : <" + req.getHeader().getNodeId() + ", " + req.getHeader().getSourceHost()+">");
                    PrintUtil.printWork(req);
                    if(req.getHeader().getDestination() == sq.state.getConf().getNodeId()){
                       //handle message by self
                       logger.info("Ping for me: " + " from "+ req.getHeader().getSourceHost());
                            
                       Work.WorkRequest.Builder rb = Work.WorkRequest.newBuilder();
                            
                       Common.Header.Builder hb = Common.Header.newBuilder();
                       hb.setNodeId(sq.state.getConf().getNodeId());
                       hb.setTime(System.currentTimeMillis());
                       hb.setDestination(Integer.parseInt(req.getHeader().getSourceHost().substring(req.getHeader().getSourceHost().lastIndexOf('_')+1)));
                       hb.setSourceHost(req.getHeader().getSourceHost().substring(req.getHeader().getSourceHost().indexOf('_')+1));
                       hb.setDestinationHost(req.getHeader().getSourceHost());
                       hb.setMaxHops(5);
                            
                       rb.setHeader(hb);
                       rb.setSecret(1234567809);
                       rb.setPayload(Work.Payload.newBuilder().setPing(true));
                       //channel.writeAndFlush(rb.build());
                       sq.enqueueResponse(rb.build(),sq.getChannel());
                    }
                    else { //message doesn't belong to current node. Forward on other edges
                       msgDropFlag = true;
                       PrintUtil.printWork(req);
                       if (req.getHeader().getMaxHops() > 0 && MessageServer.getEmon() != null) {// forward if Comm-worker port is active
                          for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) {
                             if (ei.isActive() && ei.getChannel() != null) {// check if channel of outbound edge is active
                      logger.debug("Workmessage being queued");
                      Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder();
                            
                      Common.Header.Builder hb = Common.Header.newBuilder();
                      hb.setNodeId(sq.state.getConf().getNodeId());
                      hb.setTime(req.getHeader().getTime());
                      hb.setDestination(req.getHeader().getDestination());
                      hb.setSourceHost(sq.state.getConf().getNodeId()+"_"+req.getHeader().getSourceHost());
                      hb.setDestinationHost(req.getHeader().getDestinationHost());
                      hb.setMaxHops(req.getHeader().getMaxHops() -1);
                            
                      wb.setHeader(hb);
                      wb.setSecret(1234567809);
                      wb.setPayload(Work.Payload.newBuilder().setPing(true));
                      //ei.getChannel().writeAndFlush(wb.build());
                      PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue();
                      edgeQueue.enqueueResponse(wb.build(),ei.getChannel());
                      msgDropFlag = false;
                      logger.debug("Workmessage queued");
                             }
                          }
                          if (msgDropFlag)
                             logger.info("Message dropped <node,ping,destination>: <" + req.getHeader().getNodeId() + "," + payload.getPing() + "," + req.getHeader().getDestination() + ">");
                       } else {// drop the message or queue it for limited time to send to connected node
                          //todo
                          logger.info("No outbound edges to forward. To be handled");
                       }
                    }*/
                    new Ping(sq).handle(req);

                } else if (payload.hasQuery()) {
                    logger.debug("Query message on work channel from " + req.getHeader().getNodeId());
                    new Query(sq).handle(req);
                } else if (payload.hasResponse()) {
                    logger.debug("Response message on work channel from " + req.getHeader().getNodeId());
                    new Response(sq).handle(req);
                } else if (payload.hasErr()) {
                    Common.Failure err = payload.getErr();
                    logger.error("failure from " + req.getHeader().getNodeId());
                    // PrintUtil.printFailure(err);
                } else if (payload.hasTask()) {
                    Work.Task t = payload.getTask();
                    sq.gerServerState().getTasks().addTask(t);
                } else if (payload.hasState()) {
                    Work.WorkState s = payload.getState();
                } else if (payload.hasRaftmsg()) {
                    RaftManager.getInstance().processRequest((Work.WorkRequest) msg);
                    //ElectionManager.getInstance().assessCurrentState();
                }
            }
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected processing failure", e);
            break;
        }
    }

    if (!forever) {
        logger.debug("connection queue closing");
    }
}

From source file:gash.router.server.queue.WorkOutboundAppWorker.java

License:Apache License

@Override
public void run() {
    Channel conn = sq.channel;
    if (conn == null || !conn.isOpen()) {
        PerChannelWorkQueue.logger.error("connection missing, no outboundWork communication");
        return;/* w w  w  .ja v a 2 s.  c  om*/
    }

    while (true) {
        if (!forever && sq.outbound.size() == 0)
            break;

        try {
            // block until a message is enqueued
            GeneratedMessage msg = sq.outbound.take();
            if (conn.isWritable()) {
                boolean rtn = false;
                if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) {

                    ChannelFuture cf = sq.channel.writeAndFlush((Work.WorkRequest) msg);

                    logger.info("Server--sending -- work-- response");
                    // blocks on write - use listener to be async
                    cf.awaitUninterruptibly();
                    logger.debug("Written to channel");
                    rtn = cf.isSuccess();
                    if (!rtn) {
                        logger.error("Sending failed " + rtn + "{Reason:" + cf.cause() + "}");
                        sq.outbound.putFirst(msg);
                    } else
                        logger.info("Message Sent");
                }

            } else
                sq.outbound.putFirst(msg);
        } catch (InterruptedException ie) {
            break;
        } catch (Exception e) {
            logger.error("Unexpected communcation failure", e);
            break;
        }
    }

    if (!forever) {
        logger.debug("connection queue closing");
    }
}

From source file:io.advantageous.conekt.net.impl.ConektHandler.java

License:Open Source License

@Override
public void exceptionCaught(ChannelHandlerContext chctx, final Throwable t) throws Exception {
    Channel ch = chctx.channel();
    // Don't remove the connection at this point, or the handleClosed won't be called when channelInactive is called!
    C connection = getConnection(ch);//from w w w .jav a  2 s . co m
    if (connection != null) {
        ContextImpl context = getContext(connection);
        context.executeFromIO(() -> {
            try {
                if (ch.isOpen()) {
                    ch.close();
                }
            } catch (Throwable ignore) {
            }
            connection.handleException(t);
        });
    } else {
        ch.close();
    }
}