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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package modules
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "net"
  7. "net/rpc"
  8. )
  9. //temporary type for matching manager
  10. type match_manager struct{}
  11. func (match_mng *match_manager) matching(queue *MsgQueue) {
  12. //msg := queue.pop(true)
  13. //Implement here ~~
  14. }
  15. func (match_mng *match_manager) add_subscription(msg MsgUnit) {
  16. }
  17. //temporary type for secure(key) manager
  18. type secure_manager struct{}
  19. type Moscato struct {
  20. queue MsgQueue
  21. ms_mng MStable
  22. match_mng match_manager
  23. secure_mng secure_manager
  24. }
  25. // Send - rpc를 이용하여 msg전송
  26. func Send(ipaddr string, message MsgUnit) error {
  27. return nil
  28. }
  29. // Recieve - rpc를 이용하여 msg전달 받음(rpc call)
  30. func (moscato *Moscato) Recieve(msg MsgUnit) (MsgUnit, error) {
  31. msg_type := msg.CheckType()
  32. //메세지 타입에 따라 다르게 처리
  33. switch msg_type {
  34. case KSM: //Key share msg
  35. case PM: //Publish msg
  36. moscato.queue.push(msg.(*PublishMsg))
  37. case SM: //Subscription msg
  38. moscato.match_mng.add_subscription(msg.(*SubscriptionMsg))
  39. case RM: //Register msg
  40. //var newmsg RegisterMsg
  41. var newmsg = msg.(*RegisterMsg)
  42. newNode := MSnode{newmsg.from, newmsg.from}
  43. moscato.ms_mng.add_microservice(newNode)
  44. case WM: //Withdraw msg
  45. moscato.ms_mng.remove_microservice(msg.(*WithdrawMsg).from)
  46. default:
  47. return nil, errors.New("Message type Error: Not registered message type")
  48. }
  49. return msg, nil
  50. }
  51. func (moscato *Moscato) Run() {
  52. //모스카토 구조체 변수 초기화
  53. moscato.queue.queue_init()
  54. //go routine -> matching 동작
  55. go moscato.match_mng.matching(&moscato.queue)
  56. //rpc 등록 -> Receive함수
  57. rpc.Register(moscato)
  58. moscato.Listen()
  59. }
  60. func (moscato *Moscato) Listen() {
  61. l, err := net.Listen("tcp", fmt.Sprintf(":%v", 8160))
  62. if err != nil {
  63. log.Fatal(fmt.Sprintf("Unable to listen on given port: %s", err))
  64. }
  65. defer l.Close()
  66. for {
  67. conn, _ := l.Accept()
  68. go rpc.ServeConn(conn)
  69. }
  70. }