/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.netconf.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.local.LocalAddress; import io.netty.channel.local.LocalChannel; import io.netty.channel.local.LocalServerChannel; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import java.io.BufferedReader; import java.io.InputStreamReader; import org.opendaylight.controller.netconf.util.osgi.NetconfConfigUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Echoes back any received data from a client. */ public class EchoServer implements Runnable { private static final Logger logger = LoggerFactory.getLogger(EchoServer.class); public void run() { // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) .channel(LocalServerChannel.class) .option(ChannelOption.SO_BACKLOG, 100) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new ChannelInitializer() { @Override public void initChannel(LocalChannel ch) throws Exception { ch.pipeline().addLast(new EchoServerHandler()); } }); // Start the server. LocalAddress localAddress = NetconfConfigUtil.getNetconfLocalAddress(); ChannelFuture f = b.bind(localAddress).sync(); // Wait until the server socket is closed. f.channel().closeFuture().sync(); } catch (Exception e) { throw new RuntimeException(e); } finally { // Shut down all event loops to terminate all threads. bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } public static void main(String[] args) throws Exception { new Thread(new EchoServer()).start(); Thread.sleep(1000); EchoClientHandler clientHandler = new EchoClientHandler(); EchoClient echoClient = new EchoClient(clientHandler); new Thread(echoClient).start(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); do { String message = reader.readLine(); if (message == null || "exit".equalsIgnoreCase(message)) { break; } logger.debug("Got '{}'", message); clientHandler.write(message); } while (true); System.exit(0); } }