Mercurial > hg > Database > Christie
view src/main/java/christie/daemon/IncomingTcpConnection.java @ 14:f2b30b47ef67
RemotePutTest is working
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 11 Jan 2018 18:02:59 +0900 |
parents | bcd4f2c19185 |
children | 186a86dc4c8a |
line wrap: on
line source
package christie.daemon; import christie.codegear.CodeGearManager; import christie.codegear.Command; import christie.codegear.CommandType; import christie.datagear.DataGear; import christie.datagear.RemoteDataGearManager; import org.msgpack.MessagePack; import org.msgpack.unpacker.Unpacker; import java.io.IOException; import java.nio.channels.ClosedChannelException; import java.util.concurrent.ConcurrentHashMap; public class IncomingTcpConnection extends Thread { ConcurrentHashMap<String, CodeGearManager> cgms; Connection connection; private static final MessagePack packer = new MessagePack(); public IncomingTcpConnection(Connection connection, CodeGearManager cgm) { this.cgms = cgm.getCgms(); this.connection = connection; } public void run() { Unpacker unpacker = null; try { unpacker = packer.createUnpacker(connection.socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } if (unpacker == null) { return; } while (true) { try { Command cmd = null; RemoteMessage msg = unpacker.read(RemoteMessage.class); CommandType type = CommandType.getCommandTypeFromId(msg.type); int dataSize = unpacker.readInt(); byte[] data = new byte[dataSize]; switch (type) { case PUT: connection.socket.getInputStream().read(data); try { DataGear dg = new DataGear(); dg.setMessagePack(data, Class.forName(msg.clazz)); cgms.get(msg.cgmName).getLocalDGM().put(msg.key, dg); } catch (ClassNotFoundException e) { e.printStackTrace(); } break; /* case PEEK: case TAKE: cmd = new Command(null, dg, null, null, null); break; case REPLY: connection.socket.getInputStream().read(data); dg = new DataGear(data, data.getClass()); Command rCmd = new Command(null, dg, null, null, null); //cmd.cg.idg.reply(cmd.dg, rCmd); break;*/ default: break; } } catch (ClosedChannelException e) { return; } catch (IOException e) { e.printStackTrace(); } } } }