| /* |
| |
* 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(); |
| |
} |
| |
} |
| |
} |