Mercurial > hg > Database > Christie
view src/main/java/christie/daemon/IncomingTcpConnection.java @ 272:b592fe1d4a4e default tip
create example Attendance
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 01 Jul 2021 20:41:07 +0900 |
parents | 3bddbfd6ea02 |
children |
line wrap: on
line source
package christie.daemon; import christie.codegear.CodeGearManager; import christie.datagear.*; import christie.datagear.command.*; import christie.datagear.RemoteMessage; import christie.datagear.dg.MessagePackDataGear; import org.msgpack.MessagePack; import org.msgpack.unpacker.Unpacker; import java.io.EOFException; import java.io.IOException; import java.nio.channels.ClosedChannelException; public class IncomingTcpConnection extends Thread { RemoteDataGearManager manager; CodeGearManager cgm; Connection connection; private MessagePack packer = new MessagePack(); public IncomingTcpConnection(Connection connection) { this.connection = connection; this.cgm = connection.cgm; } public void setManager(RemoteDataGearManager manager){ this.manager = manager; } 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 { RemoteMessage msg = unpacker.read(RemoteMessage.class); CommandType type = CommandType.getCommandTypeFromId(msg.type); //System.out.println("read " + msg.key); byte[] data; switch (type) { case PUT: data = new byte[unpacker.readInt()]; connection.socket.getInputStream().read(data); try { MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz)); //System.out.println(Class.forName(msg.clazz)); cgm.getLocalDGM().put(msg.key, dg); } catch (ClassNotFoundException e) { e.printStackTrace(); } break; case REMOTEPEEK: case REMOTETAKE: try { Command cm = new CommandBuilder().init(type).fromDgmName(msg.fromDgmName) .key(msg.key) .clazz(Class.forName(msg.clazz)) .connection(connection).build(); cgm.getLocalDGM().runCommand(cm); } catch (ClassNotFoundException e) { e.printStackTrace(); } break; case REPLY://待っていたwaitListに渡してcsにセット data = new byte[unpacker.readInt()]; connection.socket.getInputStream().read(data); try { MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz)); cgm.getDGM(msg.fromDgmName).resolveWaitCommand(msg.key, dg); } catch (ClassNotFoundException e) { e.printStackTrace(); } break; default: break; } } catch (ClosedChannelException e) { return; }catch (EOFException e) { return; } catch (IOException e) { e.printStackTrace(); } } } }