Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package modules
  2. import "encoding/json"
  3. //import "strconv"
  4. //*****메세지 타입 상수화
  5. const (
  6. KGM = 1 + iota
  7. KSM
  8. PM
  9. SM
  10. RM
  11. WM
  12. )
  13. //*****메세지 틀*****
  14. type Message struct {
  15. from string //ip주소
  16. version string
  17. time string
  18. kind int //종류
  19. }
  20. func (msg Message) From() string {
  21. return msg.from
  22. }
  23. func (msg Message) Version() string {
  24. return msg.version
  25. }
  26. func (msg Message) Time() string {
  27. return msg.time
  28. }
  29. func (msg Message) Kind() int {
  30. return msg.kind
  31. }
  32. type MsgUnit interface {
  33. // ConvertToJson - send 전 json형식으로 바꾸는 함수
  34. ConvertToJson() ([]byte, error)
  35. // CheckType - Message의 타입을 알려줌
  36. CheckType() int
  37. }
  38. //*****각 메세지 형식 및 정의**********
  39. //KeyGen 명령 메세지
  40. type KeyGenMsg struct {
  41. Message
  42. iptable []string
  43. }
  44. //Key공유 메세지
  45. type KeyShareMsg struct {
  46. Message
  47. key string
  48. }
  49. //전달할 내용을 담은 메세지
  50. type PublishMsg struct {
  51. Message
  52. topic []int64 //대주제
  53. value []int64 //topic의 세부적인 내용
  54. content []int64 // 내용
  55. }
  56. //구독 정보를 담은 메세지
  57. type SubscriptionMsg struct {
  58. Message
  59. topic []int64 //대주제
  60. value []string //범위 및 세부조건, 피연산자 연산자 순으로 등장
  61. isAlpha bool // 범위연산인지 단순비교연산인지 구분 가능하게 함
  62. }
  63. //Microservice 등록 메세지
  64. type RegisterMsg struct {
  65. Message
  66. }
  67. //Microservice 탈퇴 메세지(없앰)
  68. type WithdrawMsg struct {
  69. Message
  70. }
  71. //**************************
  72. func (msg *KeyGenMsg) ConvertToJson() ([]byte, error) {
  73. js := msg
  74. jsonBytes, err := json.Marshal(js)
  75. return jsonBytes, err
  76. }
  77. func (msg *KeyShareMsg) ConvertToJson() ([]byte, error) {
  78. js := msg
  79. jsonBytes, err := json.Marshal(js)
  80. return jsonBytes, err
  81. }
  82. func (msg *PublishMsg) ConvertToJson() ([]byte, error) {
  83. js := msg
  84. jsonBytes, err := json.Marshal(js)
  85. return jsonBytes, err
  86. }
  87. func (msg *SubscriptionMsg) ConvertToJson() ([]byte, error) {
  88. js := msg
  89. jsonBytes, err := json.Marshal(js)
  90. return jsonBytes, err
  91. }
  92. func (msg *RegisterMsg) ConvertToJson() ([]byte, error) {
  93. js := msg
  94. jsonBytes, err := json.Marshal(js)
  95. return jsonBytes, err
  96. }
  97. func (msg *WithdrawMsg) ConvertToJson() ([]byte, error) {
  98. js := msg
  99. jsonBytes, err := json.Marshal(js)
  100. return jsonBytes, err
  101. }
  102. func (msg Message) CheckType() int {
  103. return msg.kind
  104. }
  105. //KeyGenMsg 생성자
  106. func NewKeyGenMsg(table *MStable) *KeyGenMsg{
  107. m:= &KeyGenMsg{}
  108. for _,value:= range table.NodeTable{
  109. m.iptable=append(m.iptable,value.Getipaddr())
  110. }
  111. return m
  112. }