package com.tsi.comm.server.protocol; import com.tsi.comm.server.protocol.enums.eOpCode; import com.tsi.comm.server.vo.TsiNodeAddDetailVo; import com.tsi.comm.server.vo.TsiNodeAddVo; import com.tsi.comm.server.vo.TsiNodeVo; import com.tsi.comm.server.xnet.NettyUtils; import com.tsi.common.utils.ByteUtils; import com.tsi.common.utils.TimeUtils; import io.netty.channel.Channel; import lombok.Getter; import lombok.Setter; import static com.tsi.comm.server.protocol.TsiCvibProtocolSpec.*; @Getter @Setter public class TsiCpuDisconnected extends TsiCpuPacket { public TsiCpuDisconnected(long nodeId, Channel channel) { this(nodeId, TimeUtils.currentTimeSeconds(), System.nanoTime(), channel); } public TsiCpuDisconnected(long nodeId, long msec, long nsec, Channel channel) { super(nodeId, msec, nsec, NettyUtils.getRemoteIpAddressToLong(channel), NettyUtils.getRemotePort(channel)); setOpCode(eOpCode.TSI_CPU_DISCONNECTED.getValue()); } protected void makeAddNodeCvimPaket(TsiCpuPacket cpuPacket) { cpuPacket.cvimData = new byte[SIZE_IPC_SIZE]; // ipc head only // cvim-raw header System.arraycopy(this.timespec.bytes(), 0, cpuPacket.cvimData, POS_IPC_TIMESPEC, SIZE_TIMESPEC); ByteUtils.setUnsignedInt(cpuPacket.cvimData, POS_IPC_IPADDR, getRemoteIp()); ByteUtils.setUnsignedShort(cpuPacket.cvimData, POS_IPC_PORT, getRemotePort()); cpuPacket.cvimData[POS_IPC_CONNECT] = DISCONNECT; ByteUtils.setUnsignedInt(cpuPacket.cvimData, POS_IPC_NODEID, cpuPacket.nodeId); } public void parsing(TsiNodeVo nodeVo) { // nodeVo.getNodeId == this.nodeId if (nodeVo == null) { return; } TsiNodeAddVo tsiNodeAddVo = TsiCpuPacket.nodeAddManager.get(this.nodeId); if (tsiNodeAddVo == null) { // 연등지 정보가 없는 경우 makeCvimPacket(); return; } // 연등지 노드 카프카 패킷 생성 for (Integer key : tsiNodeAddVo.getAddNodeMap().keySet()){ TsiNodeAddDetailVo detailVo = tsiNodeAddVo.getAddNodeMap().get(key); TsiCpuAddPacket addPacket = new TsiCpuAddPacket(detailVo.getNodeId(), this.timespec, this.remoteIp, this.remotePort); makeAddNodeCvimPaket(addPacket); this.addNodes.add(addPacket); } } }