/* * Copyright 2011 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 org.jboss.netty.example.local; import java.util.concurrent.Executor; import org.jboss.netty.channel.ChannelDownstreamHandler; import org.jboss.netty.channel.ChannelEvent; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.ChannelUpstreamHandler; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; import org.jboss.netty.handler.execution.ExecutionHandler; public class LocalServerPipelineFactory implements ChannelPipelineFactory { private final ExecutionHandler executionHandler; public LocalServerPipelineFactory(Executor eventExecutor) { executionHandler = new ExecutionHandler(eventExecutor); } public ChannelPipeline getPipeline() throws Exception { final ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("decoder", new StringDecoder()); pipeline.addLast("encoder", new StringEncoder()); pipeline.addLast("executor", executionHandler); pipeline.addLast("handler", new EchoCloseServerHandler()); return pipeline; } static class EchoCloseServerHandler implements ChannelUpstreamHandler, ChannelDownstreamHandler { public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception { if (e instanceof MessageEvent) { final MessageEvent evt = (MessageEvent) e; String msg = (String) evt.getMessage(); if (msg.equalsIgnoreCase("quit")) { Channels.close(e.getChannel()); return; } } ctx.sendUpstream(e); } public void handleDownstream(ChannelHandlerContext ctx, ChannelEvent e) { if (e instanceof MessageEvent) { final MessageEvent evt = (MessageEvent) e; String msg = (String) evt.getMessage(); if (msg.equalsIgnoreCase("quit")) { Channels.close(e.getChannel()); return; } System.err.println("SERVER:" + msg); // Write back Channels.write(e.getChannel(), msg); } ctx.sendDownstream(e); } } }