gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/router/handler/table.go (about) 1 package handler 2 3 import ( 4 "context" 5 6 "gitee.com/liuxuezhan/go-micro-v1.18.0/errors" 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 Router router.Router 13 } 14 15 func (t *Table) Create(ctx context.Context, route *pb.Route, resp *pb.CreateResponse) error { 16 err := t.Router.Table().Create(router.Route{ 17 Service: route.Service, 18 Address: route.Address, 19 Gateway: route.Gateway, 20 Network: route.Network, 21 Router: route.Router, 22 Link: route.Link, 23 Metric: route.Metric, 24 }) 25 if err != nil { 26 return errors.InternalServerError("go.micro.router", "failed to create route: %s", err) 27 } 28 29 return nil 30 } 31 32 func (t *Table) Update(ctx context.Context, route *pb.Route, resp *pb.UpdateResponse) error { 33 err := t.Router.Table().Update(router.Route{ 34 Service: route.Service, 35 Address: route.Address, 36 Gateway: route.Gateway, 37 Network: route.Network, 38 Router: route.Router, 39 Link: route.Link, 40 Metric: route.Metric, 41 }) 42 if err != nil { 43 return errors.InternalServerError("go.micro.router", "failed to update route: %s", err) 44 } 45 46 return nil 47 } 48 49 func (t *Table) Delete(ctx context.Context, route *pb.Route, resp *pb.DeleteResponse) error { 50 err := t.Router.Table().Delete(router.Route{ 51 Service: route.Service, 52 Address: route.Address, 53 Gateway: route.Gateway, 54 Network: route.Network, 55 Router: route.Router, 56 Link: route.Link, 57 Metric: route.Metric, 58 }) 59 if err != nil { 60 return errors.InternalServerError("go.micro.router", "failed to delete route: %s", err) 61 } 62 63 return nil 64 } 65 66 // List returns all routes in the routing table 67 func (t *Table) List(ctx context.Context, req *pb.Request, resp *pb.ListResponse) error { 68 routes, err := t.Router.Table().List() 69 if err != nil { 70 return errors.InternalServerError("go.micro.router", "failed to list routes: %s", err) 71 } 72 73 respRoutes := make([]*pb.Route, 0, len(routes)) 74 for _, route := range routes { 75 respRoute := &pb.Route{ 76 Service: route.Service, 77 Address: route.Address, 78 Gateway: route.Gateway, 79 Network: route.Network, 80 Router: route.Router, 81 Link: route.Link, 82 Metric: route.Metric, 83 } 84 respRoutes = append(respRoutes, respRoute) 85 } 86 87 resp.Routes = respRoutes 88 89 return nil 90 } 91 92 func (t *Table) Query(ctx context.Context, req *pb.QueryRequest, resp *pb.QueryResponse) error { 93 routes, err := t.Router.Table().Query(router.QueryService(req.Query.Service)) 94 if err != nil { 95 return errors.InternalServerError("go.micro.router", "failed to lookup routes: %s", err) 96 } 97 98 respRoutes := make([]*pb.Route, 0, len(routes)) 99 for _, route := range routes { 100 respRoute := &pb.Route{ 101 Service: route.Service, 102 Address: route.Address, 103 Gateway: route.Gateway, 104 Network: route.Network, 105 Router: route.Router, 106 Link: route.Link, 107 Metric: route.Metric, 108 } 109 respRoutes = append(respRoutes, respRoute) 110 } 111 112 resp.Routes = respRoutes 113 114 return nil 115 }