TsiCpuDisconnected.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package com.tsi.comm.server.protocol;
  2. import com.tsi.comm.server.protocol.enums.eOpCode;
  3. import com.tsi.comm.server.vo.TsiNodeAddDetailVo;
  4. import com.tsi.comm.server.vo.TsiNodeAddVo;
  5. import com.tsi.comm.server.vo.TsiNodeVo;
  6. import com.tsi.comm.server.xnet.NettyUtils;
  7. import com.tsi.common.utils.ByteUtils;
  8. import com.tsi.common.utils.TimeUtils;
  9. import io.netty.channel.Channel;
  10. import lombok.Getter;
  11. import lombok.Setter;
  12. import static com.tsi.comm.server.protocol.TsiCvibProtocolSpec.*;
  13. @Getter
  14. @Setter
  15. public class TsiCpuDisconnected extends TsiCpuPacket {
  16. public TsiCpuDisconnected(long nodeId, Channel channel) {
  17. this(nodeId, TimeUtils.currentTimeSeconds(), System.nanoTime(), channel);
  18. }
  19. public TsiCpuDisconnected(long nodeId, long msec, long nsec, Channel channel) {
  20. super(nodeId, msec, nsec, NettyUtils.getRemoteIpAddressToLong(channel), NettyUtils.getRemotePort(channel));
  21. setOpCode(eOpCode.TSI_CPU_DISCONNECTED.getValue());
  22. }
  23. protected void makeAddNodeCvimPaket(TsiCpuPacket cpuPacket) {
  24. cpuPacket.cvimData = new byte[SIZE_IPC_SIZE]; // ipc head only
  25. // cvim-raw header
  26. System.arraycopy(this.timespec.bytes(), 0, cpuPacket.cvimData, POS_IPC_TIMESPEC, SIZE_TIMESPEC);
  27. ByteUtils.setUnsignedInt(cpuPacket.cvimData, POS_IPC_IPADDR, getRemoteIp());
  28. ByteUtils.setUnsignedShort(cpuPacket.cvimData, POS_IPC_PORT, getRemotePort());
  29. cpuPacket.cvimData[POS_IPC_CONNECT] = DISCONNECT;
  30. ByteUtils.setUnsignedInt(cpuPacket.cvimData, POS_IPC_NODEID, cpuPacket.nodeId);
  31. }
  32. public void parsing(TsiNodeVo nodeVo) {
  33. // nodeVo.getNodeId == this.nodeId
  34. if (nodeVo == null) {
  35. return;
  36. }
  37. TsiNodeAddVo tsiNodeAddVo = TsiCpuPacket.nodeAddManager.get(this.nodeId);
  38. if (tsiNodeAddVo == null) {
  39. // 연등지 정보가 없는 경우
  40. makeCvimPacket();
  41. return;
  42. }
  43. // 연등지 노드 카프카 패킷 생성
  44. for (Integer key : tsiNodeAddVo.getAddNodeMap().keySet()){
  45. TsiNodeAddDetailVo detailVo = tsiNodeAddVo.getAddNodeMap().get(key);
  46. TsiCpuAddPacket addPacket = new TsiCpuAddPacket(detailVo.getNodeId(), this.timespec, this.remoteIp, this.remotePort);
  47. makeAddNodeCvimPaket(addPacket);
  48. this.addNodes.add(addPacket);
  49. }
  50. }
  51. }