Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

message.go 2.5KB

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. }