ClusterNetState.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.its.common.cluster.vo;
  2. import com.its.common.cluster.utils.ClusterUtils;
  3. import io.netty.channel.Channel;
  4. import lombok.Data;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Calendar;
  7. import java.util.Date;
  8. @Data
  9. public class ClusterNetState {
  10. private int state;
  11. private Channel channel;
  12. private long connectCount;
  13. private long lastRecvTime;
  14. private long lastSendTime;
  15. private int retryCount;
  16. private Date connectTime;
  17. private Date disconnectTime;
  18. public ClusterNetState() {
  19. init();
  20. }
  21. public void init() {
  22. this.state = ClusterNET.CLOSED;
  23. this.channel = null;
  24. this.connectCount = 0;
  25. this.lastRecvTime = 0;
  26. this.lastSendTime = 0;
  27. this.retryCount = 0;
  28. this.connectTime = null;
  29. this.disconnectTime = null;
  30. }
  31. public boolean isAlive() {
  32. return (this.state != ClusterNET.CLOSED);
  33. }
  34. public void setLastRecvTime() {
  35. this.lastRecvTime = System.currentTimeMillis();
  36. }
  37. public void setLastSendTime() {
  38. this.lastSendTime = System.currentTimeMillis();
  39. }
  40. public void retry() {
  41. this.retryCount++;
  42. }
  43. public void request() {
  44. this.retryCount = 0;
  45. }
  46. public void connect(Channel channel) {
  47. this.state = ClusterNET.LOGIN_WAIT;
  48. this.channel = channel;
  49. this.connectCount++;
  50. this.connectTime = new Date();
  51. this.retryCount = 0;
  52. setLastRecvTime();
  53. // channel 이 null 인 경우 나 자신의 정보를 저장하기위함(항상 통신이 정상이라고 판단하기 위해서)
  54. if (channel == null) {
  55. // 송신 및 전송시각을 초기 기동시각으로 설정하는 것과 같음
  56. setLastRecvTime();
  57. setLastSendTime();
  58. }
  59. loginOk();
  60. }
  61. public void loginOk() {
  62. this.state = ClusterNET.DATA_TRANS;
  63. }
  64. public void disConnect() {
  65. if (this.state != ClusterNET.CLOSED) {
  66. this.disconnectTime = new Date();
  67. }
  68. this.state = ClusterNET.CLOSED;
  69. this.channel = null;
  70. this.retryCount = 0;
  71. }
  72. public void terminate() {
  73. this.state = ClusterNET.TERMINATE;
  74. }
  75. public boolean isActive() {
  76. return this.channel != null && this.channel.isActive();
  77. }
  78. private String timeToString(long timestamp) {
  79. return ClusterUtils.timeToStringYmd(timestamp);
  80. }
  81. public String getLastRecvTimeString() {
  82. return timeToString(this.lastRecvTime);
  83. }
  84. public String getLastSendTimeString() {
  85. return timeToString(this.lastSendTime);
  86. }
  87. private String timeToString(Date dateTime) {
  88. if (dateTime == null) {
  89. return "1970-01-01 00:00:00";
  90. }
  91. Calendar cal = Calendar.getInstance();
  92. cal.setTime(dateTime);
  93. return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(cal.getTime());
  94. }
  95. public String getConnectTimeString() {
  96. return timeToString(this.connectTime);
  97. }
  98. public String getDisconnectTimeString() {
  99. return timeToString(this.disconnectTime);
  100. }
  101. }