gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/router/service/table.go (about) 1 package service 2 3 import ( 4 "context" 5 6 "gitee.com/liuxuezhan/go-micro-v1.18.0/client" 7 "gitee.com/liuxuezhan/go-micro-v1.18.0/router" 8 pb "gitee.com/liuxuezhan/go-micro-v1.18.0/router/proto" 9 ) 10 11 type table struct { 12 table pb.TableService 13 callOpts []client.CallOption 14 } 15 16 // Create new route in the routing table 17 func (t *table) Create(r router.Route) error { 18 route := &pb.Route{ 19 Service: r.Service, 20 Address: r.Address, 21 Gateway: r.Gateway, 22 Network: r.Network, 23 Link: r.Link, 24 Metric: r.Metric, 25 } 26 27 if _, err := t.table.Create(context.Background(), route, t.callOpts...); err != nil { 28 return err 29 } 30 31 return nil 32 } 33 34 // Delete deletes existing route from the routing table 35 func (t *table) Delete(r router.Route) error { 36 route := &pb.Route{ 37 Service: r.Service, 38 Address: r.Address, 39 Gateway: r.Gateway, 40 Network: r.Network, 41 Link: r.Link, 42 Metric: r.Metric, 43 } 44 45 if _, err := t.table.Delete(context.Background(), route, t.callOpts...); err != nil { 46 return err 47 } 48 49 return nil 50 } 51 52 // Update updates route in the routing table 53 func (t *table) Update(r router.Route) error { 54 route := &pb.Route{ 55 Service: r.Service, 56 Address: r.Address, 57 Gateway: r.Gateway, 58 Network: r.Network, 59 Link: r.Link, 60 Metric: r.Metric, 61 } 62 63 if _, err := t.table.Update(context.Background(), route, t.callOpts...); err != nil { 64 return err 65 } 66 67 return nil 68 } 69 70 // List returns the list of all routes in the table 71 func (t *table) List() ([]router.Route, error) { 72 resp, err := t.table.List(context.Background(), &pb.Request{}, t.callOpts...) 73 if err != nil { 74 return nil, err 75 } 76 77 routes := make([]router.Route, len(resp.Routes)) 78 for i, route := range resp.Routes { 79 routes[i] = router.Route{ 80 Service: route.Service, 81 Address: route.Address, 82 Gateway: route.Gateway, 83 Network: route.Network, 84 Link: route.Link, 85 Metric: route.Metric, 86 } 87 } 88 89 return routes, nil 90 } 91 92 // Lookup looks up routes in the routing table and returns them 93 func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) { 94 query := router.NewQuery(q...) 95 96 // call the router 97 resp, err := t.table.Query(context.Background(), &pb.QueryRequest{ 98 Query: &pb.Query{ 99 Service: query.Service, 100 Gateway: query.Gateway, 101 Network: query.Network, 102 }, 103 }, t.callOpts...) 104 105 // errored out 106 if err != nil { 107 return nil, err 108 } 109 110 routes := make([]router.Route, len(resp.Routes)) 111 for i, route := range resp.Routes { 112 routes[i] = router.Route{ 113 Service: route.Service, 114 Address: route.Address, 115 Gateway: route.Gateway, 116 Network: route.Network, 117 Link: route.Link, 118 Metric: route.Metric, 119 } 120 } 121 122 return routes, nil 123 }