Remove netconf-ssh project
[netconf.git] / netconf / mdsal-netconf-ssh / src / test / java / org / opendaylight / netconf / netty / EchoClient.java
diff --git a/netconf/mdsal-netconf-ssh/src/test/java/org/opendaylight/netconf/netty/EchoClient.java b/netconf/mdsal-netconf-ssh/src/test/java/org/opendaylight/netconf/netty/EchoClient.java
new file mode 100644 (file)
index 0000000..2cdd97c
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * 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.netconf.netty;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.local.LocalAddress;
+import io.netty.channel.local.LocalChannel;
+import io.netty.channel.nio.NioEventLoopGroup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Sends one message when a connection is open and echoes back any received
+ * data to the server.  Simply put, the echo client initiates the ping-pong
+ * traffic between the echo client and server by sending the first message to
+ * the server.
+ */
+public class EchoClient extends Thread {
+    private static final Logger LOG = LoggerFactory.getLogger(EchoClient.class);
+
+
+    private final ChannelInitializer<LocalChannel> channelInitializer;
+
+
+    public EchoClient(final ChannelHandler clientHandler) {
+        channelInitializer = new ChannelInitializer<LocalChannel>() {
+            @Override
+            public void initChannel(LocalChannel ch) throws Exception {
+                ch.pipeline().addLast(clientHandler);
+            }
+        };
+    }
+
+    public EchoClient(ChannelInitializer<LocalChannel> channelInitializer) {
+        this.channelInitializer = channelInitializer;
+    }
+
+    @SuppressWarnings("checkstyle:IllegalCatch")
+    @Override
+    public void run() {
+        // Configure the client.
+        EventLoopGroup group = new NioEventLoopGroup();
+        try {
+            Bootstrap bootstrap = new Bootstrap();
+
+            bootstrap.group(group)
+                    .channel(LocalChannel.class)
+                    .handler(channelInitializer);
+
+            // Start the client.
+            LocalAddress localAddress = new LocalAddress("foo");
+            ChannelFuture future = bootstrap.connect(localAddress).sync();
+
+            // Wait until the connection is closed.
+            future.channel().closeFuture().sync();
+        } catch (Exception e) {
+            LOG.error("Error in client", e);
+            throw new RuntimeException("Error in client", e);
+        } finally {
+            // Shut down the event loop to terminate all threads.
+            LOG.info("Client is shutting down");
+            group.shutdownGracefully();
+        }
+    }
+}