/* |
|
* Copyright 2014 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 io.netty.example.memcache.binary; |
|
|
|
import io.netty.bootstrap.Bootstrap; |
|
import io.netty.channel.Channel; |
|
import io.netty.channel.ChannelFuture; |
|
import io.netty.channel.ChannelInitializer; |
|
import io.netty.channel.ChannelPipeline; |
|
import io.netty.channel.EventLoopGroup; |
|
import io.netty.channel.nio.NioEventLoopGroup; |
|
import io.netty.channel.socket.SocketChannel; |
|
import io.netty.channel.socket.nio.NioSocketChannel; |
|
import io.netty.handler.codec.memcache.binary.BinaryMemcacheClientCodec; |
|
import io.netty.handler.codec.memcache.binary.BinaryMemcacheObjectAggregator; |
|
import io.netty.handler.ssl.SslContext; |
|
import io.netty.handler.ssl.SslContextBuilder; |
|
import io.netty.handler.ssl.util.InsecureTrustManagerFactory; |
|
|
|
import java.io.BufferedReader; |
|
import java.io.InputStreamReader; |
|
|
|
/** |
|
* Simple memcache client that demonstrates get and set commands against a memcache server. |
|
*/ |
|
public final class MemcacheClient { |
|
|
|
static final boolean SSL = System.getProperty("ssl") != null; |
|
static final String HOST = System.getProperty("host", "127.0.0.1"); |
|
static final int PORT = Integer.parseInt(System.getProperty("port", "11211")); |
|
|
|
public static void main(String[] args) throws Exception { |
|
// Configure SSL. |
|
final SslContext sslCtx; |
|
if (SSL) { |
|
sslCtx = SslContextBuilder.forClient() |
|
.trustManager(InsecureTrustManagerFactory.INSTANCE).build(); |
|
} else { |
|
sslCtx = null; |
|
} |
|
|
|
EventLoopGroup group = new NioEventLoopGroup(); |
|
try { |
|
Bootstrap b = new Bootstrap(); |
|
b.group(group) |
|
.channel(NioSocketChannel.class) |
|
.handler(new ChannelInitializer<SocketChannel>() { |
|
@Override |
|
protected void initChannel(SocketChannel ch) throws Exception { |
|
ChannelPipeline p = ch.pipeline(); |
|
if (sslCtx != null) { |
|
p.addLast(sslCtx.newHandler(ch.alloc(), HOST, PORT)); |
|
} |
|
p.addLast(new BinaryMemcacheClientCodec()); |
|
p.addLast(new BinaryMemcacheObjectAggregator(Integer.MAX_VALUE)); |
|
p.addLast(new MemcacheClientHandler()); |
|
} |
|
}); |
|
|
|
// Start the connection attempt. |
|
Channel ch = b.connect(HOST, PORT).sync().channel(); |
|
|
|
// Read commands from the stdin. |
|
System.out.println("Enter commands (quit to end)"); |
|
System.out.println("get <key>"); |
|
System.out.println("set <key> <value>"); |
|
ChannelFuture lastWriteFuture = null; |
|
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); |
|
for (;;) { |
|
String line = in.readLine(); |
|
if (line == null) { |
|
break; |
|
} |
|
if ("quit".equals(line.toLowerCase())) { |
|
ch.close().sync(); |
|
break; |
|
} |
|
// Sends the received line to the server. |
|
lastWriteFuture = ch.writeAndFlush(line); |
|
} |
|
|
|
// Wait until all messages are flushed before closing the channel. |
|
if (lastWriteFuture != null) { |
|
lastWriteFuture.sync(); |
|
} |
|
} finally { |
|
group.shutdownGracefully(); |
|
} |
|
} |
|
} |