relay.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package mq
  2. import (
  3. "github.com/gravitl/netmaker/logic"
  4. "github.com/gravitl/netmaker/models"
  5. )
  6. func BroadCastRelayUpdate(relayReq models.RelayRequest) error {
  7. clients, err := logic.GetNetworkClients(relayReq.NetID)
  8. if err != nil {
  9. return err
  10. }
  11. // filter relay Node
  12. filteredClients := clients
  13. for i := len(filteredClients) - 1; i >= 0; i-- {
  14. if filteredClients[i].Node.ID.String() == relayReq.NodeID {
  15. filteredClients = append(filteredClients[:i], filteredClients[i+1:]...)
  16. break
  17. }
  18. }
  19. for _, relayedNodeID := range relayReq.RelayedNodes {
  20. relayedNode, err := logic.GetNodeByID(relayedNodeID)
  21. if err != nil {
  22. continue
  23. }
  24. h, err := logic.GetHost(relayedNode.HostID.String())
  25. if err != nil {
  26. continue
  27. }
  28. BroadcastDelPeer(h, filteredClients)
  29. FlushNetworkPeersToHost(models.Client{Host: *h, Node: relayedNode}, clients)
  30. }
  31. relayNode, err := logic.GetNodeByID(relayReq.NodeID)
  32. if err != nil {
  33. return err
  34. }
  35. relayHost, err := logic.GetHost(relayNode.HostID.String())
  36. if err != nil {
  37. return err
  38. }
  39. return BroadcastAddOrUpdateNetworkPeer(models.Client{Host: *relayHost, Node: relayNode}, true)
  40. }
  41. func BroadCastRelayRemoval(network string) error {
  42. clients, err := logic.GetNetworkClients(network)
  43. if err != nil {
  44. return err
  45. }
  46. for _, client := range clients {
  47. client := client
  48. go FlushNetworkPeersToHost(client, clients)
  49. }
  50. return err
  51. }