view src/main/java/christie/daemon/IncomingTcpConnection.java @ 13:bcd4f2c19185

don't work MessagePack unconvert for remote put
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Wed, 10 Jan 2018 20:37:47 +0900
parents b49a926cbdd9
children f2b30b47ef67
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;
                DataGear dg = 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 {
                            cgms.get(msg.cgmName).getDGM().put(msg.key, new DataGear(data, Class.forName(msg.clazz)));
                        } 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();
            }
        }
    }


}