Java tutorial
// // MessagePack-RPC for Java // // Copyright (C) 2010 FURUHASHI Sadayuki // // Licensed 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. // /* * Copyright (C) 2014-2015 Information Analysis Laboratory, NICT * * RaSC is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or (at * your option) any later version. * * RaSC is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.msgpack.rpc.loop.netty; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import java.nio.ByteBuffer; import java.util.List; import org.msgpack.MessagePack; import org.msgpack.type.Value; public class MessagePackDecoder extends ByteToMessageDecoder { MessagePack messagePack; public MessagePackDecoder(MessagePack messagePack) { super(); this.messagePack = messagePack; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> result) throws Exception { // TODO ??? ByteBuffer buffer = msg.nioBuffer(); if (!buffer.hasRemaining()) { return; } byte[] bytes = buffer.array(); // FIXME buffer must has array int offset = buffer.arrayOffset() + buffer.position(); int length = buffer.arrayOffset() + buffer.limit(); Value v = messagePack.read(bytes, offset, length); result.add(v); } }